首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

求详细的解释,该怎么处理

2012-01-15 
求详细的解释publicclass a {static{System.out.println(a)}static int a 1}public class b {public

求详细的解释
public class a {
static{
System.out.println("a");
}
static int a = 1;
}
public class b {
public static void main(String[] args) {
System.out.print(a.a);
}
}
会输出a 1
如果改成static final int a =1;
只输出1
这是为什么啊?

[解决办法]
static final int a =1;此时定义的a是编译时常量
此时的System.out.print(a.a);
编译之后就变成:System.out.print(1);
因此,不会导致类的初始化。

[解决办法]
不加final,就构建了类b的新对象。先运行static块内的代码,再给a赋值。

加了final,a就是一个静态常量,直接被输出了。就像Math.PI一样。
[解决办法]
final的变量被替换了,变成了常数。

所以,定义public的final一定要慎重,一点变动,所有相关的类都要重新编译,否则后果很奇怪的。

热点排行