即使將靜態對象定義爲靜態,靜態對象如何訪問非靜態字段?靜態對象如何訪問非靜態字段,即使它被定義爲靜態?
public class pp {
static int x = 4;
int y = 8;
public static pp hj = new pp();
public static void main(String[] args) {
System.out.println(hj.y); //prints 8
}
}
即使將靜態對象定義爲靜態,靜態對象如何訪問非靜態字段?靜態對象如何訪問非靜態字段,即使它被定義爲靜態?
public class pp {
static int x = 4;
int y = 8;
public static pp hj = new pp();
public static void main(String[] args) {
System.out.println(hj.y); //prints 8
}
}
您可以訪問一個非靜態成員,如y
,從靜態上下文,如main
,只要你有一個靜態例如,從您正在訪問的非靜態成員。
在你的情況下,hj
是一個靜態實例。它可以從靜態上下文訪問,以及y
,這是它的非靜態字段。
相反,如果你試圖在靜態情況下訪問y
沒有對象引用,您的代碼將無法編譯:
public class pp {
static int x = 4;
int y = 8;
static int z = y + 5; // <<=== This does not compile
public static void main(String[] args) {
System.out.println(y); // <<=== This does not compile either
}
}
hj
是pp
類的static
場肯定。但它也指pp
的一個實例。
因此,您可以使用hj
來訪問pp
類的任何實例成員(方法或字段)。
但是,如果您嘗試訪問的實例字段:從static main method()
int y = 8;
這樣:
public static void main(String[] args) {
System.out.println(y);
}
你會看到,你不能爲static
成員不能指代實例成員。
public static pp hj = new pp();
如何靜態對象訪問非靜態字段,即使它定義爲靜態的?
這裏只是對象的引用是靜態的,這意味着要訪問變量(hj
),您不需要創建它的所有者對象。
一旦你得到了對象的引用,你可以訪問對象成員,雖然它是靜態或非靜態的引用。
因爲你是從一個實例得到'y'(即' hj')。 –
它通過實例獲取靜態方法中的非靜態方法。 – atiqkhaled