java之記錄面試題

error和exception的 區別?

Error(錯誤)
表示系統級的錯誤和程序不必處理的異常,是.net運行環境中的內部錯誤或者硬件問題,
比如,內存資源不足等,對於這種錯誤,程序基本無能爲力,除了退出運行外別無選擇。

Exception(異常)
表示需要捕捉或者需要程序進行處理的異常,它處理的是因爲程序設計的瑕疵
而引起的問題或者在外的輸入等引起的一般性問題,是程序必須處理的。

編寫一個線程安全的單例模式?

package DevisePattern;

public class MySingleton {
    private static MySingleton mySingle;

    private MySingleton() {

    }

    public static MySingleton getInstance() {
        if (mySingle == null) {
            synchronized (MySingleton.class) {
                mySingle = new MySingleton();
            }
        }
        return mySingle;
    }
}

編譯時異常和運行時異常的區別?

java異常可分爲3種:

  (1)編譯時異常:Java.lang.Exception

  (2)運行期異常:Java.lang.RuntimeException

  (3)錯誤:Java.lang.Error

Java.lang.Exception和Java.lang.Error繼承自Java.lang.Throwable;
Java.lang.RuntimeException繼承自Java.lang.Exception.
編譯時異常: 程序正確,但因爲外在的環境條件不滿足引發。例如:用戶錯誤及I/O問題—-程序試圖打開一個並不存在的遠程Socket端口。這不是程序本身的邏輯錯誤,而很可能是遠程機器名字錯誤(用戶拼寫錯誤)。對商用軟件系統,程序開發者必須考慮並處理這個問題。Java編譯器強制要求處理這類異常,如果不捕獲這類異常,程序將不能被編譯。

運行期異常: 這意味着程序存在bug,如數組越界,0被除,入參不滿足規範…..這類異常需要更改程序來避免,Java編譯器強制要求處理這類異常。

錯誤: 一般很少見,也很難通過程序解決。它可能源於程序的bug,但一般更可能源於環境問題,如內存耗盡。錯誤在程序中無須處理,而有運行環境處理。

順便說一下:編譯期和運行期的區別

編譯期和運行期進行的操作是不相同的,編譯器只是進行語法的分析,分析出來的錯誤也只是語法上的錯誤,而運行期在真正在分配內存··

比如說你寫一個while循環,一直往棧裏寫,編譯器是不會出錯的,可是運行期就會出現棧滿的錯誤··

如果兩個對象equals()相等,那麼hashcode也不一定相等?

1.兩個對象equals相等那麼hashcode 是一定相等的。
2.兩個對象equals不相等hashcode可能相等可以不相等。

String a=”abc”; 跟String a= new String (“abc”) 有什麼區別?
String a=”abc” a 變量存在棧中,abc存在常量池中,有且只有一個,a的指針指向abc。再定義一個String s=”abc”;這兩個對象引用的常量池地址都是同一個,
String a= new String (“abc”) ;a 變量存在棧中,abc 存在堆中,a的指針指向abc。再定義一個String s= new String (“abc”) ; a!=s,因爲a和s所指的內存空間不同。
記住了:這兩種方式都是2個object對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章