2015-07-04 168 views
2

所以我有两个关于java的一般问题。首先是什么时候在方法体中使用try/catch而不是在声明方法时使用throws异常?这是我的意思的一点示范。这:Java中的捕捉与抛出异常

public void whileChatting() throws IOException{} 

public void closeConnection() { 
    try { 
    } catch (IOException ioException) { 
     ioException.printStackTrace(); 
    } 
} 

然后我的第二个问题是什么时候人知道是什么类型的异常要么捕捉或抛出?我的意思是例外,如IOException或EOFException等等...

如果有一个很好的链接有人可以发送我教这一切(因为它可能比我想象的更复杂),我会一样感激如果你回答了。 谢谢。

回答

4

引发异常

在你的第一个例子,

public void whileChatting() throws IOException{} 

意味着它只是抛出异常到任何被调用函数。然后可以用try-catch块调用该方法时捕获它。如

try{ 
    whileChatting(); 
} 
catch(IOException e){ 
    e.printStackTrace(); 
} 

投掷的方法基本上传播它调用此方法将需要还包括throws IOException,或异常将需要与在较高水平的方法要处理(由链条,并因此任何方法通常是一个try-catch块的手段)。

捕捉异常

捕捉异常是优雅地处理异常的一种方式。常见的事情是e.printStackTrace();,它将错误的详细信息打印到控制台,但并不总是必要的。有时你可能想要做一个System.exit(0)甚至System.out.println("Error in method whileCalling()")

有一个catch块你可以捕获任何类型的异常!你也可以做一个try-catch-finally块,它将在try块中运行代码,捕获任何异常,以及是否捕获到任何异常,它将进入finally块并运行该代码。

要知道可能需要捕获的异常,可以查看可能抛出异常的类的Javadocs。在那里你会找到一个类可以抛出的每一个可能的东西的列表。你也可以赶上Exception这将抓住任何可以想象的异常! (好吧,授予它扩展例外)

最后你可以像这样连接catch块。

try{ 
    whileCalling(); 
} 
catch(IOException e){ 
    //handle this situation 
} 
catch(FileNotFoundException e){ 
    //handle this situation 
} 
catch(Exception e){ 
    //handle this situation 
} 

这将工作像和其他 - 如果块和不捕获重复。

所以基本上回答您的问题:

1:throw的异常意味着有别人处理它,这是否是另一个类,另一种方法,或者只是希望这不会发生否则你的程序会崩溃(非常糟糕的做法)。

2:使用try catch块实际上是处理异常,但是你认为合适!打印堆栈跟踪进行调试或给用户一个新的提示重新输入的东西可能。 (例如提示用户需要输入文件位置,然后它会抛出一个FileNotFoundException

希望帮助!