當前位置:
首頁 > 知識 > Java新手問題集錦一

Java新手問題集錦一

Java是目前最流行的編程語言之一——它可以用來編寫Windows程序或者是Web應用,移動應用,網路程序,消費電子產品,機頂盒設備,它無處不在。

有超過30億的設備是運行在Java之上的。根據Oracle的統計數據,光是使用中的Java Card就有有50億。

超過900萬程序員選擇使用Java進行開發,它是最受開發人員歡迎的語言,同時也是最流行的開發平台。

本文為那些准Java程序員們準備了一系列廣為流傳的Java最佳編程實踐:

優先返回空集合而非null

如果程序要返回一個不包含任何值的集合,確保返回的是空集合而不是null。這能節省大量的"if else"檢查。

public class getLocationName {

return (null==cityName ? "": cityName);

}

謹慎操作字元串

如果兩個字元串在for循環中使用+操作符進行拼接,那麼每次循環都會產生一個新的字元串對象。這不僅浪費內存空間同時還會影響性能。類似的,如果初始化字元串對象,盡量不要使用構造方法,而應該直接初始化。比方說:

避免無用對象

創建對象是Java中最昂貴的操作之一。因此最好在有需要的時候再進行對象的創建/初始化。如下:

數組與ArrayList之爭

開發人員經常會發現很難在數組和ArrayList間做選擇。它們二者互有優劣。如何選擇應該視情況而定。

數組是定長的,而ArrayList是變長的。由於數組長度是固定的,因此在聲明數組時就已經分配好內存了。而數組的操作則會更快一些。另一方面,如果我們不知道數據的大小,那麼過多的數據便會導致ArrayOutOfBoundException,而少了又會浪費存儲空間。

ArrayList在增刪元素方面要比數組簡單。

數組可以是多維的,但ArrayList只能是一維的。

try塊的finally塊沒有被執行

看下下面這段代碼:

從代碼來看,貌似finally塊中的println語句應該會被執行5次。但當程序運行後,你會發現finally塊只執行了4次。第5次迭代的時候會觸發exit函數的調用,於是這第5次的finally便永遠也觸發不到了。原因便是——System.exit會掛起所有線程的執行,包括當前線程。即便是try語句後的finally塊,只要是執行了exit,便也無力回天了。

在調用System.exit時,JVM會在關閉前執行兩個結束任務:

首先,它會執行完所有通過Runtime.addShutdownHook註冊進來的終止的鉤子程序。這一點很關鍵,因為它會釋放JVM外部的資源。

接下來的便是Finalizer了。可能是System.runFinalizersOnExit也可能是Runtime.runFinalizersOnExit。finalizer的使用已經被廢棄有很長一段時間了。finalizer可以在存活對象上進行調用,即便是這些對象仍在被其它線程所使用。而這會導致不可預期的結果甚至是死鎖。

判斷奇數

看下這幾行代碼,看看它們是否能用來準確地判斷一個數是奇數?

public boolean oddOrNot(int num) {

return num % 2 == 1;

看似是對的,但是每執行四便會有一個錯誤的結果(用數據說話)。考慮到負奇數的情況,它除以2的結果就不會是1。因此,返回值是false,而這樣是不對的。

代碼可以修改成這樣:

public boolean oddOrNot(int num) {

return (num & 1) != 0;

}

這麼寫不光是負奇數的問題解決了,並且還是經過充分優化過的。因為算術運算和邏輯運行要比乘除運算更高效,計算的結果也會更快。

單引號與雙引號的區別

看起來這段代碼會返回"Haha",但實際返回的是Ha169。原因就是用了雙引號的時候,字元會被當作字元串處理,而如果是單引號的話,字元值會通過一個叫做基礎類型拓寬的操作來轉換成整型值。然後再將值相加得到169。

一些防止內存泄露的小技巧

內存泄露會導致軟體的性能降級。由於Java是自動管理內存的,因此開發人員並沒有太多辦法介入。不過還是有一些方法能夠用來防止內存泄露的。

查詢完數據後立即釋放資料庫連接

儘可能使用finally塊

釋放靜態變數中的實例

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java吧 的精彩文章:

Java,大數據技術領域的一匹黑馬
Java初學者最全的基礎問題及答案匯總
論新手該如何學習java?
幾分鐘讓你了解 WEB、UI、JAVA!

TAG:java吧 |

您可能感興趣

三星Galaxy Watch智能手錶傳言集錦:或與Note 9手機同步發布
Louis Vuitton櫥窗陳列集錦
cosplay集錦,你喜歡哪一個?
Django後台代碼質量改善建議集錦(一)
圖片集錦-Poulsbo
Android中menu的使用集錦
視頻/motpgp精彩集錦,一起來欣賞吧!
cosplay美圖集錦,最喜歡第四張
記錄她們的美麗瞬間 C94精彩Cosplay視頻集錦
群星聯賽S7總決賽高光集錦 NiP vs Spirit
Mac OS 蘋果電腦 蘋果筆記本 MacBook Pro 使用技巧集錦
Python小貼士集錦
三星Galaxy Note 9傳言集錦:屏下指紋還是個謎
FAIR最新視覺論文集錦:FPN,RetinaNet,Mask 和 Mask-X RCNN(含代碼實現)
FAIR最新視覺論文集錦:FPN,RetinaNet,Mask和Mask-X RCNN
Sheriff SWAT圖片集錦1
【代碼集合】深度強化學習Pytorch實現集錦
C94上cosplay集錦第三彈
2017慈緣雅集之問禪集錦Some questions about Zen of CiYuan 2017
大數據分析工程師面試集錦 3-SQL/SparkSql/HiveQL