求大神指导, //如果不加if,编译器会提示“initializer does not complete normally”

csdndataid_123 2014-10-31 09:03:17

public class TestThreadWait {

public static void main(String[] args) {
Runnable run = new Runnable() {
public void run() {
System.out.println(Thread.currentThread()+"start");
DeadLoopClass dlc = new DeadLoopClass();
System.out.println(Thread.currentThread()+"over");
}
};

Thread thread1 = new Thread(run);
Thread thread2 = new Thread(run);
thread1.start();
thread2.start();
}
}

final class DeadLoopClass {
static {
if(true) {
System.out.println(Thread.currentThread()+"init DeadLoopClass");
while(true) {

}
}
}
}
...全文
414 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpokm0550 2014-11-04
  • 打赏
  • 举报
回复
楼主在静态初始化块里面设置了死循环,导致你静态初始化块一直不能执行完
Mr_JieLQ 2014-11-01
  • 打赏
  • 举报
回复
这涉及到java对static代码块中代码的检测机制,简单说,就是static中不能直接使用while循环和抛异常,这会导致类初始化失败,那加if为什么就可以了?很简单,java只检测最外面那层代码,就是说if里面的while不检测了。下面的代码报同样的错

final class DeadLoopClass {
	static {
		throw new RuntimeException();
	}	 
}
highnewrain 2014-11-01
  • 打赏
  • 举报
回复
个人观点: 因为你在DeadLoopClass类的静态初始块了加了个while(true){}死循环,你不加if判断条件,那个这个死循环肯定会执行,编译器应该不会让你通过编译, 其实下面这样也可以
boolean bFlag=true;
while(bFlag)
{

}
Mr_JieLQ 2014-11-01
  • 打赏
  • 举报
回复
引用 4 楼 csdndataid_123 的回复:
[quote=引用 2 楼 u011564172 的回复:] 这涉及到java对static代码块中代码的检测机制,简单说,就是static中不能直接使用while循环和抛异常,这会导致类初始化失败,那加if为什么就可以了?很简单,java只检测最外面那层代码,就是说if里面的while不检测了。下面的代码报同样的错

final class DeadLoopClass {
	static {
		throw new RuntimeException();
	}	 
}
while循环为什么就会导致初始化失败呢,按一楼那样写就可以啊,还请大神明细[/quote]
引用 4 楼 csdndataid_123 的回复:
[quote=引用 2 楼 u011564172 的回复:] 这涉及到java对static代码块中代码的检测机制,简单说,就是static中不能直接使用while循环和抛异常,这会导致类初始化失败,那加if为什么就可以了?很简单,java只检测最外面那层代码,就是说if里面的while不检测了。下面的代码报同样的错

final class DeadLoopClass {
	static {
		throw new RuntimeException();
	}	 
}
while循环为什么就会导致初始化失败呢,按一楼那样写就可以啊,还请大神明细[/quote] while(true) 会死循环,static不能执行完,类不能完成初始化,一楼的写法确实可以,我也不懂,java会在static中检测是否有死循环和异常被抛出
csdndataid_123 2014-11-01
  • 打赏
  • 举报
回复
引用 2 楼 u011564172 的回复:
这涉及到java对static代码块中代码的检测机制,简单说,就是static中不能直接使用while循环和抛异常,这会导致类初始化失败,那加if为什么就可以了?很简单,java只检测最外面那层代码,就是说if里面的while不检测了。下面的代码报同样的错

final class DeadLoopClass {
	static {
		throw new RuntimeException();
	}	 
}
while循环为什么就会导致初始化失败呢,按一楼那样写就可以啊,还请大神明细
csdndataid_123 2014-11-01
  • 打赏
  • 举报
回复
引用 1 楼 u010005508 的回复:
个人观点: 因为你在DeadLoopClass类的静态初始块了加了个while(true){}死循环,你不加if判断条件,那个这个死循环肯定会执行,编译器应该不会让你通过编译, 其实下面这样也可以
boolean bFlag=true;
while(bFlag)
{

}
这种方法我试过,确实可以,就是对那种方法有点疑惑

62,635

社区成员

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

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