final关键字

1.final修饰类

不能被继承 : String System StringBuffer

2. final 修饰方法

不可以被重写: Object 的 getClass()

3. final 修饰变量

常量,无法被改变 必须要在对象创建之前 或者 对象创建时候 赋值

  • final 修饰属性:可以考虑的赋值位置

    • 显式初始化

    • 代码块中初始化

    • 构造器中初始化

 

复制代码
 1 import java.util.Random;
 2 
 3 class Value{
 4     int i;
 5     public Value(int i){
 6         this.i = i;
 7     }
 8 }
 9 public class FinalData {
10     private static Random rand = new Random(47);
11     private String id;
12     public FinalData(String id){
13         this.id = id;
14     }
15     private final int valueOne = 9;//编译期就初始化了 编译器常量
16     //?
17     private static final int VALUE_TWO = 99;//static final
18     public static final int VALUE_THREE = 39;
19 
20     private final int i4 = rand.nextInt(20);// 第一次赋值的时候就已经 给常量赋值  一旦赋值 他们的值不能被改变 永远都是这样的
21     static final int INT_5 = rand.nextInt(20);//static  注意 是在类加载的时候 就被初始化 无论创建多少对象都无法被改变
22 
23     private Value v1 = new Value(11);
24     private final Value v2 = new Value(22);
25     private static final Value VAL_3 = new Value(33);
26 
27     private final int[] a = {1,2,3,4,5,6};
28     public String toString(){
29         return id + ":" +  "i4 = " + i4 + ", INT_5 = " + INT_5;
30     }
31 
32     public static void main(String[] args) {
33         FinalData fd1 = new FinalData("fd1");
34 //        fd1.valueOne++; //报错    final数据 不能被改变
35         fd1.v2.i++;//v2 中的 属性i值内容被改变了 是可以的  不是修改的 final Value 这个常量对象 所以可以
36         fd1.v1 = new Value(9);//v1 不是final  可以被改变
37 //        fd1.v2 = new Value(1);//报错 final对象 不能被改变
38 
39 
40         for (int i = 0; i < fd1.a.length; i++) { fd1.a[i]++; }//没有报错  修改的是 final数组对象的内部值
41 //        fd1.a = new int[3];//报错 修改了 final 数组对象
42 
43         System.out.println(fd1);//对象
44 
45         //创建的新的对象
46         FinalData fd2 = new FinalData("fd2");
47 
48 
49         System.out.println(fd1);
50         System.out.println("new Object");
51         System.out.println(fd2);
52     }
53 }
54 /*
55 fd1:i4 = 15, INT_5 = 18
56 fd1:i4 = 15, INT_5 = 18
57 new Object
58 fd2:i4 = 13, INT_5 = 18
59 */
复制代码

 

posted @   zhongweiLeex  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示