Java 知识点
2018-09-06 本文已影响9人
07120665a058
- final 修饰符
final 类 不能被继承
final 方法 不能被重写
final 变量 不能修改引用
- Unicode实现方式:包含了UTF-8、UTF-16、UTF-32
UTF-8:可以用1 / 2 / 3 字节来表示
UTF-16:可以用 2 / 4 字节来表示
UTF-32:可以用 4 字节来表示
- 栈溢出
一种是stackoverflow,递归没终止条件
一种是outofmemory,方法中线程启动过多
- codePoint 和 char
一个char 不能完全代表一个code point,一个code point 可能会超过两个字节,一个char 表示不了,所以 code point 用 int 存储
- 字符串拼接
因为String不可变,每次拼接都会产生新的字符串,效率低,可以使用String.format()或者 new StringBuilder()
new StringBuffer() 是线程安全的,所以平常使用new StringBuilder()
- 初始化顺序
Init block 和 filed 都和声明顺序有关,但是都在constructor之前执行
- 变量初始化
Instance variables: are always initialized
Static variables: are always initialized
Local variables: must be initialized before use
局部变量声明后,Java虚拟机不会自动给它初始化为默认值,必须经过显示的初始化,才能使用。如果使用一个没有被初始化的局部变量,编译器会报错。
类的成员变量,Java虚拟机都会先自动给它初始化为默认值。
Java虚拟机会为数组的所有元素初始化为相应类型的默认值。引用类型被初始化为 null ,基本类型初始化为相应的值
- 继承(构造函数)
子类实例化时,会先调用父类的无参构造函数,再调用自己的构造函数
每个构造方法里面只能有一个(this / super)
如果构造方法里显示指定了(this / super),则会继续调用一次
可以用 this(args) / super(args) 显示指定调用有参构造还是无参构造
如果子类 / 父类 没有显示定义构造函数,会默认有一个无参构造函数
递归调用,编译错误
- 类的访问修饰符
Modifier | Class | Package | Subclass | World |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
package-private | Y | Y | N | N |
private | Y | N | N | N |