java的final变量浅析
2017-09-21 16:26
141 查看
final关键字可修饰类、方法、变量(包括成员变量和局部变量)。
1、修饰类
final修饰类,说明被修饰的类不可以被继承,同样final修饰的类里面的成员方法均为final方法。值得注意一下,String类就是一个final类。
2、修饰方法
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();
}
}
执行结果:
从结果可以印证final修饰变量。
1、修饰类
final修饰类,说明被修饰的类不可以被继承,同样final修饰的类里面的成员方法均为final方法。值得注意一下,String类就是一个final类。
2、修饰方法
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修饰变量。
相关文章推荐
- 深入java static关键字 浅析java类加载机制(解答java静态方法或变量无法访问非静态数据)
- 深入理解 Java final 变量的内存模型
- java学习记录(四):关于匿名内部类和局部内部类只能访问final变量的问题
- Java中用final修饰的变量
- 浅析Java中的final关键字
- 浅析Java中的final关键字
- 浅析Java中的final关键字
- 浅析Java中的final关键字
- 浅析Java中的final关键字
- [JAVA小记]final修饰的变量是否能够通过反射更改
- Java接口中的成员变量为什么必须是public static final?
- 注意java8中已经没有匿名内部类和局部内部类只能访问final变量的限制了!
- Java final变量和普通变量的区别
- Java的局部内部类以及final类型的参数和变量
- JAVA匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
- Java中非final的static变量的命名
- 浅析Java中的final关键字
- (java) final关键字- 修饰变量时
- Java面向对象-final类和final方法、final变量(常量)
- 浅析Java中的final关键字