staticJava中的成员(static字段或static方法)与其各自的类相关联,而不是与此类的对象相关联.以下代码尝试访问null引用上的静态字段.
public class Main
{
private static final int value = 10;
public Main getNull()
{
return null;
}
public static void main(String[] args)
{
Main main=new Main();
System.out.println("value = "+main.getNull().value);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然main.getNull()返回null,但它可以工作和显示value = 10.这段代码是如何工作的?
ass*_*ias 92
该行为在Java语言规范中指定:
null引用可用于访问类(静态)变量而不会导致异常.
更详细地说,静态字段评估,例如Primary.staticField如下工作(强调我的) - 在您的情况下,Primary = main.getNull():
- 将评估Primary表达式,并丢弃结果.[...]
- 如果该字段是非空的final字段,则结果是类或接口中指定的类变量的值,该类是Primary表达式的类型.[...]
SLa*_*aks 19
因为,正如您所说,静态字段与实例无关.
从实例引用中访问静态字段的能力(正如您所做的那样)仅仅是一种语法糖,没有其他含义.
您的代码编译为
main.getNull();
Main.value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7648 次 |
| 最近记录: |