Java面試題之Java基礎(一)
1、Java的幾種基本型別?
byte、short、int、long、float、double、char、boolean;
2、什麼是字串常量池?String為什麼是不可變的?
字串常量池即儲存在Java堆記憶體中的字串池;字串的分配會耗費高昂的時間與空間代價。JVM為了提高效能和減少記憶體開銷,在例項化字串常量的時候進行了一些優化。為 了減少在JVM中建立的字串的數量,字串類維護了一個字串池,每當程式碼建立字串常量時,JVM會首先檢查字串常量池。如果字串已經存在池中, 就返回池中的例項引用。如果字串不在池中,就會例項化一個字串並放到池中。Java能夠進行這樣的優化是因為字串是不可變的。
3、String s = new String("xyz");究竟產生了幾個物件,從JVM角度談談?
分兩種情況:
第一種情況:在字串常量池中,若存在“xyz”這個字串常量,則不會在建立"xyz"字串,只需要建立new String("xyz");即只建立一個物件;
第二種情況:在字串常量池中,若不存在“xyz”這個字串常量,則會在建立"xyz"字串並存入字串常量池種,同時需要建立new String("xyz");即建立兩個物件。
4、equals() 與 == 的區別?
== 比較的是變數(棧)記憶體中存放的物件的(堆)記憶體地址,用來判斷兩個物件的地址是否相同,即是否是指相同一個物件。比較的是真正意義上的指標操作。
equals用來比較的是兩個物件的內容是否相等。
5、Java中方法引數的傳遞規則?
Java 程式語言只有值傳遞引數。如果引數型別是原始型別,那麼傳過來的就是這個引數的一個副本,也就是這個原始引數的值,這個跟之前所談的傳值是一樣的。如果在函式中改變了副本的值不會改變原始的值;如果引數型別是引用型別,那麼傳過來的就是這個引用引數的副本,這個副本存放的是引數的地址。如果在函式中沒有改變這個副本的地址,而是改變了地址中的 值,那麼在函式內的改變會影響到傳入的引數。如果在函式中改變了副本的地址,如new一個,那麼副本就指向了一個新的地址,此時傳入的引數還是指向原來的 地址,所以不會改變引數的值。
6、Java中throw和throws的區別是什麼?
throws:用來宣告一個方法可能產生的所有異常,不做任何處理而是將異常往上傳,誰呼叫我我就拋給誰。 用在方法聲明後面,跟的是異常類名 可以跟多個異常類名,用逗號隔開 表示丟擲異常,由該方法的呼叫者來處理 throws表示出現異常的一種可能性,並不一定會發生這些異常 throw:則是用來丟擲一個具體的異常型別。 用在方法體內,跟的是異常物件名 只能丟擲一個異常物件名 表示丟擲異常,由方法體內的語句處理 throw則是丟擲了異常,執行throw則一定丟擲了某種異常 7、過載和重寫的區別?
過載:在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同甚至是引數順序不同)則視為過載;
重寫:子類會繼承父類的所有的屬性和方法(使用private修飾的無法直接訪問到),但是父類的方法可能並不能夠完全的滿足子類的需要,這個時候在方法名,引數列表,返回型別(除過子類中方法的返回值是父類中方法返回值的子類時)都相同的情況下,在子類中,修改或者重寫父類的方法稱為重寫。
8、JDK、JRE、JVM?
① JDK: Java Development kit Java 開發工具包
② JRE: Java Runtime Environment 包含JVM標準實現及Java核心類庫。JRE是Java執行環境
③ JVM: Java virtual Machine Java虛擬機器, java執行時的環境
9、Java可以多繼承嗎,那多實現呢?
Java是單繼承,多實現的。
10、集合類有哪些?
Java的集合類主要包括List(包括ArrayList、vector,LinkedList)、set(包括HashSet、LinkedHashSet、TreeSet、EnumSet)、Map(包括HashMap、LinkedHashMap、TreeMap、WeakHashMap)。