Java final关键字

2021-04-09 10:08:50
final可以修饰类、属性、方法。 当用final修饰类的时候,此类不可被继承,即final类没有子类。这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生。 当利用final修饰一个属性(变量)的时候,此时的属性成为常量。 Java利用final定义常量(注意在JAVA命名规范中常量需要全部字母都大写) 例如:final int AGE = 10 ; 常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。 例如 ```java public class Test2 { public static void main(String[] args) { final Person_1 p = new Person_1("张三"); System.out.println(p.name); p.name = "李四"; System.out.println(p.name); } } ``` ```java class Person_1 { String name; public Person_1() { super(); } public Person_1(String name) { this.name = name; } } ``` 结果:张三 李四 Person_1中属性被改变了 final Person_1 p = new Person_1("张三"); 这个final 修饰的是p ,p里面放的是Person_1("张三")这个对象在堆中的地址, 其实是p 所指向的地址值不能改变了, p.name = "李四"; 这个语句是将堆里面的对象, 也即是Person_1("张三")里面的一个属性值改变了,这个动作是不会改变这个对象在堆中的地址值的,所以p 指向的地址值是没有改变的,因此不会有错. 但如果新new一个Person_1 对象的话,生成的对象地址就会改变