标签:margin 模块 代码量 -- 返回值 bsp 嵌入 ++ 完全
1、涵义
最一般的意思就是声明 “这个东西不能改变”。之所以要禁止改变,可能是考虑到两方面的因素:设计或效率。 final 关键字可以用来修饰变量、方法和类,修饰变量表示变量不能被修改,修饰方法表示方法不能被重写,修饰类表示类不能被继承。
2、修饰变量
对于基本数据类型, final 会将值变成一个常数;但对于对象引用, final 会将引用变成一个常数。进行声明时,必须将引用初始化到一个具体的对象。而且永远不能将引用变成指向另一个对象。来个Demo 如下:
public class Value { int i=1; }
public class FinalData { final int i1 = 9; static final int I2 = 99; public static final int I3 = 39; final int i4 = (int)(Math.random()*20);//特别注意 static final int i5 = (int)(Math.random()*20);//特别注意 Value v1 = new Value(); final Value v2 = new Value(); static final Value v3 = new Value(); final int[] a = { 1, 2, 3, 4, 5, 6 }; public void print(String id) { System.out.println(id + ": " + "i4 = " + i4 + ", i5 = " + i5); } public static void main(String[] args) { FinalData fd1 = new FinalData(); //! fd1.i1++; // Error:final的值不能被改变 fd1.v2.i++; // 对象的成员未被设成final,不会报错 fd1.v1 = new Value(); // OK --不是final对象 for(int i = 0; i < fd1.a.length; i++) fd1.a[i]++; // 对象的成员未被设成final,不会报错 // fd1.v2 = new Value(); // Error: Can‘t // fd1.v3 = new Value(); // 不能将一个final引用指向另一个 // fd1.a = new int[3]; fd1.print("fd1"); System.out.println("Creating new FinalData"); FinalData fd2 = new FinalData(); fd1.print("fd1"); fd2.print("fd2"); } }
不能由于某样东西的属性是 final,就认定它的值能在编译时期知道。 i4 和 i5 向大家证明了这一点。它们在运行期间使用随机生成的数字。例子的这一部分也向大家揭示出将final 值设为 static 和非 static 之间的差异 。记住一点:static局部变量在所处模块在初次运行时进行初始化工作,且只操作一次。
标签:margin 模块 代码量 -- 返回值 bsp 嵌入 ++ 完全
原文地址:http://www.cnblogs.com/jmcui/p/7299632.html