假设我有以下代码:
public class Everything{
public static int answer = 42;
public int getAnswer(){
return this.answer;
}
}
从技术上讲,this.answer
实际上并不存在,但编译器让我们发出警告。为什么我们不会得到一个编译错误呢?
this
是对 的实例的有效引用Everything
。因此,它是对Everything
类的有效引用,因此是访问该类的任何静态成员和/或方法的有效方式。
你甚至可以这样做:
Everything nothing = null;
nothing.answer; // Does not throw an NPE!!
一般来说,这不是很好的做法……例如,IDEA 会警告您“通过实例引用访问静态成员”。
当 Everything 类被加载时,所有的静态块和静态变量都按照它们出现的顺序执行/初始化。因此,对静态变量的任何进一步引用都将引用那些。使用类名或实例从同一个类访问它们并不重要。(甚至 fge 指出的空引用)