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 对象的话,生成的对象地址就会改变