贏在面試之Java基礎篇(4)

3一、String s = new String("xyz");建立了幾個StringObject?是否能夠繼承String類?java

        兩個或一個都有可能,」xyz」對應一個對象,這個對象放在字符串常量緩衝區,常量」xyz」無論出現多少遍,都是緩衝區中的那一個。NewString每寫一遍,就建立一個新的對                象,它使用常量」xyz」對象的內容來建立出一個新String對象。若是之前就用過’xyz’,那麼這裏就不會建立」xyz」了,直接從緩衝區拿,這時建立了一個StringObject;但若是之前沒          有用過"xyz",那麼此時就會建立一個對象並放入緩衝區,這種狀況它建立兩個對象。至於String類是否繼承,答案是否認的,由於String默認final修飾,是不可繼承的。程序員

3二、String和StringBuffer的區別數組

       JAVA平臺提供了兩個類:String和StringBuffer,它們能夠儲存和操做字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提         供的字符串能夠進行修改。當你知道字符數據要改變的時候你就可使用StringBuffer。網絡

3三、下面這條語句一共建立了多少個對象:String s="a"+"b"+"c"+"d";       函數

         javac 編譯能夠對字符串常量直接相加的表達式進行優化, 沒必要要等到運行期去進行加法運算處理, 而是在編譯時去掉其中的加號, 直接將其編譯成一個這些常量相連的結               果。優化

         題目中的第一行代碼被編譯器在編譯時優化後, 至關於直接定義了一個」abcd」的字符串,因此, 上面的代碼應該只建立了一個 String 對象spa

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

       咱們知道finally{}中的語句是必定會執行的,那麼這個可能正常脫口而出就是return以前,return以後可能就出了這個方法了,鬼知道跑哪裏去了,但更準確的應該是在return中間         執行指針

3五、final, finally, finalize的區別。code

        final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。內部類要訪問局部變量,局部變量必須定義成final類型。

        finally是異常處理語句結構的一部分,表示老是執行。

        finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。可是JVM不保證此            方法總被調用

3六、運行時異常與通常異常有何異同?

       異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非         運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。

      1.定義不一樣,運行時異常都是RuntimeException類及其子類異常,如NullPointerException、IndexOutOfBoundsException等。通常異常是RuntimeException之外的異常,類型上           都屬於Exception類及其子類。

       2.處理方法不一樣,運行時異常是不檢查異常,程序中能夠選擇捕獲處理,也能夠不處理。對於通常異常,JAVA編譯器強制要求用戶必需對出現的這些異常進行catch並處理,否              則程序就不能編譯經過。

3七、error和exception有什麼區別?

       error一旦出現,程序就不能執行,是系統級別的、程序員不可捕捉並進行處理的。

       出現exception錯誤,多是程序員但願捕捉並處理的,分爲runtime exception和cheked exception。

3八、簡單說說Java中的異常處理機制的簡單原理和應用。

        異常是指java程序運行時(非編譯)所發生的非正常狀況或錯誤,與現實生活中的事件很類似,現實生活中的事件能夠包含事件發生的時間、地點、人物、情節等信息,能夠用          一個對象來表示,Java使用面向對象的方式來處理異常,它把程序中發生的每一個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。

        Java對異常進行了分類,不一樣類型的異常分別用不一樣的Java類表示,全部異常的根類爲java.lang.Throwable,Throwable下面又派生了兩個子類:

        Error和Exception,Error表示應用程序自己沒法克服和恢復的一種嚴重問題,程序只有奔潰了,例如,說內存溢出和線程死鎖等系統問題。

        Exception表示程序還可以克服和恢復的問題,其中又分爲系統異常和普通異常:

        系統異常是軟件自己缺陷所致使的問題,也就是軟件開發人員考慮不周所致使的問題,軟件使用者沒法克服和恢復這種問題,但在這種問題下還可讓軟件系統繼續運行或者            讓軟件掛掉,例如,數組腳本越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉換異常(ClassCastException);

        普通異常是運行環境的變化或異常所致使的問題,是用戶可以克服的問題,例如,網絡斷線,硬盤空間不夠,發生這樣的異常後,程序不該該死掉。

        java爲系統異常和普通異常提供了不一樣的解決方案,編譯器強制普通異常必須try..catch處理或用throws聲明繼續拋給上層調用方法處理,因此普通異常也稱爲checked異常,而          系統異常能夠處理也能夠不處理,因此,編譯器不強制用try..catch處理或用throws聲明,因此係統異常也稱爲unchecked異常。

3九、Java 中堆和棧有什麼區別?

        棧:在函數中定義的一些基本類型的變量和對象的引用變量都是在函數的棧內存中分配,當在一段代碼塊定義一個變量時,Java 就在棧中爲這個變量分配內存空間,當超過變          量的做用域後,Java 會自動釋放掉爲該變量分配的內存空間,該內存空間能夠當即被另做它用。

        堆:堆內存用來存放由 new 建立的對象和數組,在堆中分配的內存,由 Java 虛擬機的自動垃圾回收器來管理。

40、能將 int 強制轉換爲 byte 類型的變量嗎?若是該值大於 byte 類型的範圍,將會出現什麼現象?

        咱們能夠作強制轉換,可是 Java 中 int 是 32 位的,而 byte 是 8 位的,因此,若是強制轉化,int 類型的高 24 位將會被丟棄,由於byte 類型的範圍是從 -128 到 128。

相關文章
相關標籤/搜索