Java最常見面試真題
Java最常見面試真題你都看過了嗎?面試之前看看真題會對您的求職更有利哦。更多內容請關注應屆畢業生考試網!
面向對象編程(OOP)
1、面向對象的特徵有哪些方面?
封裝,繼承,多態和抽象。下面我們會逐個分析這些特性。
封裝 給對象提供了隱藏內部特性和行為的能力。對象提供一些能被其他對象訪問的方法來改變它內部的數據。在Java當中,有3種修飾符:public,private和protected。每一種修飾符給其他的位於同一個包或者不同包下面對象賦予了不同的訪問權限。
下面列出了使用封裝的一些好處:
通過隱藏對象的屬性來保護對象內部的狀態。
提高了代碼的可用性和可維護性,因為對象的行為可以被單獨的改變或者是擴展。
禁止對象之間的不良交互提高模塊化。
多態 是編程語言給不同的底層數據類型做相同的接口展示的一種能力。一個多態類型上的操作可以應用到其他類型的值上面。
繼承 給對象提供了從基類獲取字段和方法的能力。繼承提供了代碼的重用行,也可以在不修改類的情況下給現存的類添加新特性。
抽象 是把想法從具體的實例中分離出來的步驟,因此,要根據他們的功能而不是實現細節來創建類。Java支持創建只暴漏接口而不包含方法實現的抽象的類。這種抽象技術的主要目的是把類的行為和實現細節分離開。
抽象和封裝的不同點
抽象和封裝是互補的概念。一方面,抽象關注對象的行為。另一方面,封裝關注對象行為的細節。一般是通過隱藏對象內部狀態信息做到封裝,因此,封裝可以看成是用來提供抽象的一種策略。
常見的Java問題
1.訪問修飾符public,private,protected以及不寫(默認)時的區別?
修飾符 當前類 同 包 子 類 其它包
public √ √ √ √
protected √ √ √ ×
private √ × × ×
default √ √ × ×
類的成員不寫訪問修飾時默認為default。
默認對於同一個包中的其他類相當於公開(public),對於不是同一個包中的其他類相當於私有(private)。受保護(protected)對子類相當於公開,對不是同一包中的沒有父子關係的類相當於私有。Java中,外部類的修飾符只能是public或默認,類的成員(包括內部類)的修飾符可以是以上四種。
和JRE的區別是什麼?
Java運行時環境(JRE)是將要執行Java程序的Java虛擬機。它同時也包含了執行applet需要的瀏覽器插件。Java開發工具包(JDK)是完整的Java軟件開發包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調試器),可以讓開發者開發、編譯、執行Java應用程序。
支持的數據類型有哪些?什麼是自動拆裝箱?
- 原始類型: boolean,char,byte,short,int,long,float,double
- 包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把int轉化成Integer,double轉化成double,等等。反之就是自動拆箱。
class AutoUnboxingTest {
public static void main(String[] args) {
Integer a = new Integer(4);
Integer b = 4; // 將4自動裝箱成Integer類型
int c = 4;
tln(a == b); // false 兩個引用沒有引用同一對象
tln(a == c); // true a自動拆箱成int類型再和c比較
}
}
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
4.闡述final、finally、finalize的區別。
- final:修飾符(關鍵字)有三種用法:如果一個類被聲明為final,意味着它不能再派生出新的子類,即不能被繼承,因此它和abstract是反義詞。將變量聲明為final,可以保證它們在使用中不被改變,被聲明為final的變量必須在聲明時給定初值,而在以後的引用中只能讀取不可修改。被聲明為final的方法也同樣只能使用,不能在子類中被重寫。
- finally:通常放在try…catch…的後面構造總是執行代碼塊,這就意味着程序無論正常執行還是發生異常,這裏的代碼只要JVM不關閉都能執行,可以將釋放外部資源的代碼寫在finally塊中。
- finalize:Object類中定義的方法,Java中允許使用finalize()方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在銷燬對象時調用的,通過重寫finalize()方法可以整理系統資源或者執行其他清理工作。
中是否可以覆蓋(override)一個private或者是static的方法?
static 關鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
Java中static方法不能被覆蓋,static修飾的方法是靜態綁定的,而方法覆蓋是為了實現多態,是動態綁定,所以static修飾的方法不需要被覆蓋。
無法重寫被private修飾的方法,因為被private修飾的父類方法在子類中是不可見的。
中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
Java中的方法重載發生在同一個類裏面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是説子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。