final关键字可修饰类、方法、变量(包括成员变量和局部变量)。
1、修饰类
执行结果:
1、修饰类
final修饰类,说明被修饰的类不可以被继承,同样final修饰的类里面的成员方法均为final方法。值得注意一下,String类就是一个final类。
final修饰方法,说明被修饰的方法不可以重载,防止被继承的类修改该方法。
注:private方法会隐式的指向final方法。
3、修饰变量final修饰变量,所修饰的变量分为java8种基本类型和引用型变量。修饰基本变量,则变量的值不可改变,修饰引用型变量,则变量的引用地址不变,但是引用的地址所存储的值是可以改变的。
4、测试final修饰变量
/**
* 测试类
*
*/
public class FinalTest {
public final int a=0;//基本类型初始值
public final String b = "b";//String类型初始值
public static void main(String[] args) {
FinalTest test =new FinalTest();
FinalTest3 finalTest3 = new FinalTest3();//引用型变量
finalTest3.setA(test.a);
finalTest3.setB(test.b);
System.out.println("最初值:");
System.out.print(test.a+" "+test.b+" "+finalTest3.getA()+" "+finalTest3.getB());
System.out.println();
FinalTest2 finalTest2 = new FinalTest2();
finalTest2.changeFinal(test.a);//修改基本类型变量
finalTest2.changeFinal(test.b);//修改String类型变量
finalTest2.changeFinal(finalTest3);//修改引用型变量
System.out.println("更改后值:");
System.out.print(test.a+" "+test.b+" "+finalTest3.getA()+" "+finalTest3.getB());
System.out.println();
}
}
/**
* 更改变量类
*
*/
public class FinalTest2 {
public void changeFinal(int a){
a = a+1;
}
public void changeFinal(String a){
a = a+"1";
}
public void changeFinal(FinalTest3 a){
a.setB("change");
a.setA(12345);
}
}
/**
* 引用型变量的类
*
*/
public class FinalTest3 {
public int a;
public String b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
执行结果:
从结果可以印证final修饰变量。