Java基础知识(二)

1、String、StringBuffer、StringBuilder

  • 操作少量数据->String
  • 单线程操作字符串缓冲区下操作大量数据->StringBuilder
  • 多线程操作字符串缓冲区下操作大量数据->StringBuffer
  • 可变性:String类中使用final关键字private final char value[],所以String对象是不可变的。而StringBuilder和StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuiler类中也是使用字符数组保存字符串char[] valur,但是没有用到final关键字,所以StringBuilder和StringBuffer都是可变的
  • 线程安全性:String中的对象是不可变的,也就可以理解为常量,所以String是线程安全的。AbstractStringBuilder是StringBuilder和StringBuffer的公共父类,它定义了一些字符串的基本操作,如:append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以StringBuffer是线程安全的。而StringBuilder并没有对方法进行加同步锁,所以StringBuilder是线程不安全的
  • 性能:每次对String类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String对象。StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同的情况下使用StringBuilder相对比StringBuffer能获得10%-15%左右的性能提升,但要冒线程不安全的险。

2、装箱、拆箱

  • 装箱:将基本类型用它们对应的引用类型包装起来
  • 拆箱:将包装类型转换为基本数据类型

3、无参构造函数的作用

程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中没有参数的构造方法。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时会发生错误。而且需要注意一点:如果没有定义任何构造函数,那么程序会帮我们自动定义一个默认无参的构造函数;如果只定义了有参构造函数,那么程序就不会帮我们定义无参构造函数。所以最保守的方法还是手动定义无参的构造函数。

4、java包、javax包

起初JavaAPI所需的包时java包,javax包当时只是扩展API包来使用。随着时间的推移,javax包逐渐扩展成为JavaAPI的组成部分。但是直接迁移比较麻烦,会破坏许多原有的代码,因此最终决定javax包成为标准API的一部分。

5、接口、抽象类

  • 接口的方法默认是public,所有方法在接口中不能有实现(java8开始接口方法可以用默认实现),抽象类可以有非抽象的方法,抽象方法必须只能声明,子类实现
  • 接口中的实例变量默认是final类型的,而抽象类中不一定
  • 一个类可以实现多个接口,但最多只能继承一个抽象类
  • 一个类实现接口的话就要实现接口的所有方法,而继承抽象类的话不一定
  • 接口不能用new实例化,但可以声明,但是必须引用一个实现该接口的对象
  • 抽象是对类的抽象,是一种模板设计;接口是行为的抽象,是一种行为的规范
  • 注:java8中,接口可以定义静态方法,可以直接用接口名调用,实现类和实现不可以调用。如果同时实现两个接口,接口中定义了一样的默认方法,必须重写。

6、成员变量、局部变量

  • 语法形式:成员变量属于类,局部变量属于方法(在方法中定义or方法的参数);成员变量可以被public、private、static等修饰符所修饰,而局部变量不能被访问控制修饰符和static修饰;但是,两者都可以被final修饰
  • 在内存中存储方式:局部变量,如果是基本数据类型,那么就直接存在栈中,如果是包装类型,比如 Integer i = new Integer (12);,会把对象存在堆中,对象的引用存在栈中。 成员变量,类的成员在不同对象中各不相同,基本数据类型和引用数据类型都存储在这个对象中,作为整体一并存储在堆中。而类的方法是所有对象共享的,方法是存在方法区的,只用当调用的时候才会被压栈,不用的时候是占内存的。
  • 生存时间:成员变量是对象的一部分,它随着对象的创建而存在;局部变量随着方法的调用完毕而自动消失
  • 没有赋初始值:成员变量会按照类型的默认值而赋值(除了被final修饰的变量);局部变量不会自动赋值

7、创建一个对象用什么运算符?对象实体、对象引用的差异?

使用new运算符,new创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存在栈内存中)。把对象实体比作气球,把对象引用比作绳子:一根绳子可以不系气球,也可以系一个气球;一个气球可以被n条绳子系住。结论:一个对象引用可以指向0个/1个对象实体;一个对象实体可以有n个对象引用指向它。

8、构造方法的特性

  • 名字与类名相同
  • 虽然没有返回值,但是也不能用void声明
  • 生成对象时自动执行,不用手动调用

9、静态方法、实例方法

在外部调用静态方法时,可以使用类名.方法名的方式,也可以使用对象名.方法名的方式。而实例方法只能通过对象名.方法名来调用。静态方法在访问本类的成员时,只允许访问静态变量、静态方法,不允许访问实例成员变量、方法,而实例方法没有这样的限制

10、final 关键字

  • 变量:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
  • 类:当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法
  • 方法:第一个原因是把方法锁定,以防任何继承类修改它的含义,不能重写;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的Java版本已经不需要使用final方法进行这些优化了)。类中所有的private方法都隐式地指定为final。

转载于:https://juejin.im/post/5c9894d15188252d5255f7e1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# WPF:初识布局容器

StackPanel堆叠布局 StackPanel是简单布局方式之一&#xff0c;可以很方便的进行纵向布局和横向布局 StackPanel默认是纵向布局的 <Window x:Class"WpfApplication1.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" …

Kibana源码分析--Hapijs路由设置理解笔记

【ES6解构赋值】&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment 【Joi APi】&#xff1a;https://github.com/hapijs/joi/blob/v13.1.2/API.md 转载于:https://www.cnblogs.com/lishidefengchen/p/866874…

Python打包EXE神器 pyinstaller

最近由于项目需要&#xff0c;以前的python文件需要编辑为EXE供前端客户使用。 由于最早接触的是distutils&#xff0c;所以一开始准备使用distutils和py2exe搭配来进行python的exe化&#xff0c;也就是传统的使用setup.py的方式来进行exe安装。但是结果都不是很好&#xff0c;…

好程序员HTML5前端教程-css的引入方式和选择器

好程序员HTML5前端教程-css的引入方式和选择器 01.引入css方式&#xff08;重点掌握&#xff09; 行内样式 内接样式 外接样式      3.1 链接式      3.1 导入式 css介绍 现在的互联网前端分三层&#xff1a; HTML&#xff1a;超文本标记语言。从语义的角度描述页面结…

4.4.6 数组也能无锁:AtomicIntegerArray

数组也可以实现cas操作&#xff0c;有以下几个类以及用法如下&#xff1a; public class AtomicTntegerArrayTest {public static void main(String[] args) {AtomicIntegerArray atomicIntegerArraynew AtomicIntegerArray(3);AtomicLongArray atomicIntegerArray1new AtomicL…

20种PLC元件编号和Modbus编号地址对应表

1、三菱&#xff1a; X元件支持Modbus之02功能码&#xff1b; Y元件支持Modbus之01、05、15功能码&#xff1b; D元件支持Modbus之03、06、16功能码。 2、西门子&#xff1a; I元件支持Modbus之02功能码&#xff1b; Q元件支持Modbus之01、05、15功能码&#xff1b; V元件…

暑期学习

由于最后大作业的呈现情况与短学期所完成的还相差甚远&#xff0c;所以在暑期的时候开始进一步的细化。 在这个过程之中产生了如下的问题&#xff1a; 已解决的有&#xff1a; 1.用a标签在同一页面实现跳转。 要点&#xff1a;标记<a href"../home#pre">的时候…

五、RabbitMQ的消息属性(读书笔记)

2019独角兽企业重金招聘Python工程师标准>>> 简介 当使用RabbitMQ发布消息时&#xff0c;消息又AMQP规范中的三个低层帧类型组成&#xff1a; Basic.publish方法帧&#xff1b;内容头帧&#xff1b;消息体帧&#xff1b;这三种帧类型按顺序一起工作&#xff0c;以便…

异步和单线程

转载于:https://www.cnblogs.com/sunmarvell/p/8674748.html

windows下解决mysql5中文乱码的问题

1.问题描述&#xff1a;一开始无论是在命令行&#xff0c;还是在mysql的客户端输入中文都会出现 “???” 问题之类的乱码问题&#xff1b; 2.解决办法&#xff1a; 1&#xff09;cmd 进入mysql &#xff0c;命令mysql -uroot -p123456 2&#xff09;然后执行 show variable…

C#:把dll封入exe中方法

在这个事件中,可以重新为加载失败的程序集手动加载 如果你将dll作为资源文件打包的你的应用程序中(或者类库中) 就可以在硬盘加载失败的时候 从资源文件中加载对应的dll 就像这样: class Program {static Program(){ //这个绑定事件必须要在引用到TestLibrary1这个程序…

P2685 [TJOI2012]桥

P2685 [TJOI2012]桥 思路&#xff1a; 先求出最短路&#xff1a; d1[u] : u 到 1 的最短路&#xff0c; d2[u] : u 到 n 的最短路 再求出一条从 1 到 n 的最短路链&#xff0c;然后从链上的每一个点出发dfs, 求出&#xff1a; l[u] : u 到 1 的最短路径过中和链的交点&#xf…

C#结构类型图

转载于:https://www.cnblogs.com/kangao/p/8674838.html

C# 全局钩子实现扫码枪获取信息

1.扫描枪获取数据原理基本相当于键盘数据&#xff0c;获取扫描枪扫描出来的数据&#xff0c;一般分为两种实现方式。 a&#xff09;文本框输入获取焦点&#xff0c;扫描后自动显示在文本框内。 b&#xff09;使用键盘钩子&#xff0c;勾取扫描枪虚拟按键&#xff0c;根据按键频…

Centos下安装mysql(二进制版)

Centos下安装mysql&#xff08;二进制版&#xff09; 1.下载安装包&#xff0c;选择相应的平台、版本&#xff0c;比如&#xff0c;选择64位Linux平台下的MySQL二进制包“Linux-Generic &#xff08;glibc 2.5&#xff09;&#xff08;x86&#xff0c;64-bit&#xff09;&#…

使用gradle多渠道打包

以友盟的多渠道打包为例&#xff0c;如果我们须要打包出例如以下渠道&#xff1a;UMENG, WANDOUJIA, YINGYONGBAO。 第一种方法。是须要创建文件的。我们在写完我们的代码之后&#xff0c;在app/src以下。分别创建和main同级目录的目录umeng, wandoujia, yingyongbao,这三个目录…

SMMS 2016 啟用深色主題

1、用文本類編輯器 打開C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio目錄下的 ssms.pkgundef 2、去除// Remove Dark theme行以下的注釋 3、重新打開SMMS&#xff0c;如果還沒有出現“深色”主題&#xff0c;請執行第4點 4、打開powershell【…

四大步骤,彻底关闭Win10自动更新

尽管Win11已经发布了一段时间&#xff0c;但目前互联网上大部分电脑用户所使用的的操作系统仍是Win10&#xff0c;对于Win10&#xff0c;笔者相信大部分人应该都不陌生&#xff0c;作为目前市面上占比最高的电脑系统&#xff0c;Win10的许多功能和操作逻辑都十分优秀&#xff0…

LeetCode算法题-Repeated String Match(Java实现)

这是悦乐书的第289次更新&#xff0c;第307篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题&#xff08;顺位题号是686&#xff09;。给定两个字符串A和B&#xff0c;找到A必须重复的最小次数&#xff0c;使得B是它的子字符串。 如果没有这样的解决方案&a…

php

●转载于:https://www.cnblogs.com/volcanorao/p/8678104.html