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 */
本文来自博客园,作者:{zhongweiLeex},转载请注明原文链接:{https://www.cnblogs.com/lzw6/}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?