这里写目录标题
一、final关键字
- final实例字段必须在构造对象时初始化。也就是说,必须在构造器执行完成之前,将字段赋予初值,否则将不能再修改这个字段。
- 每创建一个实例,就会为实例变量分配一次内存
1、final修饰引用
- 当引用为基本数据类型,则该引用的值在实例后不可以再改变
如图,试图改变data的值将会报错。
- 当修饰的为对象时,则该对象变量不可以再指向另一个对象
2、final修饰方法
- 当final修饰方法时,则该方法将不可以被重写,若试图重写父类方法,
则会报错。不过该方法任然可以继承给子类- 注:类的private方法会隐式地被指定为final方法。
3、final修饰类
- final修饰类,则该类不可以被继承,俗称“断绝子孙类”,
但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
二、static关键字
1、静态字段(类变量或静态变量)
- static关键字修饰的字段与方法都会随着类的加载而分配和加载进
内存,而非静态字段与方法只用在实例化对象时才会分配内存。并且
static关键字修饰的字段与方法都只加载一次,类加载后就会存在,是
优先于对象的存在;而非静态的每实例化一次对象都会加载一次。- 与final修饰不同的是,static关键字修饰的字段可以修改值,方法可以
重写。
2、静态方法(类方法)
- static修饰方法,则该方法不可以访问非静态变量,只可以访问
静态成员。
- 对于静态字段与静态方法,虽然可以使用对象来访问它们,这也是合法的,但是它们是属于类的,建议使用类名来方法这些字段与方法。
三、final与static的区别
1、是否可以修改值
- 对于final来说,修饰的引用、方法和类都是“不可以改变的”,而static修饰则可以“改变”;
2、何时加载
- 对于final修饰的引用、方法来说,会在每一次实例化对象时加载,而static
修饰则会在类加载是就加载,且只加载一次,优先于对象存在。
四、静态常量
1、静态常量的定义
- 同时用final与static来修饰引用,这些引用则称为静态常量
2、静态常量的特点
- 不难看出,由于同时用final与static来修饰,则静态常量会随着类的加载而加载,且只加载一次;
- 值不可以修改
- 在类中,应当避免使用公共字段,然而,使用公共静态常量缺没有问题,因为其值不会被修改。