一、接口中定義常量:
由於java interface中聲明的字段在編譯時會自動加上static final的修飾符,即聲明爲常量。
public interface Constants{ String name = "111"; } public class read{ public static void main(String[] args){ System.out.println("Class Constants's name = " + Constants.name); } }
由於引用了一個static final 的字段,編譯器已經將interface Constants中name的內容編譯進了class read中,而不是對其引用。因此只有重新編譯class read,interface Constants中name發生的變化才能在class read中反映。
二、類中定義
public class Constants{ private static final String name = "111"; public static String getName(){ return name; } } public class read{ public static void main(String[] args){ System.out.println("Class Constants's name = " + Constants.getName()); } }
class read中是對Constants class的getName()方法的引用,當常量name的值改變時我們只需對class Constants中的常量做修改並重新編譯,無需編譯class read。
我們可以使用jdk提供的反編譯工具javap反編譯read.class看個究竟,輸入:javap -c read即可查看兩種方式的不同。