解决方案 »

  1.   

    个人观点:
    因为你在DeadLoopClass类的静态初始块了加了个while(true){}死循环,你不加if判断条件,那个这个死循环肯定会执行,编译器应该不会让你通过编译,
    其实下面这样也可以
    boolean bFlag=true;
    while(bFlag)
    {}
      

  2.   

    这涉及到java对static代码块中代码的检测机制,简单说,就是static中不能直接使用while循环和抛异常,这会导致类初始化失败,那加if为什么就可以了?很简单,java只检测最外面那层代码,就是说if里面的while不检测了。下面的代码报同样的错
    final class DeadLoopClass {
    static {
    throw new RuntimeException();
    }  
    }
      

  3.   

    while循环为什么就会导致初始化失败呢,按一楼那样写就可以啊,还请大神明细
      

  4.   


    while(true) 会死循环,static不能执行完,类不能完成初始化,一楼的写法确实可以,我也不懂,java会在static中检测是否有死循环和异常被抛出