静态块不能抛出已检查的异常,但我看到了一些代码,其中已检查的异常被取消选中并从静态块中抛出。这样的一个例子是读取字典的文本文件。我们不想只读取字典的一半,并且抛出异常而不是捕获它是有意义的。但我的问题是 - 它只是一种黑客行为还是一种常见的行业广泛编码风格?
答案 0 :(得分:2)
抛出未经检查的异常的决定不是黑客攻击,它是您唯一的选择:静态块中的异常表示类初始化失败 - 类的用户无法处理的事情,因为它是您班级的实施细节。换句话说,静态块中的任何异常都表示程序员在他或她的系统中使用您的类的方式存在错误,因此它应该由块内部处理,或者作为未经检查的异常抛出以完全停止系统
答案 1 :(得分:1)
如果你无法处理它,那么你需要抛弃它。所以它在必要时使用。
答案 2 :(得分:1)
static{
try{
//do something that throws a checked exception
...
}catch(Exception e){
//this is an unchecked exception
throw new IllegalStateException("error initializing", e);
}
}