作業測試總結

王佳豪發表於2024-10-16

一、

點選檢視程式碼
class Test {
    {
        int field = 200; // 例項初始化塊中的區域性變數,不會影響類欄位的值
    }
    
    public int field = 100; // 類欄位初始化為100
    
    public Test(int value) {
        this.field = value; // 構造方法可以重新賦值
    }
    
    public Test() {}
}

public class Main {
    public static void main(String[] args) {
        Test obj = new Test();
        System.out.println(obj.field); // 輸出:100
        
        obj = new Test(300);
        System.out.println(obj.field); // 輸出:300
    }
}

例項初始化塊中的區域性變數:

{
int field = 200; // 這是區域性變數,不影響類欄位的值
}
這裡 int field = 200 是在例項初始化塊中宣告的,它是一個區域性變數,不會影響到類欄位 field 的值。

類欄位的初始化:

public int field = 100;
這是類欄位,將其初始化為 100。

構造方法:

public Test(int value) {
this.field = value; // 構造方法可以重新賦值
}
構造方法可以重新為欄位 field 賦值,覆蓋之前的初始值。

無參構方法:

public Test() {}
無參構造方法不進行欄位值的重新賦值,因此欄位的值保持為類欄位的初始值。
二、
如何在靜態方法中訪問類的例項成員(即沒有附加static關鍵字的欄位或方法)
即:
將物件的引用作為引數傳遞給靜態方法,然後在靜態方法中透過該引用來訪問例項成員。
程式碼如下:

點選檢視程式碼
class MyClass {
    int instanceField; // 例項欄位

    // 例項方法
    void instanceMethod() {
        System.out.println("Instance method called");
    }
}

public class Main {
    // 靜態方法
    public static void staticMethod(MyClass obj) {
        // 透過傳入的物件引用訪問例項成員
        obj.instanceField = 100;
        obj.instanceMethod();
    }

    public static void main(String[] args) {
        MyClass obj = new MyClass();
        staticMethod(obj); // 傳遞物件引用
    }
}