Java中的魔法值介紹及解決辦法

2021-08-28 16:00:19 字數 850 閱讀 7624

所謂魔法值,是指在**中直接出現的數值,只有在這個數值記述的那部分**中才能明確了解其含義。

int  array = new int[20];

for (int i = 0; i < 20; i++)

上述例子中,如果陣列的宣告與for迴圈相隔比較遠,就很難知道 for迴圈裡面的控制條件 i < 20 中 20 具體含義是什麼。它是陣列的長度呢,還是根據需求定義的界限值呢?就搞不清楚。

魔法數值使**的可讀性大大下降。而且,如果同樣的數值多次出現時,到底這些數值是不是帶有同樣的含義呢,誰也說不清楚。另一方面,如果本來應該使用相同數值的地方,一旦用錯了,也很難發現。因此,我們應極力避免使用魔法數值。

解決辦法:使用static final 定義常量或使用enum值

static final int length_of_array= 20;

int array = new int[length_of_array];

for (int i = 0; i < length_of_array; i++)

上述**就使用static final 定義常量 length_of_array= 20; 直接看for迴圈裡面的控制條件 i < length_of_array; 可以完全理解length_of_array代表什麼意思(當然,變數的命名也要清楚,符合規範,不然別人還是看不懂)。這裡還涉及到乙個問題,為什麼 i = 0 語句中可以直接使用常量 0,這是因為 0 作為陣列最小下標是大家的共識,這樣寫大家都可以理解,就沒有必要再去宣告它。

注:使用static final 宣告常量,可以方便以後維護更新。修改變數的值時只用修改一處,還不用擔心修改了其他不該修改的常量。

java 中死鎖的介紹

接觸過死鎖,但很少有印象,從網上找到了方法,進行簡單總結 1,這是死鎖的方式,得到的結果 addition thread 13 subtraction thread 7 holding first lock holding second lock addition thread waiting fo...

關於java中的值傳遞

值傳遞 本質是賦值,是把實際引數賦值給形式引數的過程。傳值 基本資料型別和string以及string的包裝型別,是值 value 傳遞。形參改變,實參不改變。傳址 int a 3 int b b a 傳值 賦值 b 5 system.out.println a string a abc strin...

關於redis快取雪崩,穿透,擊穿的介紹及解決方案

場景 同一時間大面積的redis key失效,導致所有的請求打到資料庫上 解決辦法 原理 不要讓redis key同時失效 場景 在大量請求下,某熱點key突然失效,導致所有請求都打到資料庫上 解決辦法 場景 惡意攻擊者專門訪問資料庫中不存在的資料,導致穿過redis直接打到資料庫上 如 id 1的...