1. 程式人生 > >Java面試題之Java基礎(一)

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)。