Java程式設計第四章作業

Mr_Fattycat發表於2020-10-22

1 問答題

1、物件與物件引用的區別是什麼? 請舉例說明

建立物件: new FighterPlane(); (分配在堆上)
宣告一個物件引用: FighterPlane fp ; (分配在棧上)
初始化物件引用: fp = new FighterPlane();
例如:FighterPlane fp = new FighterPlane();
new FighterPlane()建立了一個FighterPlane物件,fp為對FighterPlane物件的引用。

2、物件作為引數傳遞的特點是什麼?請舉例說明

基本資料型別作為引數傳遞是值傳遞,而物件是引用傳遞,當物件作為引數傳遞時,傳遞的是物件的地址。
例如:

class IntClass {
    int value;
}
public class Test {
    public static void modifyValue(IntClass s, int val){
        val = 10;
        s.value = val;
    }
    public static void main(String[] args) {
        IntClass  a = new IntClass();
        int val = 8;
        modifyValue(a,val);
        System.out.println(a.value);
        System.out.println(val);
    }
}

輸出結果:

10
8

3、物件初始化順序是怎樣的?請舉例說明

①系統會對資料成員進行預設初始化
②執行資料成員定義處的初始化語句
③呼叫構造方法為資料成員指定初值
例如:

class IntClass {
    int value;//自動初始化,預設值為0
    //int value = 5;//在定義時指定初值

    public IntClass(){}
    //定義構造方法將屬性value初始化
    public IntClass(int val){
        value = val;
    }
}

public class IntClassConstructor{
    public static IntClass getInstance(){
        //呼叫構造方法
        IntClass s =new IntClass(8);
        //s.value=8
        return s;
    }

    public static  void main(String[] args){
    IntClass a =new IntClass();
    System.out.println(a.value);
    a=getInstance();
    System.out.println(a.value);
    }
}

輸出結果:

0
8

4、類的static欄位與非static欄位的區別是什麼?什麼情況應該使用static修飾符?請舉例說明

用static修飾符修飾的資料成員是不屬於任何一個類的具體物件,而是屬於類的靜態資料成員。它被儲存在類的記憶體區的公共儲存單元中,而不是儲存在某個物件的記憶體區中。因此,一個類的任何物件訪問它時,存取到的都是相同的數值。當物件中出現共享資料時使用static修飾符。
例如:

class IntClass {
    static int num = 0;
    int value = 5;

    public IntClass(){}

    public IntClass(int val){
        value = val;
    }
}

public class IntClassConstructor{
    public static IntClass getInstance(){
        IntClass s =new IntClass(8);
        return s;
    }

    public static  void main(String[] args){
        IntClass a =new IntClass();
        System.out.println(a.value);
        IntClass.num++;
        a=getInstance();
        a.num++;
        System.out.println(a.num);
        System.out.println(IntClass.num);
    }
}

輸出結果:

5
2
2

5、Java中final修飾符都有什麼作用?請舉例說明

①final修飾屬性,則屬性為常量;
例如:

final int NUM = 20; 
NUM = 30; // 編譯錯誤

②final修飾方法,則該方法在子類當中不能被覆蓋(見多型一節),可防止任何繼承類修改此方法,保證了程式的安全性和正確性。例如:

class Parent {
     public final void method1(){}//這個方法不能被子類覆蓋    
} 
class Child extends Parent { 
     public final void method1(){}//編譯錯誤
}

③final修飾類,則該類不能被繼承
例如:

class Parent {
      final class Person extends Parent{
} //可以繼承Parent類        
      class Child extends Person{
      } //編譯報錯,不能繼承Person類
}

6、Java中float[10] arr; 語句正確麼?為什麼?

錯誤。宣告時不可在方括號內指定陣列大小。

7、Java陣列元素型別為基本資料型別和引用型別時,有什麼不同?請舉例說明

①陣列元素為基本資料型別的情形
例如: int[] arr = new int[10]; //此時分配了陣列空間,每個單元初始化為預設值0
產生一個有10個單元,型別為int的陣列物件,所有單元的初值為0。

②陣列元素為引用型別
例如:String[] example = new String[10]; //物件引用陣列
產生一個具有10個單元的陣列物件,每個單元存放的是1個String物件的引用,所有單元的初值為null,此時並未建立具體的String物件
for(String x: example)
System.out.println(x); 輸出結果為10個null
為陣列物件引用賦值後,才能使用陣列元素,否則丟擲
NullPointerException異常
例如: example[0] = new String(“ab”); //建立String物件,賦值給example[0], 此時example的第一個元素指向String物件,從而可以操縱String物件。

相關文章