文章目录
- final修饰符
- 1. final不能用来修饰构造方法
- 2. final修饰变量的一些注意问题
- 2.1 final修饰成员变量
- 2.2 final修饰引用类型
- 2.2.1 演示代码中lombok链式编程介绍
final修饰符
final具有“不可改变”的含义,它可以修饰非抽象类、非抽象成员方法和变量。
- 用final修饰的类不能被继承,没有子类
- 用final修饰的方法不能被子类的方法覆盖(Override)
- 用final修饰的变量表示常量,只能被赋值一次
1. final不能用来修饰构造方法
final不能用来修饰构造方法,因为“方法覆盖(Override)”仅适用于类的成员方法,而不适用于类的构造方法,父类的构造方法和子类的构造方法之间不存在覆盖(Override)关系,所以用final修饰构造方法是无意义的。
2. final修饰变量的一些注意问题
2.1 final修饰成员变量
final修饰成员变量,必须显示初始化,否则会产生编译错误
- final修饰的实例变量,可以在定义变量时候或者在构造方法中进行初始化
public class TestFinal1 {
final int i=1;
final int j;
public TestFinal1(int j) {
this.j = j;
}
}
public class TestFinal1 {
final int i;
final int j;
public TestFinal1(int i, int j) {
this.i = i;
this.j = j;
}
}
- final修饰的静态变量,可以再变量定义时进行初始化,或者在静态代码块中初始化
public class TestFinal1 {
static final int i=1;
static final int j;
static {
j=2;
}
}
2.2 final修饰引用类型
final修饰引用类型变量,那么该变量只能始终引用一个对象,但是对象的内容可以改变
@Data
@Accessors(chain = true)
public class Person {
private String name;
private int age;
}
public class TestFinal {
public static void main(String[] args) {
List<Person> personList = new ArrayList<Person>(){{
add(new Person().setAge(25).setName("张三"));
add(new Person().setAge(28).setName("李四"));
add(new Person().setAge(34).setName("王五"));
}};
List<Person> newPersonList = new TestFinal().method(personList);
System.out.println(newPersonList);
}
public List<Person> method(final List<Person> personList){
personList.add(new Person().setAge(29).setName("朱六"));
return personList;
}
}
输出结果:
[Person(name=张三, age=25), Person(name=李四, age=28), Person(name=王五, age=34), Person(name=朱六, age=29)]
2.2.1 演示代码中lombok链式编程介绍
在实体上面添加注解@Accessors(chain = true),如:
@Data
@Accessors(chain = true)
public class Person {
private String name;
private int age;
}
那么就可以针对该实体进行如下链式编程操作
new Person().setAge(25).setName("张三")