Mob*_*Mob 4 java initialization
这是Java.据我了解,1至的分配index是一个initialization block即当类实例化第一次运行,但为什么这有效吗?
public class arr {
{
index = 1;
}
int index;
void go() {
System.out.println(++index);
}
public static void main(String [] args){
new arr().go();
}
}
Run Code Online (Sandbox Code Playgroud)
输出为2.
我应该得到一个symbol not found编译错误.此行为是初始化块原生的吗?在正常情况下int index;应该来之前index = 1;.
+1,看起来很奇怪.但事实上,非静态初始化块只是由javac插入到对象构造函数中.如果我们反编译arr.class,我们将获得真正的代码
public class arr {
int index;
public arr() {
index = 1;
}
void go() {
System.out.println(++index);
}
public static void main(String args[]) {
(new arr()).go();
}
}
Run Code Online (Sandbox Code Playgroud)
考虑这个难题,让更多乐趣
public class A {
int index;
A() {
index = 2;
}
{
index = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
什么是新的A().索引?正确的答案是2.参见反编译的A.class
class A {
int index;
A() {
index = 1;
index = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,非静态初始化块首先出现在对象构造函数中
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |