天天看點

java開發秋招面試題(一)

前期

馬上進入金九銀十的季節,很多公司崗位需求旺盛,會吸收很多全職和實習崗,那能不能把握這次機會還是看自己,雖然今年比較艱難,每個行業都很卷,但還是要自我做好準備随時戰鬥,不能松懈,為此整理了一系列的秋招經典的面試題,希望對大家有幫助,不必焦慮不必擔憂不要停下學習的腳步。

1、java中break、continue、return 跳轉語句的不同?

1、break:跳出循環而執行循環後面的語句

2、continue:跳過循環體中剩餘的語句而執行下一次循環

3、return 結束方法的調用.

2、成員變量和局部變量的差別是什麼?

作用域不同 :

局部變量的作用域僅限于定義它的方法

成員變量的作用域在整個類内部都是可見的

初始值不同 :

Java 會給成員變量一個初始值

Java 不會給局部變量賦予初始值

3、JAVA 中包的作用是什麼?

1、允許類組成較小的單元(類似檔案夾),易于找到和使用相應的檔案

2、更好的保護類、屬性和方法

3、防止命名沖突

4、Java 的通路修飾符是什麼?

通路權限修飾符是表明類成員的通路權限類型的關鍵字。

使用這些關鍵字來限定程式的方法或者變量的通路權限。

它們包含:

public: 所有類都可以通路

protected: 同一個包内以及所有子類都可以通路

private: 隻有歸屬的類才能通路,預設: 歸屬類及相同包下的子類可以通路

5、聲明變量和定義變量有什麼不同?

聲明變量我們隻提供變量的類型和名字,并沒有進行初始化.定義包括聲明和初始化兩個階段 String s;隻是變量聲明,String s = new String(“bob”);或者 String s = “bob”;是變量定義.

6、靜态變量和執行個體變量的差別?

在文法定義上的差別:靜态變量前要加 static 關鍵字,而執行個體變量前則不加.

在程式運作時的差別:執行個體變量屬于某個對象的屬性,必須建立了執行個體對象,其中的執行個體變量才會被配置設定空間,才能使用這個執行個體變量。靜态變量不屬于某個執行個體對象,而是屬于類,是以也稱為類變量,隻要程式加載了類的位元組碼,不用建立任何執行個體對象,靜态變量就會被配置設定空間,靜态變量就可以被使用了。總之,執行個體變量必須建立對象後才可以通過這個對象來使用, 靜态變量則可以直接使用類名來引用。

7、String 和 StringBuffer 的差別

JAVA 平台提供了兩個類:String 和 StringBuffer,它們可以儲存和操作字元串,即包含

8、StringBuffer 與 StringBuilder 的差別

StringBuffer 和 StringBuilder 類都表示内容可以被修改的字元串,StringBuilder 是線程不安全的,運作效率高,如果一個字元串變量是在方法裡面定義,這種情況隻可能有一個線程通路它,不存在不安全的因素了,則用 StringBuilder。如果要在類裡面定義成員變量,并且這個類的執行個體對象會在多線程環境下使用,那麼最好用 StringBuffer.。

9、什麼是封裝

封裝是面向對象的三大特性之一,就是将類型的狀态資訊隐藏在類内部,不允許外部程式直接通路,而通過該類提供的方法來實作對隐藏資訊的操作和通路。

封裝的好處:隐藏類的實作細節;讓使用者隻能通過程式規定的方法來通路資料;可以加入存取控制語句,限制不合理操作.

10、this 關鍵字

this 關鍵字是對一個對象的預設引用。this 關鍵字用來表示以後調用目前方法的對象的引用。

this 使用舉例:

1、使用 this 調用成員變量,解決成員變量和局部變量的同名沖突

2、使用 this 調用成員方法

3、使用 this 調用重載的構造方法,隻能在構造方法中使用,必須是構造方法的第一條語句

11、什麼是繼承

在定義和實作一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的内容作為自己的内容,并可以加入若幹新的内容,或修改原來的方法使之更适合特殊的需要,這就是繼承。繼承是子類自動共享父類資料和方法的機制,這是類之間的一種關系,提高了軟體的可重用性和可擴充性。Java 中隻支援單繼承。無法繼承父類的構造方法。

12、Overload 和 Override 的差別。Overload 的方法是否可以改變傳回值的類型?

Overload 是重載的意思,Override 是覆寫的意思,也就是重寫。

重載 Overload 表示同一個類中可以有多個名稱相同的方法,但這些方法的參數清單各不相同(即參數個數或類型不同),與方法的作用域和傳回類型無關。

重寫 Override 表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,通過子類建立的執行個體對象調用這個方法時,将調用子類中的定義方法,這相當于把父類中定義的。

那個完全相同的方法給覆寫了,這也是面向對象程式設計的多态性的一種表現。

子類重寫父類的方法時,不能擴大方法的異常範圍,即隻能比父類抛出更少的異常,或者是抛出父類抛出的異常的子異常,因為子類可以解決父類的一些問題,不能比父類有更多的問題。

子類重寫父類的方法時,不能縮小作用範圍,子類方法的通路權限隻能比父類的更大,不能更小。如果父類的方法是private 類型,那麼,此時根本不屬于重寫方法的概念,相當于子類中增加了一個全新的方法。

擴充:

至于 Overloaded 的方法是否可以改變傳回值的類型這個問題,要看你倒底想問什麼呢?這個題目很模糊。如果幾個Overloaded 的方法的參數清單不一樣,它們的傳回者類型當然也可以不一樣。但我估計你想問的問題是:如果兩個方法的參數清單完全一樣,是否可以讓它們的傳回值不同來實作重載 Overload。這是不行的,我們可以用反證法來說明這個問題,因為我們有時候調用一個方法時也可以不定義傳回結果變量,即不要關心其傳回結果,例如,我們調用map。remove(key)方法時,雖然 remove 方法有傳回值,但是我們通常都不會定義接收傳回結果的變量,這時候假設該類中有兩個名稱和參數清單完全相同的方法,僅僅是傳回類型不同,java 就無法确定程式設計者倒底是想調用哪個方法了,因為它無法通過傳回結果類型來判斷。

13、super 關鍵字

super 代表對目前對象的直接父類對象的預設引用。在子類中可以通過spuer 關鍵字來通路父類成員。

注意:

1、super 必須出現在子類(子類的方法和構造方法)中,而不是其他位置

2、可以通路父類的成員,如父類的屬性、方法和構造方法

3、注意通路權限的控制,如無法通過super 通路 private 成員

14、用 abstract 關鍵字修飾的類和方法。抽象類和抽象方法的特點:

1、抽象類和抽象方法都通過 abstract 關鍵字來修飾

2、抽象類不能執行個體化。抽象類可以沒有、有一個或多個抽象方法,甚至全部方法都可以是抽象方法。

3、抽象方法隻有方法聲明,沒有方法實作。有抽象方法的類必須聲明為抽象類。子類必須重寫所有抽象方法才能執行個體化,否則子類還是一個抽象類

15、final, finally, finalize 的差別

final 用于聲明屬性,方法和類,分别表示屬性不可變,方法不可重寫,類不可繼承。内部類要通路局部變量,局部變量必須定義成 final 類型,例如,一段代碼…… finally 是異常處理語句結構的一部分,表示總是執行。

finalize 是 Object 類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以重寫此方法提供垃圾收集時的其它資源回收,例如關閉檔案等。JVM 不保證此方法總被調用