求救,先行谢谢

tylovexuejian 2009-08-08 11:29:06
静态初始化块对静态变量的访问问题。代码如下
public class ty {

static {
a=1;
System.out.println(a); //a出现错误:“在定义字段之前不能引用该字段”. 但是将a换成ty.a无错误,者
//将这个静态初始化块放在 static int a=0后面也可以。
}

static void dwt2() {
System.out.println(a);
}

static int a=0;
}

那位大虾指点下,在此先行谢过
...全文
102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
princess_rosie 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 blliy117 的回复:]
a=1; 改成int a = 1;
[/Quote]
Despereaux 2009-08-09
  • 打赏
  • 举报
回复
初始化顺序
pupppet 2009-08-09
  • 打赏
  • 举报
回复
初始化顺序而已。。。。。
KingWolfOfSky 2009-08-09
  • 打赏
  • 举报
回复
干嘛写勒诡异的代码~~
woshimike 2009-08-09
  • 打赏
  • 举报
回复
楼主 哥们 你想测试什么 或者 你想实现什么功能啊 为什么写这么奇怪的代码
筱伟 2009-08-09
  • 打赏
  • 举报
回复
静态块,静态方法,静态变量都是在类被加载后开始调用的,只被调用1次,而且按照出现的先后顺序调用,所以类加载时先执行static {a=1; System.out.println(a);} 然后才执行static int a=0; 即先引用后定义,所以在运行程序的时候就报a出现错误:“在定义字段之前不能引用该字段”。如果将static {a=1; System.out.println(a);}放到static int a=0;则是先定义后引用,正常!
blliy117 2009-08-09
  • 打赏
  • 举报
回复
a=1; 改成int a = 1;
feishare 2009-08-09
  • 打赏
  • 举报
回复
初始化顺序:(静态变量、静态初始化块)>(变量、初始化块)>构造器
子类的静态变量和静态初始化块是在父类的变量,初始化块和构造器初始化之前完成
父类的变量初始化块构造器是在子类的变量初始化构造器之前完成
静态变量和静态初始化块的初始化顺序取决于在类中顺序,同变量和初始化块
warrior30 2009-08-09
  • 打赏
  • 举报
回复
静态块是在类被加载后开始调用的,并且只被调用1次,
也就是类需要加载完全把静态变量加载后才调用的。
静态变量的初始化顺序是依次的。
一头头 2009-08-09
  • 打赏
  • 举报
回复
楼上说的很有道理

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧