我想重现InterruptedException行为的一部分,但我不明白它是如何工作的......
所以我有这段代码:
public static void main(String [] args){
try{
}catch(InterruptedException ie){
}
}
当我尝试编译它时,我得到了这个编译器错误
Unreachable catch block for InterruptedException. This exception is never thrown from the try statement body
我做了一个自定义异常,这不是一个异常,因为它没有扩展异常......
class MyException extends Throwable{
}
public static void main(String [] args){
try{
}catch(MyException ie){
}
}
显示相同的编译器错误
Unreachable catch block for MyException. This exception is never thrown from the try statement body
然后我做了这个
public static void main(String [] args){
try{
throw new MyException();
} catch(MyException e){
e.printStackTrace();
}
try{
throw new InterruptedException();
} catch(InterruptedException e){
e.printStackTrace();
}
}
他们两个都编译得很好。
但现在是棘手的部分......
public static void main(String [] args){
try{
throw new MyException();
} catch(Exception e){
e.printStackTrace();
} catch(MyException e){
e.printStackTrace();
}
try{
throw new InterruptedException();
} catch(Exception e){
e.printStackTrace();
} catch(InterruptedException e){
e.printStackTrace();
}
}
编译说
Unreachable catch block for InterruptedException. It is already handled by the catch block for Exception
你能告诉我InterruptedException如何显示InterruptedException的" Unreachable catch块。永远不会从try语句主体"中抛出此异常。编译器错误并在同一时间扩展Exception,因为当我扩展异常时,我的自定义异常不会显示此编译器错误
举个例子:
class MyException extends Exception{}
public static void main(String [] args){
try{
}catch(MyException me){
}
}
此代码不会抛出任何编译器错误
但以下代码
class MyException extends Throwable{}
public static void main(String [] args){
try{
}catch(MyException me){
}
}
答案 0 :(得分:1)
这是因为InterrupedException
是Exception
的子类,但前一个Exception
块已捕获catch
。
如果catch子句可以捕获异常类E1并且紧跟的try语句的前一个catch子句可以捕获E1或E1的超类,那么这是一个编译时错误。
InterruptedException
catch块中的块将是无法访问的代码,这将是此编译器错误的理由。
答案 1 :(得分:0)
你正在聊天抛出异常因此必须从某个地方抛出
顺便说一句:我的编译器显示第一个脚本和第二个脚本的错误