Java程式設計師的八個最佳實踐
betterprogramming文章提出了一些專家建議,這些建議將提高Java程式碼的效率。
1.小心使用字串
如果在一個for迴圈中使用+運算子串聯了兩個字串,則每次都會建立一個新的字串物件。
這浪費了記憶體並增加了效能時間。另外,在例項化String物件時,應避免建構函式,而應直接進行例項化。這是一些程式碼:
// |
String bad = new String("Hello World"); |
//更快的例項化
String good = "Hello World!"; |
2.避免不必要的物件建立
物件建立是Java中最昂貴的操作(就記憶體利用率而言)。因此,建議僅在必要時才建立或初始化物件。以下程式碼給出了一個示例:
import java.util.ArrayList; import java.util.List; public class Books { private List books; public List getBooks() { //Initialize if required if(null == books) { books = new ArrayList(); } return books; } } |
3.返回空集合而不是空
如果程式返回的集合沒有任何值,請確保返回Empty集合而不是Null元素。它將節省大量if-else 有關Null Elements的檢查。以下程式碼將幫助您:
public List getBooks() { if (null == books) { books = new ArrayList(); } return books; } |
4.使用邏輯運算子檢查奇數
看一下下面的程式碼行,並確定它們是否可用於精確識別給定數字是否為奇數:
public boolean oddOrNot(int num) { return num % 2 == 1; } |
這些行看似正確,但從統計學上講,它們每四次就會返回不正確的結果。如果使用負的奇數,則除以2的餘數將不為1。因此,返回的結果將為false,這是不正確的!
可以將其修復如下:
public boolean oddOrNot(int num) { return (num & 1) != 0; } |
使用此程式碼,不僅可以解決負奇數的問題,而且還對程式碼進行了高度最佳化。由於邏輯運算乘法比除法快得多,因此在第二個程式碼段中可以更快地獲得結果。
5.避免記憶體洩漏
記憶體洩漏通常會導致軟體效能下降。由於Java自動管理記憶體,因此開發人員沒有太多控制權。但是,仍有一些標準做法可以用來保護您的應用程式免受記憶體洩漏的影響。
- 查詢完成後,請始終釋放資料庫連線。
- 嘗試儘可能多地使用一個Finally塊。
- 釋放儲存在靜態表中的例項。
6.必要時使用手動操作
為了提高計算能力,Java提供了兩種選擇:
1.乘法:
double square = double a * double a; // Optimized double cube = double a * double a * double a; // Non-optimized double cube = double a * double square; // Optimized double quad = double a * double a * double a * double a; // Non-optimized double quad = double square * double square; // Optimized |
2. Math.pow
pow方法用於計算不可能進行乘法的地方(基數指數)
double cube = Math.pow(base, exponent); |
Math.pow()僅在必要時使用。例如,如果指數是一個小數值。那是因為Math.pow()方法通常比乘法慢300-600倍。
7.避免對索引使用For迴圈
請不要使用帶有索引(或計數器)變數的for迴圈。通常,索引變數容易出錯,因為我們可能會在迴圈的主體中意外更改它,或者我們可能從1而不是0開始索引。
示例遍歷字串陣列:
String[] names = {"Alice", "Bob", "Carol", "David", "Eric", "Frank"}; for (int i = 0; i < names.length; i++) { doSomething(names[i]); } |
索引變數i在for迴圈中是改變的,這可能會導致意外結果。我們可以透過使用如下所示的增強for迴圈來避免潛在的問題:
for (String aName :names){ doSomething(aName); } |
這不僅消除了潛在的問題,而且使程式碼更簡潔。
8.選擇正確的時間操作
有兩種使用Java進行時間操作的標準方法:System.currentTimeMillis()和System.nanoTime()。
問題是,您應在哪種情況下選擇哪種?原則上,它們都執行相同的操作,但在以下方面有所不同:
- System.currentTimeMillis()需要大約1/1000秒到15/1000秒之間的時間(取決於系統),但是System.nanoTime()大約需要1 / 1000,000秒(1,000奈米)
- System.currentTimeMillis()花費幾個時鐘週期執行讀取操作,而System.nanoTime()花費100個以上時鐘週期。
- System.currentTimeMillis()反映了絕對時間(自1970年1月1日以來的毫秒數00:00(Epoch時間)),但System.nanoTime()不一定代表任何參考點。
相關文章
- go 程式設計師的最佳實踐Go程式設計師
- Java程式設計細節之十個最佳實踐Java程式設計
- 頂級程式設計師的10條最佳實踐程式設計師
- jQuery程式設計的最佳實踐jQuery程式設計
- 程式設計師的八個級別程式設計師
- Java 程式設計中關於異常處理的 10 個最佳實踐Java程式設計
- Java程式設計中關於異常處理的10個最佳實踐Java程式設計
- 程式設計師的八個級別薦程式設計師
- 非同步程式設計最佳實踐非同步程式設計
- C 程式設計最佳實踐(轉)程式設計
- 13 個設計 REST API 的最佳實踐RESTAPI
- 我拒絕接受的幾個最佳程式設計實踐方法程式設計
- [分享]2021 年對 React 前端程式設計師的 10 個程式碼最佳實踐建議React前端程式設計師
- PHP安全程式設計最佳實踐PHP程式設計
- C++程式設計最佳實踐(轉)C++程式設計
- 資料庫設計的十個最佳實踐資料庫
- 20個資料庫設計的最佳實踐資料庫
- 程式設計師必看的書(八)程式設計師
- 函數語言程式設計最佳實踐函數程式設計
- Laravel最佳實踐–事件驅動程式設計Laravel事件程式設計
- Laravel 最佳實踐 -- 事件驅動程式設計Laravel事件程式設計
- Laravel最佳實踐 -- 事件驅動程式設計Laravel事件程式設計
- C++非同步程式設計最佳實踐C++非同步程式設計
- Python程式設計規範+最佳實踐Python程式設計
- 設計微服務的最佳實踐微服務
- [01] C#網路程式設計的最佳實踐C#程式設計
- TypeScript 資料模型層程式設計的最佳實踐TypeScript模型程式設計
- Java併發程式設計實踐Java程式設計
- 程式設計師程式設計的10個實用技巧程式設計師
- 五個程式設計師求職者的最佳提問程式設計師求職
- 程式設計師的八種級別程式設計師
- Java 的最佳實踐Java
- 淺談Swift網路程式設計最佳實踐Swift程式設計
- 每個 Python 程式設計師都要知道的日誌實踐Python程式設計師
- 10個精妙的Java編碼最佳實踐Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 來自Google資深工程師的API設計最佳實踐Go工程師API
- 程式設計師必看的書之Java程式設計師程式設計師Java