如果不加if,编译器会提示“initializer does not complete normally”

如果不加if,编译器会提示“initializer does not complete normally”
不加if的情况:会报错,显示错误信息:“initializer does not complete normally”

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

加if的情况:能编译通过

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

解析:
解析1:因为static方法,是类初始化的时候进行的。如果没加if,那么就会进入while的死循环,虚拟机检查不通过。
解析2:没加if的时候,虚拟机只检查最外层代码,因为有while的死循环;如果加了if以后,就只单纯检查If语句,虚拟机不会检查到while的死循环语句块。

拓展:在静态语句块中,也不能抛出异常,否则编译不通过。
没加if的情况:会报错,显示错误信息:“initializer does not complete normally”

class DeadLoopClass{
    static {
        throw new RuntimeException();
    }
}

加if的情况:能正常编译通过

class DeadLoopClass{
    static {
        if(true) {
            
            throw new RuntimeException();
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容