Java - 异常评估
Java - Exception evaluating
如何评估异常?我的意思是:
try{
catch(Exception ex){
if(ex == IOException){ //Error
System.out.println("IOException caught: " + ex.toString());
}
else if(){
}
....
}
我知道还有其他方法可以实现这一点。我只想知道是否可以将 Exception
"ex" 与定义的 Exception
进行比较,例如 IOException
.
最佳做法是为您需要捕获的每个 Exception
添加不同的 catch
语句,按照倒置的 class 层次结构顺序(从窄到宽)。
try {
// TODO
}
catch(IOException ioe) {
}
catch(Exception e) {
}
否则,您始终可以使用 instanceof
。
catch(Exception ex) {
if (ex instanceof IOException) {
}
}
备注
- 后者对于 Java 7 样式的 multiple-exception catch 块可能稍微有用一些,例如
catch (IOException | PatternSyntaxException ex)
.
正如 Codebender 提到的,您可以通过使用以下成语来匹配确切的 class 而不是使用 instanceof
:
if (ex.getClass().equals(IOException.class))
.
instanceof
关键字比精确 class 比较更强大,但执行速度可能较慢。
例如,new FileNotFoundException() instanceof IOException
returns true
,因为 FileNotFoundException
是 IOException
的 child class。
您可以使用 instanceof
运算符。但请记住,您将从最具体的检查到最一般的检查。
因为 FileNotFoundException 也是 IOException。
try{
//do stuff
}catch(Exception ex){
if(ex instanceof FileNotFoundException){
System.out.println("FileNotFoundException caught: " + ex.toString());
}else if(ex instanceof IOException){
System.out.println("IOException caught: " + ex.toString());
}
}
但更简洁的解决方案是
try{
//do stuff
}catch(IOException ioe){
//handle IOException
}catch(Exception e){
//handle Exception
}
您可以执行多个 catch
语句:
try
{
//code
}catch(IOException e)
{
//Code
}
catch (NoSuchFieldException e) {
//Code
}
....
另外,你也可以这样做:
try {
//Code
} catch( IOException | NoSuchFieldException ex ) {
//Code
}
如果您想使用具有多个 catch
异常的相同代码。
希望对您有所帮助!
如何评估异常?我的意思是:
try{
catch(Exception ex){
if(ex == IOException){ //Error
System.out.println("IOException caught: " + ex.toString());
}
else if(){
}
....
}
我知道还有其他方法可以实现这一点。我只想知道是否可以将 Exception
"ex" 与定义的 Exception
进行比较,例如 IOException
.
最佳做法是为您需要捕获的每个 Exception
添加不同的 catch
语句,按照倒置的 class 层次结构顺序(从窄到宽)。
try {
// TODO
}
catch(IOException ioe) {
}
catch(Exception e) {
}
否则,您始终可以使用 instanceof
。
catch(Exception ex) {
if (ex instanceof IOException) {
}
}
备注
- 后者对于 Java 7 样式的 multiple-exception catch 块可能稍微有用一些,例如
catch (IOException | PatternSyntaxException ex)
. 正如 Codebender 提到的,您可以通过使用以下成语来匹配确切的 class 而不是使用
instanceof
:if (ex.getClass().equals(IOException.class))
.instanceof
关键字比精确 class 比较更强大,但执行速度可能较慢。例如,
new FileNotFoundException() instanceof IOException
returnstrue
,因为FileNotFoundException
是IOException
的 child class。
您可以使用 instanceof
运算符。但请记住,您将从最具体的检查到最一般的检查。
因为 FileNotFoundException 也是 IOException。
try{
//do stuff
}catch(Exception ex){
if(ex instanceof FileNotFoundException){
System.out.println("FileNotFoundException caught: " + ex.toString());
}else if(ex instanceof IOException){
System.out.println("IOException caught: " + ex.toString());
}
}
但更简洁的解决方案是
try{
//do stuff
}catch(IOException ioe){
//handle IOException
}catch(Exception e){
//handle Exception
}
您可以执行多个 catch
语句:
try
{
//code
}catch(IOException e)
{
//Code
}
catch (NoSuchFieldException e) {
//Code
}
....
另外,你也可以这样做:
try {
//Code
} catch( IOException | NoSuchFieldException ex ) {
//Code
}
如果您想使用具有多个 catch
异常的相同代码。
希望对您有所帮助!