Java新手問題集錦
Java是目前最流行的編程語言之一——它可以用來編寫Windows程序或者是Web應用,移動應用,網絡程序,消費電子產品,機頂盒設備,它無處不在。以下是本站小編收集整理的Java新手問題,希望對您有所幫助!
優先返回空集合而非
如果程序要返回一個不包含任何值的集合,確保返回的是空集合而不是。這能節省大量的'if else'檢查。
public class getLocationName {
return (==cityName ? '': cityName);
}
謹慎操作字符串
如果兩個字符串在for循環中使用 操作符進行拼接,那麼每次循環都會產生一個新的字符串對象。這不僅浪費內存空間同時還會影響性能。類似的,如果初始化字符串對象,儘量不要使用構造方法,而應該直接初始化。比方說:
避免無用對象
創建對象是Java中最昂貴的操作之一。因此最好在有需要的時候再進行對象的創建/初始化。如下:
數組與ArrayList之爭
開發人員經常會發現很難在數組和ArrayList間做選擇。它們二者互有優劣。如何選擇應該視情況而定。
數組是定長的,而ArrayList是變長的。由於數組長度是固定的,因此在聲明數組時就已經分配好內存了。而數組的操作則會更快一些。另一方面,如果我們不知道數據的大小,那麼過多的數據便會導致ArrayOutOfBoundException,而少了又會浪費存儲空間。
ArrayList在增刪元素方面要比數組簡單。
數組可以是多維的,但ArrayList只能是一維的。
try塊的finally塊沒有被執行
看下下面這段代碼:
從代碼來看,貌似finally塊中的println語句應該會被執行5次。但當程序運行後,你會發現finally塊只執行了4次。第5次迭代的時候會觸發exit函數的調用,於是這第5次的finally便永遠也觸發不到了。原因便是——會掛起所有線程的執行,包括當前線程。即便是try語句後的finally塊,只要是執行了exit,便也無力迴天了。
在調用時,JVM會在關閉前執行兩個結束任務:
首先,它會執行完所有通過hutdownHook註冊進來的終止的鉤子程序。這一點很關鍵,因爲它會釋放JVM外部的資源。
接下來的便是Finalizer了。可能是inalizersOnExit也可能是inalizersOnExit。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程序是CPU密集型的,但它們會需要大量的內存。這類程序通常運行得很緩慢,因爲它們對內存的需求很大。爲了能提升這類應用的性能,可得給它們多留點內存。因此,假設我們有一臺擁有10G內存的Tomcat服務器。在這臺機器上,我們可以用如下的這條命令來分配內存:
export JAVA_OPTS='$JAVA_OPTS -Xms5000m -Xmx6000m -XX:PermSize=1024m -XX:MaxPermSize=2048m'
Xms = 最小內存分配
Xmx = 最大內存分配
XX:PermSize = JVM啓動時的初始大小
XX:MaxPermSize = JVM啓動後可分配的`最大空間
如何計算Java中操作的耗時
在Java中進行操作計時有兩個標準的方法
entTimeMillis和Time。問題就在於,什麼情況下該用哪個。從本質上來講,他們的作用都是一樣的,但有以下幾點不同:
entTimeMillis的精度在千分之一秒到千分之15秒之間(取決於系統)而Time則能到納秒級。
entTimeMillis讀操作耗時在數個CPU時鐘左右。而Time則需要上百個。
entTimeMillis對應的是絕對時間(1970年1 月1日所經歷的毫秒數),而Time則不與任何時間點相關。
Float還是double
在對精度要求高的場景下,double類型相對float要更流行一些,理由如下:
大多數處理器在處理float和double上所需的時間都是差不多的。而計算時間一樣的前提下,double類型卻能提供更高的精度。
冪運算
Java是通過異或操作來進行冪運算的。Java對於冪運算有兩種處理方式:
乘積:
pow方法:在無法使用乘積的情況下可以使用pow方法。
double cube = (base, exponent);
不到萬不得已不要使用。比方說,當指數是小數的時候。因爲要比乘積慢300-600倍左右。
如何處理空指針異常
空指針異常是Java中很常見的異常。當你嘗試調用一個對象上的方法時便會拋出這個異常。比如:
int noOfStudents = t;
在上述例子中,school爲空或者listStudents爲空都可能會拋出了PointerException。因此最好檢查下對象是否爲空以避免類似情況。
JSON編碼
JSON是數據存儲及傳輸的一種協議。與XML相比,它更易於使用。由於它非常輕量級以及自身的一些特性,現在JSON在網絡上已經是越來越流行了。常見的數據結構都可以編碼成JSON然後在各個網頁間自由地傳輸。不過在開始編碼前,你得先安裝一個JSON解析器。在下面的例子中,我們將使用le庫來完成這項工作 ()。
下面是編碼成JSON串的一個簡單的例子。
輸出:
{'Novel Name':'Godaan','Novel Details':['Language: Hindi','Year of Publication: 1936','Publisher: Lokmanya Press'],'Author':'Munshi Premchand'}
JSON解析
開發人員要想解析JSON串,首先你得知道它的格式。下面例子有助於你來理解這一點:
相關文章
-
Java認證基礎知識:java字符串轉化整型問題
java 字符串轉化整型問題public class StringParesInteger {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubtln(_VALUE);tln(_VALUE/10);tln(pareseInt("="));}/** -
經典Java面試題之Java中Char類型的運算
char在java中稱爲字符型,佔2個字節。本文是本站小編搜索整理的關於經典Java面試題之Java中Char類型的運算,有需要的小夥伴可以參考一下,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網! [面試 -
Java常見問題集錦
Java具有簡單性、面向對象、分佈式、健壯性、安全性、平臺 獨立與可移植性、多線程、動態性等特點。那麼Java有哪些常見問題呢?下面就來和小編一起看看Java常見問題集錦吧。 問: 如何設置Java 2(JDK1.2)的環境變量? -
Java認證考試知識點:JavaSE6的新功能
Java SE 6的十大新功能及你應該升級到Java SE 6上的十大原因。這十大看點以次是: 1新的安全功能:Java 6對於安全的新支持主要有:JSR 105: XML DSIG API/implementation、本地平臺GSS/Kerberos的集成、JSR 268: Smart Ca -
Java面試題Java寫一個折半查找
引導語:折半查找是指如果不是從一組隨機的序列裏查找,而是從一組排好序的序列裏找出某個元素的位置,則可以有更快的算法。以下是本站小編分享給大家的用Java面試題Java寫一個折半查找,歡迎閱讀參考!用Java寫一個折半查 -
Java類庫及其組織結構(Java API)
Java語言是一種適用於網絡編程的語言,它的基本結構與C++極爲相似,但卻簡單得多。下面小編給大家分享Java類庫及其組織結構(Java API),歡迎大家閱讀!更多相關信息請關注相關欄目!Java 官方爲開發者提供了很多功能強大的類,這 -
JAVA認證開源技術:關於Java的對象equals方法
在學習JAVA認證過程中,每個人會遇到每個人不同的問題,或小或大,下面yjbys小編爲大家分享的是關於Java的對象equals方法,希望對大家學習JAVA有幫助!不是所有的equals都是比較整個對象的。 #1.普通Object類:先看源碼:publi -
2017最新javascript中AJAX用法
這是一款很有學生範兒的甜美直髮髮型,時尚靚麗的棕黃色染髮襯出白皙的皮膚,大氣的中分劉海不僅修顏減齡,而且很有時尚氣息哦。很是甜美可愛的一款中分長直髮髮型,柔順的秀髮在陽光下更加的迷人,清爽的露額設計搭配清新的黑 -
JavaScript與java語言有何不同
java和JavaScript是兩個不同的語言。那麼這兩個語言有什麼不同呢?下面本站小編帶大家一起來看看詳細內容,感興趣的小夥伴們可以參考一下!想了解更多相關信息請持續關注我們應屆畢業生考試網! 1 語言特點: 1.1 弱 -
JavaScript與java語言有何區別
java和JavaScript是兩個不同的語言。那麼這兩個語言有什麼不同呢?本文是本站小編搜索整理的關於C語言最實用的'文件操作函數大全,有需要的朋友可以參考一下,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢