final代表的是不可改变的,主要作用有四个:
修饰类
final修饰的类不能有子类所有的成员方法都不能覆盖重写abstract与final不能使用作用在一个类上
修饰方法
修饰的方法不能被覆盖重写abstract与final不能同时作用与一个方法上
修饰一个局部变量
只能赋值一次
public void method
() {
final int num
= 10;
final int num2
;
num2
= 100;
}
对于基本类型来说,不可变说的是数据不可变对于引用类型来说,不可变说的是引用的地址值不可变。
public void method
() {
final Student s
= new Student();
s
.setName("张三");
}
修饰一个成员变量
对于成员变量来说,使用final关键字修饰,那么这个变量也是不可变的,但是有一点需要注意,就是成员变量是有默认值的,但是局部变量是没有默认值的。所以使用了final来定义一个成员变量的时候有两种赋值方式
直接在定义的时候赋值通过构造方法赋值上面两种方式是二选一,如果已经直接赋值,那么就不能使用构造方式来赋值。如果是有多个构造方法,必须保证每一个重载的构造方法都对final成员变量进行赋值
public class Person {
private final String name
;
public Person() {
this.name
= "张三";
}
public Person(String name
) {
this.name
= name
;
}
}