final
一:空白final
理解:在类里面进行final值的初始化不赋值,在类的构造方法中赋值。
优点:可以根据对象不同,值不同,但是又保证对象恒定不变的特效。
代码:
1 public class ewq2 { 2 3 final private int a; 4 5 public ewq2(int x) { 6 a = x; 7 // a++; 错误 a并不能改变 8 9 } 10 11 public int toInteger() { 12 13 return a; 14 15 } 16 17 public static void main(String[] args) { 18 19 ewq2 w = new ewq2(3); 20 21 System.out.println("number-->" + w.toInteger()); 22 23 System.out.println("\n---------"); 24 ewq2 w2 = new ewq2(10); 25 26 System.out.println("number-->" + w2.toInteger()); 27 28 } 29 30 }
二:使用final指定参数
理解:
①基本类型:不能被修改,不能被重新赋值
②引用类型:引用的对象不能改变,对象可以改变
特性:你可以读参数,但是无法修改参数
代码:
1 class BB 2 { 3 public int i; 4 } 5 class PP 6 { 7 public static void f(final BB ref) // ref不能修改(程序传递的是引用,也就是地址,所以你的地址不能修改) 8 { 9 ref.i = 55; 10 } 11 public static void main(String args[]) 12 { 13 BB x = new BB(); 14 f(x); 15 System.out.println(x.i); // i可以修改 16 } 17 }
三:使用final修饰方法
理解:当该方法不想被覆盖或者重写时,使用
优点:把方法锁定,以防任何继承类修改他的含义
代码:
1 public class A { 2 3 // final方法f 4 5 public final void f() { 6 7 System.out.println("类A中的final方法f被调用了"); 8 9 } 10 11 } 12 13 public class B extends A { 14 15 // 编译错误!父类的f方法是final类型,不可重写! 16 17 //! public void f() { 18 19 //! System.out.println("类B中的方法f被调用了"); 20 21 //! } 22 23 }
三:使用final修饰类
理解:不希望某个类有子类
注意点:final类的方法默认是final的不能继承