Java面試選擇題查漏補缺

題目地址:https://wenku.baidu.com/view/b42ce5680b4c2e3f57276394?ivk_sa=1023194j&qq-pf-to=pcqq.c2c

1

在這裏插入圖片描述

p.name到底能不能輸出?

答案是不能的,因爲Person中的name屬性是被private屬性修飾的。
private僅支持在本類中調用,所以在其他類中是無法引用的。

Person p = new Child()概念模糊

多態:
多態是繼封裝、繼承之後,面向對象的第三大特性。
現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的同學張三既是學生也是人,即出現兩種形態。

最終多態體現爲父類引用變量可以指向子類對象。
多態的前提是必須有子父類關係或者類實現接口關係,否則無法完成多態。
在使用多態後的父類引用變量調用方法時,會調用子類重寫後的方法。

多態-函數的變換:

public class Person {
    private String name = "Person";
    int age = 18;
    public void hello(){
        System.out.println("Person hello");
    }
}
public class Child extends Person{
    int age = 8;
    public void hello(){
        System.out.println("Child hello");
    }
}
public class Main {
    public static void main(String[] args) {
        Person p = new Child();
        //輸出成員函數
        p.hello();
    }
}

輸出結果爲:Child hello 輸出子類的

多態-成員的變換:
如果父類和子類的屬性都相同,那麼怎麼輸出結果呢?

public class Person {
    private String name = "Person";
    int age = 18;
    public void hello(){
        System.out.println("Person hello");
    }
}
public class Child extends Person{
    int age = 8;
    public void hello(){
        System.out.println("Child hello");
    }
}
public class Main {
    public static void main(String[] args) {
        Person p = new Child();
        //輸出成員數據
        System.out.println(p.age);
    }
}

輸出結果爲:18 輸出父類的。

2

在這裏插入圖片描述
super()必須在子類構造器方法的第一行,否則編譯不通過
子類構造器使用 super 調用父類的構造器時,需要放在首行,不然會編譯報錯。

3

在這裏插入圖片描述
在這裏插入圖片描述

答案是:D
首先this.name 它是在static main中的。
this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this

當子類的構造器調用super()的時候,只能在子類構造器的第一行。

4

在這裏插入圖片描述

爲什麼答案D是錯誤的?

構造器中的this調用和super調用都必須出現在構造器執行體的第一行,所以this調用和super調用不會同時出現

5

在這裏插入圖片描述
總結:雖然抽象類不能被實例化,但可以有構造函數。

6

在這裏插入圖片描述

7

在這裏插入圖片描述

這道題爲什麼輸出的是father?

成員變量是不存在重載一說的,只有方法可以重載。

Father.name 定義爲 private ,這是Father 自己的成員變量, 子類是取不到的
Test.Name 是 Test 自己的成員變量, 跟 Father.name 是兩個變量
然後 子類Test並沒有覆寫 Father 的getName方法
於是main函數調用的實際是Father的getName, 取的是Father.Name的值,自然就是輸出 “father”

8

在這裏插入圖片描述

爲什麼答案是編譯報錯?

我們手打代碼上去發現也是報錯的? 那麼爲什麼?
在這裏插入圖片描述
百度查看了一下try-catch的規則:
如果能捕獲多個異常,那麼先捕獲小異常,在捕獲大異常

9

在這裏插入圖片描述
super指代的是?

super不能在static方法中,在子類中指代父類的方法和域
子類不能跨越父類引用祖父。
子類使用super可引用父類的某些方法和屬性。

10

在這裏插入圖片描述
打開InputStreamReader的源碼
在這裏插入圖片描述
new InputStreamReader()的參數必須是InputStream類型(或其子類類型,如FileInputstream,且e.txt是一個文件(file),所以只能用FileInputstream讀入,而不能用DataInputstream,DataInputstream只能讀入簡單類型的變量)。
B讀入的是字符類型,不是字節(Stream)類型。
D讀入的是一個String的path,肯定不行

11

在這裏插入圖片描述

12

在這裏插入圖片描述
看一下運算符優先級。
在這裏插入圖片描述

可以看到是從右到左邊的。
i+=i-=i*=i
首先是i*=i 12*12 = 144
然後i值還是12 12-144 = -132
-132 + 12 = -120

13

在這裏插入圖片描述

Java事務的類型有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。

14

在這裏插入圖片描述

15

在這裏插入圖片描述
在結果集中 我們的索引是從1開始的。

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