引发异常
在你的第一个例子,
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
)
希望帮助!