62,621
社区成员
发帖
与我相关
我的任务
分享
public class question
{
public int e;
{
int a = 5;
//这是一个初始化块,为什么会输出找不到符号a,去掉中括号又可以呢
} //如果去掉括号,相当于声明了一个带default修饰符的成员变量a
public question()
{
this.e = a; //编译执行到这一步,提示找不到符号a
}
public static void main(String[] args)
{
System.out.println(new question().e);
}
}
{
int a = 5;
}
加上大括号则a的定义只在大括号内有效,去掉大括号代表a在整个类中有效 public class question {
public int e;
{
int a = b;
// 这是一个初始化块,为什么会输出找不到符号a,去掉中括号又可以呢
} // 如果去掉括号,相当于声明了一个带default修饰符的成员变量a
public question() {
this.e = a; // 编译执行到这一步,提示找不到符号a
}
{
int b = c;
}
{
int c = a;
}
}
就会让人举觉得很混乱,把变量的作用域搞得乱七八糟,而且,很有可能出现问题。
所以呀,个人认为,对于初始化块的正确使用方式是:通过在一个类局部变量或静态变量下面加入初始化或静态初始化代码块,对该变量进行单独的初始化(并且不要依赖于该类的任何属性)。
而且,不要重度使用初始化块,因为这样会破坏代码的结构,不利于维护。
以上只是个人见解,如果有什么不同的意见,欢迎提出,一起讨论~