java 編譯期常量


  今天在看書的時候遇到了一個不是很懂的名詞,是在think in java 這本書的第七章講final關鍵字時講到的。然后自己在網上查了一下知道了一些。

  編譯器常量就是:它的值在編譯期就可以確定的常量。也就是說在編譯的時候就已經為用到這些常量的地方賦好值了。下邊這段程序可以很好地幫助我們找出哪些是編譯期常量哪些不是。

package com.wenge.compileTest;

public class CompileTest{
    public static void main(String args[]){
//        System.out.println(Data.i1);
//        System.out.println(Data.i2);//initialization!
//        System.out.println(Data.b1);//initialization!
//        System.out.println(Data.b2);
//        System.out.println(Data.s1);
//        System.out.println(Data.s2);//initialization!
//        System.out.println(Data.a); //initialization! 
//        System.out.println(Data.e); //initialization!
        
    }
}
class Data{
  static{
      System.out.println("initialization!");
  }
  public static final int i1 = 0;
  public static final Integer i2 = 0;
  public static final Boolean b1 = true;
  public static final boolean b2 = true;
  public static final String s1 = "0";
  public static final String s2 = new String("0");
  public static final A a = new A();
  public static final Enum e = E.A;
}
class A{
 
}
enum E {
    A,B,C,D,E,F,G;
}

  我們在main方法中一次只輸出一個數據,其余的注釋掉,然后我們可以通過看控制台有沒有輸出"initialization!"而判斷輸出的常量的類型是不是編譯期常量。因為"initialization!"是寫在靜態代碼塊里的,所以如果只要CompileTest類的main方法用到Data類里的屬性Data類里的靜態代碼塊就會被執行從而輸出"initialization!"。
然后單獨運行時是否輸出"initialization!"已經在后邊注釋了。(有注釋的就說明輸出了)所以很容易可以從輸出結果中得到結論:java中的編譯期常量包括java八大基本類型和直接聲明的string類型。什么是直接聲明的string類型呢?就是沒有通過new關鍵字聲明的字符串(String str = "abc";)。

  當然了常量的前提是有final關鍵字修飾。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM