Java面試題復習之Java基礎


1.面向對象的特征主要有哪些?

  封裝、繼承、多態、抽象

 

2.final、finally、finalize的區別?

 

final主要用於修飾類、方法、屬性(變量)等。

通常被final修飾的類不能夠被繼承。

被final修飾的方法不能夠重寫。

被final修飾的變量是常量(賦值后,其值不再改變)。

finally是在異常處理時提供finally塊來執行任何清除操作,不管有沒有異常拋出或者捕獲,finally最后都會被執行。

finalize是一個方法名。

 

3.Exception、Error、運行時異常與一般異常有何異常?

首先我們來看一張圖,如下所示:

可以看出,所有的異常都是由Throwable類,下一層分解為兩個分支:Error和Exceprion。


Error層次結構描述了java運行時系統的內部錯誤和資源耗盡錯誤。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。應用程序不應該拋出這種類型的對象。


Exceprion這個層次結構又分解為連個分支:一個分支派生於RuntimeException;另一個分支包含其他異常。划分兩個分支的規則是:由程序錯誤導致的異常屬於RuntimeException;而程序本身沒有沒有問題,但由於像I/O錯誤這類異常導致的異常屬於其他異常。
常見的RuntimeException(運行時異常):
IndexOutOfBoundsException(下標越界異常)
NullPointerException(空指針異常)
NumberFormatException (String轉換為指定的數字類型異常)
ArithmeticException -(算術運算異常 如除數為0)
ArrayStoreException - (向數組中存放與聲明類型不兼容對象異常)
SecurityException -(安全異常)
IOException(其他異常)
FileNotFoundException(文件未找到異常。)
IOException(操作輸入流和輸出流時可能出現的異常。)
EOFException (文件已結束異常)
TypeCastException (類型轉換異常)

ClassNotFoundException (找不到類異常)

 

整合上述可以歸納為:

Error一般都是因為JVM導致的。

Exception則分為兩個運行異常和其它異常(I/O異常),運行異常通常是程序錯誤產生的,而其他異常通常程序本身沒有問題而產生的。

 

4.請寫出五種常見的運行異常?

(1)TypeCastException;

(2)ClassNotFoundException;

(3)NullPointException;

(4)NumberFormatException;

(5)IndexOutOfBoundsException;

 

5.int和Integer的區別?

(1)Integer是int的包裝類,int則是java的一種基本數據類型。
(2)Integer變量必須實例化后才能使用,而int變量不需要。
(3)Integer實際是對象的引用,當new一個Integer時,實際上是生成一個指針指向此對象;而int則是直接存儲數據值。
(4)Integer的默認值是null,int的默認值是0。

 

6.包裝類,裝箱和拆箱?

Java八大基本數據類型對應的包裝類分別如下:

Byte,Short, Integer, Long, Float, Double,Character,Boolean。

自動裝箱:基本類型自動轉為包裝類(int >> Integer)

自動拆箱:包裝類自動轉為基本類型(Integer >> int)

 

7.String、StringBuilder、StringBuffer之間的區別

詳情參考鏈接:https://www.cnblogs.com/su-feng/p/6659064.html

區別主要是兩個方面:運行速度和線程安全

運行速度快慢:StringBuilder>StringBuffer>String

原因:

是因為String是字符常量,而StringBufer和StringBuilder分別是字符變量,String對象一旦創建是不能更改的,但后兩者對象是變量則可以改變。

 

線程安全:StringBuilder是線程不安全的,StringBuffer是線程安全的。

原因:

如果一個StringBuffer對象在字符串緩沖區被多個線程使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證線程是安全的,但StringBuilder的方法則沒有該關鍵字,所以不能保證線程安全,有可能會出現一些錯誤的操作。所以如果要進行的操作是多線程的,那么就要使用StringBuffer,但是在單線程的情況下,還是建議使用速度比較快StringBuilder。

 

8.重載和重寫的區別

參考鏈接:https://blog.csdn.net/xingxingmingyue/article/details/50968741

重載(Overload):

(1)方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
(2)Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
(3)重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標准。

重寫(Override):

(1)父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。

(2)若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
(3)子類函數的訪問修飾權限不能小於父類的

重寫方法的規則:
1.參數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.
2.返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載.
3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)
4.重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常.例如,
父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常.


而重載的規則:
1.必須具有不同的參數列表;
2.可以有不同的返回類型,只要參數列表不同就可以了;
3.可以有不同的訪問修飾符;
4.可以拋出不同的異常;

寫和重載的區別在於:

重寫多態性起作用,對調用被重載過的方法可以大大減少代碼的輸入量,同一個方法名只要往里面傳遞不同的參數就可以擁有不同的功能或返回值.

用好重寫和重載可以設計一個結構清晰而簡潔的類,可以說重寫和重載在編寫代碼過程中的作用非同一般.

Overloaded的方法是可以改變返回值的類型。

9.抽象類和接口的區別

不同點比較,如圖所示:

 

相同點:

(1) 都是上層的抽象層。
(2) 都不能被實例化
(3) 都能包含抽象的方法,這些抽象的方法用於描述類具備的功能,但是不比提供具體的實現。

 

10.說說反射的用途和實現

關於反射的用途和實現,可以參考這個鏈接:https://segmentfault.com/a/1190000017389565

 

11.HTTP請求的GET和POST的區別

HTTP請求的GET和POST的區別(包括HTTP詳解)可以參考:談談HTTP

 

12.Session和Cookie的區別

(1)cookie 和session的區別是:cookie數據保存在客戶端,session數據保存在服務器端

(2)兩個都可以用來存私密的東西,同樣也都有有效期的說法,區別在於session是放在服務器上的,過期與否取決於服務期的設定,cookie是存在客戶端的,過去與否可以在cookie生成的時候設置進去。 

a.cookie數據存放在客戶的瀏覽器上,session數據放在服務器上 ;

b.cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,如果主要考慮到安全應當使用session ;

c.session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,如果主要考慮到減輕服務器性能方面,應當使用COOKIE ;

d.單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K;

e.所以將登陸信息等重要信息存放為SESSION;其他信息如果需要保留,可以放在COOKIE中。

(3)cookie和session的共同之處在於:cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式。

(4)cookie 是一種發送到客戶瀏覽器的文本串句柄,並保存在客戶機硬盤上,可以用來在某個WEB站點會話間持久的保持數據。

(5)session其實指的就是訪問者從到達某個特定主頁到離開為止的那段時間。 Session其實是利用Cookie進行信息處理的,當用戶首先進行了請求后,服務端就在用戶瀏覽器上創建了一個Cookie,當這個Session結束時,其實就是意味着這個Cookie就過期了。 

13.MVC設計思想

關於MVC設計思想,請參考:Spring(十六)之MVC框架

                                            SpringMVC原理&MVC設計思想

 

14.equlas與==區別

(1)==是判斷兩個變量或實例是不是指向同一個內存空間
    equals是判斷兩個變量或實例所指向的內存空間的值是不是相同

(2)==是指對內存地址進行比較
    equals()是對字符串的內容進行比較

(3)==指引用是否相同
    equals()指的是值是否相同

注:不要用未知是否為空的對象調用equals方法,否則會報空指針異常

或者是:

       (1)對於==,比較的是值是否相等

            如果作用於基本數據類型的變量,則直接比較其存儲的 “值”是否相等;

    如果作用於引用類型的變量,則比較的是所指向的對象的地址

  (2)對於equals方法,注意:equals方法不能作用於基本數據類型的變量,equals繼承Object類,比較的是是否是同一個對象

    如果沒有對equals方法進行重寫,則比較的是引用類型的變量所指向的對象的地址;

    諸如String、Date等類對equals方法進行了重寫的話,比較的是所指向的對象的內容。

15.什么是Java序列化和反序列化?如何實現序列化?

可以參考:https://blog.csdn.net/qq_27093465/article/details/78544505

 

16.Java的平台無關系如何體現?

一次編譯到處運行(前提需要有JRE的存在)

 

17.JDK和JRE的區別

可以參考:記一次Eclipse關於JDK和JRE的問題

 

18.Java8有哪些新特性

Java8新特性可以參考:JAVA8 十大新特性詳解

 

19.為什么wait、notify會放在Object里邊?

可以參考:為什么wait()和notify()屬於Object類

 

20.列舉常用的jdk包

(1)java.lang:語言包

(2)java.util:實用包

(3)java.awt:抽象窗口工具包

(4)javax.swing:輕量級的窗口工具包,這是目前使用最廣泛的GUI程序設計包

(5)java.io:輸入輸出包

(6)java.net:網絡函數包

(7)java.applet:編制applet用到的包(目前編制applet程序時,更多的是使用swing中的JApplet類)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM