java之final的各种用法
生活随笔
收集整理的這篇文章主要介紹了
java之final的各种用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請注明出處
http://blog.csdn.net/pony_maggie/article/details/44317505
作者:小馬
final類型的成員變量
先看一段代碼,
class Value {int i = 1; }public class FinalData {final int i1 = 9;static final int VAL_TWO = 99;public static final int VAL_THREE = 39;final int i4 = (int)(Math.random()*20);static final int i5 = (int)(Math.random()*20);final int i6;Value v1 = new Value();final Value v2 = new Value();static final Value v3 = new Value();//arraysfinal int[] a = {1, 2, 3, 4, 5, 6};public FinalData(){i6 = 0;}public void print(String id){System.out.println(id + ": " + "i4 = " + i4 +", i5 = " + i5);}/*** @param args*/public static void main(String[] args) {FinalData fd1 = new FinalData();//fd1.i1++; //error: can't change valuefd1.v2.i++; //object is not constant.fd1.v1 = new Value(); // ok, not finalfor(int i = 0; i < fd1.a.length; i++){fd1.a[i]++;//object is not constant.//fd1.v2 = new Value(); // can't change reference.//fd1.v3 = new Value(); // can't change reference.//fd1.a = new int[3];fd1.print("fd1");System.out.println("creating new finalData");FinalData fd2 = new FinalData();fd1.print("fd1");fd2.print("fd2");}}}
輸出結果:
fd1: i4 = 0, i5 = 11 creating new finalData fd1: i4 = 0, i5 = 11 fd2: i4 = 18, i5 = 11 fd1: i4 = 0, i5 = 11 creating new finalData fd1: i4 = 0, i5 = 11 fd2: i4 = 9, i5 = 11 fd1: i4 = 0, i5 = 11 creating new finalData fd1: i4 = 0, i5 = 11 fd2: i4 = 10, i5 = 11 fd1: i4 = 0, i5 = 11 creating new finalData fd1: i4 = 0, i5 = 11 fd2: i4 = 7, i5 = 11 fd1: i4 = 0, i5 = 11 creating new finalData fd1: i4 = 0, i5 = 11 fd2: i4 = 1, i5 = 11 fd1: i4 = 0, i5 = 11 creating new finalData fd1: i4 = 0, i5 = 11 fd2: i4 = 4, i5 = 11
i1 是final,編譯時就確定,所以不能更改。VAL_TWO和VAL_THREE是同樣的道理,除此之外它還是static,意味著它是屬于類本身,還不是實例。
i4和i5表明,final類型的變量值不一定要在編譯時確定,運行時賦值也是OK的。 它倆的區別還在于,i4的值每次運行都不同(因為是隨機數),而i5則是一樣的(都是第一次獲取到的隨機數),這是static在起作用,它讓i5只被賦值一次。
另外,關于i5,還有一點值得關注,就是fd2中的i5和fd1一樣,這是因為 只初始化一次的機制是針對整個程序加載而言,而不是實例的創建。i6表明final變量在定義時可以不用馬上初始化,但是使用前一定要,所以編譯器會提示你在構造函數里初始化,否則會報錯。
v1 是普通的類引用變量,可以隨意更改。v2和v3因為用了final修飾,它們的引用不能更改。
fd1.v2.i++ 這一行表明,對于v2只是引用不能更改,但是它的值還是可以改的,也就是說,reference是常量,object不是。同樣的原量也適用于數組a,畢竟數組在java里也是引用。
未完待續。
總結
以上是生活随笔為你收集整理的java之final的各种用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HIbernate二级缓存的缓存策略
- 下一篇: hibernate二级缓存作用、配置