求大神指导, //如果不加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) {

}
}
}
}
...全文
489 6 打赏 收藏 转发到动态 举报
写回复
用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)
{

}
这种方法我试过,确实可以,就是对那种方法有点疑惑
内容概要:本文系统研究了虚拟同步发电机(VSG)的惯量-阻尼协同自适应并网控制策略及其稳定性分析,聚焦于提升高比例可再生能源接入背景下电网的频率稳定性。通过Simulink仿真平台与Matlab代码实现,构建了VSG并网系统的动态模型,深入探讨了惯量与阻尼参数的自适应调节机制,以优化系统对频率波动的响应能力。研究涵盖了双机并联VSG的功率精确分配、微电网黑启动过程、虚拟阻抗的引入以及预同步控制等关键技术,并结合根轨迹分析与调节系数对比,验证了所提控制策略在提升系统稳定性和动态性能方面的有效性。文章强调了协同自适应控制在现代电力系统中的关键作用,为微电网和分布式能源系统的稳定运行提供了理论支持和技术方案。; 适合人群:具备电力系统、自动控制或新能源并网等相关专业知识背景,熟悉Matlab/Simulink仿真工具,从事电力电子、微电网控制、可再生能源并网等领域科研或工程应用的研发人员及研究生。; 使用场景及目标:①掌握VSG在微电网及并网系统中的高精度建模与仿真方法;②深入理解惯量-阻尼协同自适应控制对电网频率稳定的优化机制;③应用于微电网黑启动、功率均分控制、虚拟阻抗设计及预同步等实际工程场景的算法开发与性能验证; 阅读建议:建议结合提供的Matlab代码与Simulink模型进行同步仿真操作,重点关注参数自适应调节模块的设计逻辑、根轨迹稳定性分析及不同调节系数下的动态响应对比,以深化对控制策略内在机理的理解与实际应用能力。

62,622

社区成员

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

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