Java面試2019常考題系列——java面向對象二(附帶答案)

1、集合的作用是什麼?

數據的傳送 增、刪、改、查、constainsAll,可以存放不同類型的對象。

 

2、集合的通用方法有那些?通用方法是什麼?(操作)

集合 List 的遍歷方法有:

Iterator:

Enumeration

For

Get

set

Collection 的通用方法有:

Iterator()

Add()

Clear();

remove()

 

3、說出 ArrayList,Vector, LinkedList 的存儲性能和特性 HashMap 和 Hashtable 的區別

ArrayList Vector:以數組的方式存儲,增、刪慢,查、改快

ArrayList:線程不安全,速度快

ArrayList:線程安全,速度慢(synchoronized)

LikedList: 以單鏈表的方式存儲,增、刪快,查、改慢

HashMap 與 Hashtable 都實現的 Map 接口,HashTable 線程安全,HashMap 線程不安全。

 

4、Collection 和 Collections 的區別。

Collection 是集合的根接口,其下有 set 及 list

Collections 是集合的算法。

 

5、Set 裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是 equals()? 它們有何區別?用 contains 來區分是否有重複的對象。還是都不用。

 

在比較時先調用 hashCode 方法,如果不相同,證明不相等。

如果相同,再調用 equals 方法,如果 equals 方法相同,證明相等,不相同,證明不相等。

==:主要用在基本數據類型及引用

Equals:主要是對象或對象引用的比較。

集合中是否包含某一個元素用 contains 來判斷。

 

6、List, Set, Map 是否繼承自 Collection 接口?

List,set 繼承於 Collection

Map 沒有繼承於 Collection,其相對是獨立的。

屬於 Collection 類型的對象,可以通過構造函數將一個集合構造成另外一個集合。

 

7、面向對象的特徵有哪些方面?

1.抽象:

找共性,將共有的屬性、方法放到父類中

2.繼承:

子類繼承於父類,具有父類的所有屬性與方法,可以重用,也可以覆蓋。

3.封裝:

一個類包括多個屬性及方法。

4. 多態性:

動態:

靜態:

 

8、String 是最基本的數據類型嗎?

基本數據類型包括 byte、int、char、long、float、double、boolean 和 short。

java.lang.String 類是 final 類型的,因此不可以繼承這個類、不能修改這個類。爲了提高

效率節省空間,我們應該用 StringBuffer 類

 

9、int 和 Integer 有什麼區別?

Int 是基本數據類型,不是對象,佔一個內存空間,沒有方法。與其同類的有 long,char,doble

Integer 是封裝類,具有方法及屬性。與其同類的有 Long,Double.Float

 

10、運行時異常與一般異常有何異同?

運行時異常:java JVM 拋出的異常,代碼中不用處理。

一般異常:用戶拋出的異常,如果用 throws 聲明瞭,調用這個方法的代碼必須對其處理。

 

11、&和&&的區別?

&:與: 左邊若爲 false 右邊還執行。

&&:短路與,左邊若爲 false 右邊不執行。

 

12、final, finally, finalize 的區別?

final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

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

finalize 是 Object 類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,

可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。

算符可以用來決定某對象的類是否實現了接口。

 

13、heap 和 stack 有什麼區別?

棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處

理。

堆是棧的一個組成元素

 

14、Static Nested Class 和 Inner Class 的不同?

Static Nested Class 是被聲明爲靜態(static)的內部類,它可以不依賴於外部類實例被實

例化。而通常的內部類需要在外部類實例化後才能實例化。

 

15、什麼時候用 assert?

assertion (斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在

實現中,assertion 就是在程序中的一條語句,它對一個 boolean 表達式進行檢查,一個正確

程序必須保證這個 boolean 表達式的值爲 true;如果該值爲 false,說明程序已經處於不正確

的狀態下,系統將給出警告或退出。一般來說,assertion 用於保證程序最基本、關鍵的正確

性。assertion 檢查通常在開發和測試時開啓。爲了提高性能,在軟件發佈後,assertion 檢

查通常是關閉的。

 

 

16、GC 是什麼? 爲什麼要有 GC?

GC 是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘

記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java 提供的 GC 功能可以自動監

測對象是否超過作用域從而達到自動回收內存的目的,Java 語言沒有提供釋放已分配內存的

顯示操作方法。

 

17、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

short s1 = 1; s1 = s1 + 1; (s1+1 運算結果是 int 型,需要強制轉換類型) short s1 = 1;

s1 += 1;(可以正確編譯)

 

 

18、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法返回與參數最接近的長整數,

參數加 1/2 後求其 floor.

 

 

19、Java 有沒有 goto?

java 中的保留字,現在沒有在 java 中使用。

 

20、給我一個你最常見到的 runtime exception

ArithmeticException, ArrayStoreException, BufferOverflowException,

BufferUnderflowException, CannotRedoException, CannotUndoException,

ClassCastException, CMMException, ConcurrentModificationException, DOMException,

EmptyStackException, IllegalArgumentException, IllegalMonitorStateException,

IllegalPathStateException, IllegalStateException, ImagingOpException,

IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException,

NoSuchElementException, NullPointerException, ProfileDataException,

ProviderException, RasterFormatException, SecurityException, SystemException,

UndeclaredThrowableException, UnmodifiableSetException,

UnsupportedOperationException

一般異常:

IOException

FileNotFoundException

SqlException

 

 

21、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?

接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類。

 

22、abstract 的 method 是否可同時是 static,是否可同時是 native,是否可同時是 synchronized?

都不能

 

23、數組有沒有 length()這個方法? String 有沒有 length()這個方法?

數組沒有 length()這個方法,有 length 這個屬性

String 有 length()這個方法.

 

24、構造器 Constructor 是否可被 override?

構造器 Constructor 不能被繼承,因此不能重寫 Overriding,但可以被重載 Overloading。

 

25、是否可以繼承 String 類?

String 類是 final 類故不可以繼承。

 

 

26、swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?

switch(expr1)中,expr1 是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應

該是 int、 short、 char 或者 byte。long,string 都不能作用於 swtich。

 

 

27、try {}裏有一個 return 語句,那麼緊跟在這個 try 後的 finally {}裏的 code 會不會被執行,什麼

時候被執行,在 return 前還是後?

會執行,在 return 前執行。

 

 

28、兩個對象值相同(x.equals(y) == true),但卻可有不同的 hash code,這句話對不對?

對,有相同的 hash code。

 

29、當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞?

是引用傳遞

基本數據類型:值

對象: 引用

30、編程題: 寫一個 Singleton 出來。

Singleton 模式主要作用是保證在 Java 應用程序中,一個類 Class 只有一個實例存在。

一般 Singleton 模式通常有幾種種形式:

第一種形式: 定義一個類,它的構造函數爲 private 的,它有一個 static 的 private 的該類

變量,在類初始化時實例話,通過一個 public 的 getInstance 方法獲取對它的引用,繼而調用其中的方法。

public class Singleton {

private Singleton(){}

 //在自己內部定義自己一個實例,是不是很奇怪?

 //注意這是 private 只供內部調用

 private static Singleton instance = new Singleton();

 //這裏提供了一個供外部訪問本 class 的靜態方法,可以直接訪問

 public static Singleton getInstance() {

 return instance;

 }

 }

 第二種形式:

public class Singleton {

 private static Singleton instance = null;

 public static synchronized Singleton getInstance() {

 //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次

 //使用時生成實例,提高了效率!

 if (instance==null)

 instance=new Singleton();

return instance; }

}

其他形式:

定義一個類,它的構造函數爲 private 的,所有方法爲 static 的。

一般認爲第一種形式要更加安全些

 

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

原理:

有錯直接轉到異常處理部分或向上拋出。

應用:

JAVA 的異常就是錯誤,有兩種一種是運行時,編碼可以不用捕捉。一種是一般異常,如果 throws 聲明瞭,必須進行處理。

 

32、垃圾回收的優點和原理。並考慮 2 種回收機制。

優點:

程序員不用管內存,jvm 自動完成,開發方便。運行優先非常低,程序無法清楚實例什麼時候被消毀。

 

 

33、描述一下 JVM 加載 class 文件的原理機制?

JVM 中類的裝載是由 ClassLoader 和它的子類來實現的,Java ClassLoader 是一個重要的 Java運行時系統組件。它負責在運行時查找和裝入類文件的類。

 

34、char 型變量中能不能存貯一箇中文漢字?爲什麼?

能夠定義成爲一箇中文的,因爲 java 中以 unicode 編碼,一個 char 佔 16 個字節,所以放一箇中文是沒問題的

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