2013-05-11 58 views

回答

4

非静态字段位于每个实例中,其他位置无。

在静态方法中,您没有对实例的默认引用,所以方法无法知道您想要哪个实例。

问题不是地址或内存的问题,这是一个逻辑问题。

这就好像在说:“我不会迷路,我只是不知道自己在哪里,请使用地图来解释它。”

+0

因此,非静态方法对实例有默认引用? – 2013-05-11 22:04:27

+0

@KacyRaye外部类对'this'的引用在许多情况下是可选的。嵌套类也可以引用其外部类。在JVM级别,“this”作为第一个参数传递给您。 – 2013-05-11 22:06:43

4

这很简单。没有实例,没有任何可访问的东西。

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

编辑

如果像@Alnitak以下建议,是在某个地方的实例,这不利于在所有。您需要参考特定的JVM实例才能找到它的成员。

+0

这显然不正确。如果存在实例,则存在于内存中。但是,编译器将拒绝让您编写代码来尝试访问它,因为Java不提供原始内存访问。 – Alnitak 2013-05-11 21:48:19

+0

_无需使用字段所属的类的实例,意味着没有实例。 – Keppil 2013-05-11 21:49:25

+0

我读为“_no instance supplied_”,而不是“_no instance exists_” – Alnitak 2013-05-11 21:51:55

0

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

3

拿这个程序,例如:

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

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

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

相关问题