一、
點選檢視程式碼
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); // 傳遞物件引用
}
}