在Java中,常量是能夠在final class裏的,並不單單只是存在接口中。事實上,Java常量的使用通常有三種方式:java
1.接口中定義常量segmentfault
public interface Constants { int SEX_MALE = 1; int SEX_FEMAL = 2; }
2.類中定義常量函數
public class Constants { public static final int SEX_MALE = 1; public static final int SEX_FEMAL = 2; }
3.枚舉this
public enum Constants { SEX_MALE(1, "男"),SEX_FEMALE(2, "女"); private int sex; private String field; Constants(int sex, String field){ this.sex = sex; this.field = field; }; }
這三種方式其實均可以,也能在各個項目中看到這三種方式的身影,不存在什麼必定要怎樣怎樣的說法。不過估計這回答並非你想要的。若是要深究常量到底存放在哪好的話,無論什麼類型,其建立的目的只是爲了維護常量的話,實際上是不推薦使用接口的。儘管在接口中定義常量顯得更簡潔,由於不用寫public static final了嘛,但在《Effective Java》這本書中提到過:code
若是某個實現了常量接口的類被修改再也不須要常量了,也會由於序列化兼容緣由不得不保持該實現,並且非final類實現常量接口會致使全部子類被污染
同時書中也說到,接口應當只用於定義類型,不該該只用於導出常量。繼承
那麼另外兩種方式哪一個更「好」呢?這就要看使用場景了。接口
若是是簡單的共有常量定義,則強烈推薦枚舉,好比上面代碼演示的,只是簡單的常量標識。class
若是是複雜的常量,則能夠放在常量類裏管理:構造函數
// class的類型爲final,防止該類被繼承 public final class Constants { // 私有構造函數,避免該類被實例化 private Constants() {} public static final String URL = "https://segmentfault.com/"; }