-2

通过直接访问,我的意思是为什么他们不能在不使用字段所属类的实例的情况下访问实例变量?如果可能,请根据记忆力回答。

4

4 回答 4

4

很简单。没有实例,就没有什么可以访问的。

或者,就内存而言:您尝试访问的内容不存在于内存中。

编辑

如果,正如@Alnitak 下面建议的那样,某处有一个实例,这根本没有帮助。您需要对特定实例的引用,以便 JVM 能够找到它的成员。

于 2013-05-11T21:47:14.957 回答
4

每个实例中都有一个非静态字段,其他任何地方都没有。

在静态方法中,您没有对实例的默认引用,因此该方法无法知道您想到的是哪个实例。

问题不是地址或内存问题,而是逻辑问题。

这就像说,“我没有迷路,我只是不知道我在哪里。请用地图解释一下。”

于 2013-05-11T21:54:27.210 回答
3

以这个程序为例:

public class Test {
    public static void main(String[] args) {
        double d = Math.random();
        System.out.println(d);
    }
}

很明显,您可以调用Math.random()而无需创建类 Math 的实例;random() 是一个静态方法,这意味着它没有绑定到类的实例,它可以在没有实例的情况下使用。因此它不能访问 Math 实例的变量,因为它应该使用哪个实例?可能有数百个或根本没有。

静态内部类也是如此,它们不绑定到外部类的实例,可以独立创建和使用。

于 2013-05-11T22:02:37.140 回答
0

这也是为了保持命名空间清晰。即使它们是静态的,如果程序尝试访问方法/类,您仍然会遇到编译错误。

于 2013-05-11T21:49:50.370 回答