为什么静态方法和静态嵌套类没有直接访问实例变量?

时间:2013-05-11 21:45:25

标签: java

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

4 个答案:

答案 0 :(得分:4)

很简单。没有实例,就无法访​​问。

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

修改

如果@Alnitak在下面建议的那样,某个地方有一个实例,这根本没有用。您需要引用JVM的特定实例才能找到它的成员。

答案 1 :(得分:4)

非静态字段位于每个实例中,其他地方都没有。

在静态方法中,您没有对实例的默认引用,因此该方法无法知道您考虑的实例。

问题不在于地址或内存,而是一个逻辑问题。

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

答案 2 :(得分:3)

以此程序为例:

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

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

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

答案 3 :(得分:0)

还要保持命名空间清晰。即使它们是静态的,如果程序试图访问方法/类,您仍然会编译错误。