即使将静态对象定义为静态,静态对象如何访问非静态字段?静态对象如何访问非静态字段,即使它被定义为静态?
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