我了解静态是什么,但我找不到如何通过对象引用静态字段的信息。
假设我们有两个类:
class Foo {
static int statValue = 10;
}
class Bar {
public static void main(String[] args) {
Foo foo1 = new Foo();
int valFromObject = foo1.statValue;
int valFromClass = Foo.statValue;
}
}
当我们运行这个程序时,我们在堆(foo1)上有一个对象,在元空间(简化)中有两个类。
当我们通过类访问静态字段时:
int valFromClass = Foo.statValue;
这很容易,因为我假设我们引用元空间中的类对象。但是如何通过对象访问静态成员呢?当我们写:
int valFromObject = foo1.statValue;
是实际涉及的 Foo 实例还是被绕过的实例
foo1.statValue;
Foo.statValue
是同义词吗?
最佳答案
该实例实际上未被使用。 Java 使用变量的类型,然后读取静态(类)字段。
这就是为什么即使类型正确的 null 也不会引发空指针异常。
试试这个:
Foo foo1 = null;
int valFromObject = foo1.statValue; //will work
或者这个:
int valFromNull = ((Foo)null).statValue; //same thing
由于显而易见的原因,不鼓励通过实例访问静态类成员(在我看来,最重要的是实例成员被引用的错觉)。 Java 允许使用 foo1.statValue
,并带有警告(“静态字段 Foo.statValue 应以静态方式访问”
,如我的 IDE 所报告)。
关于java - 如何通过对象引用静态字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53483241/