final Java 关键字 深入浅出,简单理解
final
-
定义
-
Java的关键字
-
被修饰的变量是不可变的
-
使用
-
数据
-
修饰基本数据类型
-
基本数据类型不可变的是其内容
-
修饰引用数据类型
-
引用数据类型不可变的是其引用
-
引用所指定的对象内容是可变的
public class Person { private String name; Person(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class FinalTest { private final String final_01 = "chenssy"; //编 译期常量,必须要进行初始化,且不可更改 private final String final_02; //构造器常量,在实例化一个对象时被初始化 private static Random random = new Random(); private final int final_03 = random.nextInt(50); //使用随机数来进行初始化 //引用 public final Person final_04 = new Person("chen_ssy"); //final指向引用数据类型 FinalTest(String final_02){ this.final_02 = final_02; } public String toString(){ return "final_01 = " + final_01 +" final_02 = " + final_02 + " final_03 = " + final_03 + " final_04 = " + final_04.getName(); } public static void main(String[] args) { System.out.println("------------第一次创建对象------------"); FinalTest final1 = new FinalTest("cm"); System.out.println(final1); System.out.println("------------第二次创建对 象------------"); FinalTest final2 = new FinalTest("zj"); System.out.println(final2); System.out.println("------------修改引用对 象--------------"); final2.final_04.setName("chenssy"); System.out.println(final2); } } ------------------ Output: ------------第一次创建对象------------ final_01 = chenssy final_02 = cm final_03 = 34 final_04 = chen_ssy ------------第二次创建对象------------ final_01 = chenssy final_02 = zj final_03 = 46 final_04 = chen_ssy ------------修改引用对象-------------- final_01 = chenssy final_02 = zj final_03 = 46 final_04 = chenssy
-
方法
-
被其标注的方法都是不能被继承,更改的
-
使用原因
-
进行方法锁定
-
防止任何类对其修改
-
父类的final方法不能被子类所重写即覆盖
-
子类不能够存在与父类一模一样的方法
public class Custom extends Person{ public void method1(){ System.out.println("Person's method1...."); } // Cannot override the final method from person:子类不能覆盖父类的final方法 // public void method2(){ // System.out.println("Person's method2..."); // } }
-
类
-
如果某个类被修饰,表明该类为最终类
-
它不希望也不允许被继承
-
在程序设计中处于安全状态
-
存在原因
-
不允许该类存在任何变化
-
也不允许它有子类
-
参数
-
被修饰的参数是不可变的
-
如果在方法中修改了这个参数,编译器回提示你
-
The final local variable i cannot be assigned. It must be blank and not using a compound assignment。
-
存在原因
-
在匿名内部类中,为了保持参数的一致性,若所在的方法的形参需要被内部类里面使用时,该形参必须为 final
public class Custom { public void test(final int i){ //i++; ---final参数不可改变 System.out.println(i); } public void test(final Person p){ //p = new Person(); --final参数不可变 p.setName("chenssy"); } }