Java基础知识

tech2022-09-13  107

1.Java基本数据类型

byte/8

short/16

char/16

int/32

float/32

long/64

double/64

boolean / ?

jvm编译时会将Boolean用int表示,1真0假

2.装箱拆箱

每种基本数据类型都有对应的包装类,把基本数据类型转为包装类的过程称为装箱,反之称为拆箱。

3.缓存池,new Integer(123) 与 Integer.valueOf(123) 的区别

new Integer(123)会创建一个对象,多次new会得到不同的对象。                                                                                 

Integer.valueOf(123)会尝试从缓存池里获取数据,如果没有则创建并加到缓存池。多次使用会得到同一对象的引用。自动装箱会调用valueof方法。

4.String类

String类定义为final,不可继承,Java8中,String使用char数组存储。Java9之后使用byte数组存储,并添加coder变量标识编码方式。

5.Sting不可变的好处

1.便于获取hash值,创建的时候就计算,后续不需要重新计算

2.String pool需要,字符串池可以节省空间,String不可变才可实现

3.安全,String 经常作为参数,String 不可变性可以保证参数不可变

4.线程安全,String不可变就天生具有线程安全

6.StringBuffer和StringBuilder

StringBuilder线程不安全

StringBuffer线程安全,内部使用synchronize关键字进行同步

7.Java参数传递方式

按值传递。基本数据类型就不用说了。当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 是永远不会改变的。

8.final修饰

普通变量:初始化后不可更改

引用:初始化后不可更改指向,但可以更改引用对象本身的值

方法:不可重写(子类有签名相同的方法等同于新建方法)

类:不可继承

9.static修饰

变量:属于类,所有实例对象共享,可以通过类名直接访问

方法:不依赖任何实例,不可用this/super,可通过类名直接访问,内部只能访问静态变量

代码块:只在加载前运行一次(先于构造函数)

内部类:可以不依靠外部类的实例而创建

导包:使用静态变量和方法时可以不指定类名(可读性降低,不推荐)

10.初始化顺序

存在继承的情况下,初始化顺序为:

父类(静态变量、静态语句块)子类(静态变量、静态语句块)父类(实例变量、普通语句块)父类(构造函数)子类(实例变量、普通语句块)子类(构造函数)

11.抽象类与接口的异同

同:

1.不能被实例化

2.都包含抽象方法

异:

1.抽象类只能单继承,接口可以多继承

2.接口没有构造函数,抽象类有

3.接口的成员变量需要是static final的

12.反射

 

13.异常

 

最新回复(0)