java面試題之二 (轉)

6、String s = new String("xyz");建立了幾個String Object? 兩者之間有什麼區別? spa

嚴格的說應該是一個或者兩個。 線程

由於若是常量池以前沒有"xyz"這個對象,那麼它首先會在常量池裏面建立一個"xyz"對象。若是以前常量池就已經有一個"xyz"對象了,那麼就不會在常量池裏面再建立了,由於常量池裏面的對象不會重複。 code

而每new String一次,就會在內存中建立一個對象。它是以常量池裏面的對象爲模板建立的。 對象

7、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後? 進程

1.finally {}必定會執行,只有一種狀況下不會執行,即調用了system.exit(),終止了虛擬機進程。 內存

2. finally始終是在跳出方法以前被執行,經常使用來作一些資源清理工做,因此在return(跳出方法)前執行。 資源

3.比較複雜點的狀況是,若是return 後面有一個表達式,那麼會先執行表達式的內容,但並不會立刻跳出方法,而是執行finally塊,若finally也有return語句,整個方法會從finally的return跳出,若finally中沒有return,則會再從try{}中的return跳出。 同步

8、Integer與int的區別 虛擬機

1.int是基本數據類型,直接存數值;Integer是int的包裝類。int和Integer均可以表示某一個數值。 it

2. Integer裏面定義了一些靜態轉換方法,用於實現基本數據類型和String之間的轉換。

3. int的默認值爲0,而Integer的默認值爲null,因此Integer能夠區分出未賦值和值爲0的狀況,而int則沒辦法區分這種狀況。

4. int是基本類型,Integer是引用類型,聲明爲int的變量不須要實例化,聲明爲Interger的變量須要實例化

5.Integer是比int更高級的數據類型,int通常只用在數值計算中,而Integer用在須要使用對象的地方,好比Map、Set和List集合裏面存放的都是Object,須要使用包裝類。

9、sleep()和wait()有什麼區別?

1. sleep是Thread類的方法;wait是Object的方法。

2.調用sleep不會釋放對象鎖;調用wait會釋放對象鎖,使得其餘線程可使用同步塊或者同步方法。

3.sleep會致使線程暫停指定時間,時間一到會自動恢復。而wait須要調用notify或者notifyAll喚醒。

4.做用範圍不同。wait,notify和notifyAll只能在同步控制方法或者同步控制塊裏面使用,而sleep能夠在任何地方使用。

5. sleep必須捕獲異常,而wait,notify和notifyAll不須要捕獲異常。

10、啓動一個線程是用run()仍是start()?

啓動一個線程是調用start()方法,線程進入就緒狀態,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。當cpu分配給它時間時,纔開始執行run()方法。

若直接調用run()方法,只是把該方法執行了一遍,並無真正啓動一個線程

相關文章
相關標籤/搜索