JAVA面試題(6)

(多選)1.下列說法中正確的是?()

A:子類能繼承父類的構造方法;
B:子類對從父類繼承來的成員的訪問權限,取決於父類成員聲明的訪問權限;
C:子類不能刪除從父類繼承來的成員變量;
D:在子類的實例成員中方法中,可使用“super引用”訪問被子類隱藏的父類同名成員變量;
答案:CD
解析: A錯誤,子類不能繼承父類的構造方法,子類能夠繼承除父類的構造方法外的成員變量和成員方法。
B錯誤,子類對從父類繼承來的成員的訪問權限,取決於父類成員的聲明的訪問權限。子類能夠訪問父類的公有和保護成員,不能訪問父類的私有成員。
C正確,子類不能刪除從父類繼承來的成員。當從父類繼承來的成員不能滿足子類需求時,子類不能刪除他們。可以重定義他們,修改或擴充父類成員方法的功能,使父類成員能夠適應子類新的需求。
D正確,在子類的實例成員方法中,可使用“super引用”訪問被子隱藏的父類同名成員變量,調用被子類覆蓋的父類同名成員方法,語法格式如下:
super.成員變量 //當子類隱藏父類成員變量時,引用父類同名成員變量super.成員方法([參數列表])
//當子類覆蓋父類成員方法時,調用父類同名成員變量 super將當前對象作爲其父類的一個實例引用。 注意:靜態方法中不能使用super引用。

2.多態分爲幾種情況,分別是哪幾種情況?()

A:2種,調用時的多態和編譯時的多態。
B:2種,編譯時多態和運行時的多態。
C:2種,運行時的多態和調用時的多態。
D:3種,調用時的多態、運行時的多態和編譯時的多態。
答案:B 解析: 多態分爲兩種情況,分別是編譯時的多態和運行時的多態。
如果在編譯時能夠確定執行多態方法中哪一個,則稱爲編譯時的多態;否則,稱爲運行時的多態。

3.關於sleep()和wait(),以下描述錯誤的一項是( )

A. sleep是線程類(Thread)的方法,wait是Object類的方法;
B. sleep不釋放對象鎖,wait放棄對象鎖;
C.sleep暫停線程、但監控狀態仍然保持,結束後會自動恢復;
D. wait後進入等待鎖定池,只有針對此對象發出notify方法後獲得對象鎖進入運行狀
答:D
解析:
sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。

(多選)4…下面能讓線程停止執行的有( )

A. sleep();
B. stop();
C. notify();
D. synchronized();
E. yield();
F. wait();
G. notifyAll();
答案:ABDEF
解析: sleep:導致此線程暫停執行指定時間 stop:
這個方法將終止所有未結束的方法,包括run方法。 synchronized():對象鎖
yield:當前正在被服務的線程可能覺得cpu的服務質量不夠好,於是提前退出,這就是yield。
wait:當前正在被服務的線程需要睡一會,醒來後繼續被服務

5.以下實現繼承正確的是()

A、public class Person extends Student{ }
B、public interface Student extends Person{ }
C、public class Student extend Person{ }
D、public class Student extends Person{ }
答:D
解析: Java中,實現繼承的關鍵字是 extends ,
而且Student 是 屬於 Person的 所以Student 繼承
自Person。interface是面向對象編程語言中接口操作的關鍵字,所以B不正確。

6.類有幾種訪問權限?變量和方法有幾種訪問權限?

A.1 2
B.2 2
C.2 4
D.4 4
答案:C
解析: 類有兩種訪問權限:public,友好的。
方法和變量的訪問權限:public,protected,友好的,private。 public:公有的,任何類都可以訪問。
protected:受保護的,同一個包的類可以訪問。不同包的子類可以訪問。 友好的:同一個包的類可以訪問。
private:私有的,在同一個類中才能訪問。

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

A. 值傳遞
B. 引用傳遞
答案:A
解析: Java編程語言只有值傳遞參數。當一個對象實例作爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的

8.在下列程序

1. public class Boxer1{
2. Integer i;
3. int x;
4. public Boxer1(int y) {
5. x = i+y;
6. System.out.println(x);
7. }
8. public static void main(String[] args) {
9. new Boxer1(new Integer(4));
10. }
11. }

返回的結果是()
A. 值“4”是在命令行打印出來的。
B.編譯失敗是因爲第5行中的一個錯誤。
C. 編譯失敗是因爲第9行中的一個錯誤。
D. NullPointerException在運行時發生。
. A NumberFormatException 在運行時發生。
F. An IllegalStateException 在運行時發生。
答案: D
解析: 第五行5. x =
i+y;,還沒有爲i賦值(此時i爲null),無法運算。

9. Java 多態的優缺點分別是什麼?

答:多態的優點: 提高了代碼的維護性(繼承保證); 提高了代碼的擴展性(由多態保證);

多態的缺點: 不能使用子類的特有功能(非要使用只能通過不優雅的創建子類對象方式,但是佔用內存,其次就是使用強轉類型,也容易出現問題);
向下轉型(把父類轉換爲子類型)中有可能會出現異常;

10. Java 常見的內部類有哪幾種,簡單說說其特徵?

答:靜態內部類、成員內部類、方法內部類(局部內部類)、匿名內部類。

靜態內部類是定義在另一個類裏面用 static 修飾 class
的類,靜態內部類不需要依賴於外部類(與類的靜態成員屬性類似)且無法使用其外部類的非 static
屬性或方法(因爲在沒有外部類對象的情況下可以直接創建靜態內部類的對象,如果允許訪問外部類的非 static 屬性或者方法就會產生矛盾)。

成員內部類是沒有用 static
修飾且定義在在外部類類體中的類,是最普通的內部類,可以看做是外部類的成員,可以無條件訪問外部類的所有成員屬性和成員方法(包括 private
成員和靜態成員),而外部類無法直接訪問成員內部類的成員和屬性,要想訪問必須得先創建一個成員內部類的對象然後通過指向這個對象的引用來訪問;當成員內部類擁有和外部類同名的成員變量或者方法時會發生隱藏現象(即默認情況下訪問的是成員內部類的成員,如果要訪問外部類的同名成員需要通過
OutClass.this.XXX 形式訪問);成員內部類的 class 前面可以有 private 等修飾符存在。

方法內部類(局部內部類)是定義在一個方法裏面的類,和成員內部類的區別在於方法內部類的訪問僅限於方法內;方法內部類就像是方法裏面的一個局部變量一樣,所以其類
class 前面是不能有 public、protected、private、static 修飾符的,也不可以在此方法外對其實例化使用。

匿名內部類是一種沒有構造器的類(實質是繼承類或實現接口的子類匿名對象),由於沒有構造器所以匿名內部類的使用範圍非常有限,大部分匿名內部類用於接口回調,匿名內部類在編譯的時候由系統自動起名爲
OutClass$1.class,一般匿名內部類用於繼承其他類或實現接口且不需要增加額外方法的場景(只是對繼承方法的實現或是重寫);匿名內部類的
class 前面不能有 pravite 等修飾符和 static 修飾符;匿名內部類訪問外部類的成員屬性時外部類的成員屬性需要添加
final 修飾(1.8 開始可以不用)。

如果覺得我寫的還行,請關注我的公衆號,每天定時推送乾貨.
在這裏插入圖片描述

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