前言:
这节主要是对final、static这两个关键词一些注意点的记录,没有什么条理,想到了就记录下来。
正文:
final:
final可用于成员变量、局部(本地)变量、方法以及类
当final修饰类成员变量时,两种赋值方式,要么在定义时赋值,要么在类的构造函数中给final变量赋值,否则编译出错。如图:
- 方式一,在定义时赋值:
- 方式二,在类的构造函数中给final变量赋值:
但是,当final修饰局部变量时,可以不在定义时赋值,如图:
关于局部变量和成员变量的初始值的一些注意点:
局部变量必须要自己赋值,不然编译出错;成员变量的话,java虚拟机会为其赋默认值,对于不同的数据类型,默认值也不一样:
- 1、整数类型(byte、short、int、long)的基本类型变量的默认值为0。
- 2、单精度浮点型(float)的基本类型变量的默认值为0.0f。
- 3、双精度浮点型(double)的基本类型变量的默认值为0.0d。
- 4、字符型(char)的基本类型变量的默认为 “/u0000”。
- 5、布尔性的基本类型变量的默认值为 false。
- 6、引用类型的变量是默认值为 null。
- 7、数组引用类型的变量的默认值为 null。
static:
- 可用于成员变量和成员方法,被保存在类的内存区的公共存储单元中,而不是某个对象的内存区。
- 静态成员方法中不能访问非静态成员变量和非静态成员方法。非静态成员方法中可以访问静态成员方法和变量。
- 静态成员变量和静态成员方法有两种方式被引用,一是使用对象关联的引用变量名做前缀,二是使用类名作为前缀。
补充:
父类子类加载顺序
- 1.父类静态代码块和静态成员,按在类中出现的顺序依次执行。
- 2.子类静态代码块和静态成员,按在类中出现的顺序依次执行。
- 3.父类的非静态变量初始化
- 4.父类的构造方法
- 5.子类的非静态变量初始化
- 6.子类的构造方法
注意:静态方法调用时才会加载。