我在项目中看到一个类里定义的变量都是public static final的,问了一下同事说是常量类,为什么要这么定义呢?是因为static是全局的,final是不可修改的吗?那这和定义一个private变量再定义一个get方法有什么区别?
认证0级讲师
static是為了讓其成為類別的成員,而不是物件的成員,這樣用起來就方便了
public是為了方便訪問
final則是表示這是常數,不能修改
private的對象,然後定義get、set是為了存取控制,是一種常規的封裝
綜上,public static final可以讓訪問變得很方便,而且不會被修改。一般可以放配置訊息,還有一些狀態碼的定義。
public static final
static修飾的物件是放在引用的根下的,意味著幾乎不會被回收
static 是靜態的這樣被static修飾過得變量,可以直接用過類名.變量名的方式調用, 而不需要通過類的實例化對象引用final 修飾變量多用於聲明一個常量在變量被第一次賦值了之後,這個變數就相當於一個常數或是可以理解成這個變數的值固定了,值無法被修改
全域常數。例如專案全域配置,就可以用public static final修飾
定義了private,其他類別下面就無法存取。那這樣的常數定義又有什麼意義呢。
靜態常數 舉個栗子
public class Constant { public static final int DEAFULT_TAG = 0xcc33; public static final int DEFAULT_VERSION = 1; public static final Long PHOTO_PRICE = 1L; public static final String OSS_STYLE = "?x-oss-process=style/photo_printer"; }
上邊的 Constant做為一個常數類,我在其餘各種地方需要調用常數的時候
Constant
直接使用 Constant.OSS_STYLE 就好了
Constant.OSS_STYLE
說白了就是為了方便訪問,增加代碼閱讀性,性能上倒是沒有太大的差異.
先回答問題
static是為了讓其成為類別的成員,而不是物件的成員,這樣用起來就方便了
public是為了方便訪問
final則是表示這是常數,不能修改
private的對象,然後定義get、set是為了存取控制,是一種常規的封裝
綜上,
public static final
可以讓訪問變得很方便,而且不會被修改。一般可以放配置訊息,還有一些狀態碼的定義。其他的補充:
static修飾的物件是放在引用的根下的,意味著幾乎不會被回收
static 是靜態的這樣被static修飾過得變量,可以直接用過類名.變量名的方式調用, 而不需要通過類的實例化對象引用
final 修飾變量多用於聲明一個常量在變量被第一次賦值了之後,這個變數就相當於一個常數或是可以理解成這個變數的值固定了,值無法被修改
全域常數。例如專案全域配置,就可以用public static final修飾
定義了private,其他類別下面就無法存取。那這樣的常數定義又有什麼意義呢。
靜態常數 舉個栗子
上邊的
Constant
做為一個常數類,我在其餘各種地方需要調用常數的時候直接使用
Constant.OSS_STYLE
就好了說白了就是為了方便訪問,增加代碼閱讀性,性能上倒是沒有太大的差異.