Vas*_*nth 5 java static scope static-block static-variables
考虑以下场景:
代码:1
public class StaticDemo {
static{
b=5;
System.out.println("Static B:"+b);/*Compilation error:"Cannot reference a field before it is defined"*/
}
static int b;
static{
System.out.println("B:"+b);
}
public static void main(String[] args) {
}
}
Run Code Online (Sandbox Code Playgroud)
注释下面的代码,没有错误,并且显示了以下输出.
代码:2
public class StaticDemo {
static{
b=5;
//System.out.println("Static B:"+b);
}
static int b;
static{
System.out.println("B:"+b);
}
public static void main(String[] args) {
}
}
Run Code Online (Sandbox Code Playgroud)
输出 -
B:5
Run Code Online (Sandbox Code Playgroud)
如果执行基于静态变量或块的写入顺序.
为什么初始化(b=5)没有抛出编译错误,如代码所示:2.
并且还请解释为什么Code:1抛出错误,如果Code:2为真?
\n\n\n仅当成员是类或接口 C 的实例(分别是静态)字段并且满足以下所有条件时,成员的声明才需要在使用之前以文本形式出现:
\n\n\n
\n\n- 该用法发生在 C 的实例(分别为静态)变量初始值设定项或 C 的实例(分别为静态)初始值设定项中。
\n- 用法不在赋值的左侧。
\n- 用法是通过一个简单的名称。
\n- C 是包含用法的最内部类或接口。
\n如果不满足上述四个要求中的任何一个,则会出现编译时错误。
\n\n[...]
\n\n上述限制旨在在编译时捕获循环或其他格式错误的初始化
\n
换句话说,可以写入稍后在类中声明的字段,但不能从中读取。
\n\n在我引用的部分之后的示例框中有更详细的示例。
\n| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |