2017-08-05 65 views
2

即使将静态对象定义为静态,静态对象如何访问非静态字段?静态对象如何访问非静态字段,即使它被定义为静态?

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 
    } 
} 
+0

因为你是从一个实例得到'y'(即' hj')。 –

+0

它通过实例获取静态方法中的非静态方法。 – atiqkhaled

回答

0

您可以访问一个非静态成员,如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 
    } 
} 
0

hjpp类的static场肯定。但它也指pp的一个实例。

因此,您可以使用hj来访问pp类的任何实例成员(方法或字段)。

但是,如果您尝试访问的实例字段:从static main method()

int y = 8; 

这样:

public static void main(String[] args) { 
    System.out.println(y); 
} 

你会看到,你不能为static成员不能指代实例成员。

0
public static pp hj = new pp(); 

如何静态对象访问非静态字段,即使它定义为静态的?

这里只是对象的引用是静态的,这意味着要访问变量(hj),您不需要创建它的所有者对象。

一旦你得到了对象的引用,你可以访问对象成员,虽然它是静态或非静态的引用。

相关问题