黑马程序员技术交流社区
标题:
在try块中可以抛出异常吗?
[打印本页]
作者:
刘源
时间:
2012-8-1 09:07
标题:
在try块中可以抛出异常吗?
本帖最后由 刘源 于 2012-8-1 21:59 编辑
在try块中可以抛出异常吗,没见到有人用过啊。
如果能的话,一般什么时候使用,有没有要注意的地方啊。
“
问题已经解决
”。
作者:
余清兰
时间:
2012-8-1 09:47
可以抛异常,不过用得比较少,很少见
比如在检测代码的时候,自己处理不了,抛给另一个地方用他的方式让他去处理。我个人的理解呵呵
try
{
throw new Exception();
}
catch (Exception e)
{
}
作者:
徐然
时间:
2012-8-1 10:03
try块中可以抛出异常,之所以很少见,因为这样做就是多此一举
因为try本身就是检测异常并抛出的,你手动抛出有什么意义呢,这是一般情况
但是也有特殊情况,比如在try块中你加入了特殊判断条件并手动抛出其他异常
还有就是在IO中有一个情况可以手动抛出,创建读取流的时候,文件不存在,可以用try-catch嵌套形式
在try块中再加一个try-catch-finally块,外层try中放入创建流代码,内层try中放流操作代码
这样的话,如果流创建失败,直接抛出异常,也不用关流,免去了关流时的空指针异常
其实这个也不能说是手动抛出,只是在try中嵌try,还是用了try的自动检测异常、抛出异常
上面这些也并不是一定要这样做的,因为都有单层try的解决办法,所以就被人忽略不常用了
你可以根据实际需要这样做,但是也不建议刻意去用,因为本来就是没什么用啊
作者:
唐志兵
时间:
2012-8-1 10:07
余清兰 发表于 2012-8-1 09:47
可以抛异常,不过用得比较少,很少见
比如在检测代码的时候,自己处理不了,抛给另一个地方用他的方式让他 ...
哇塞,美女 又见到你了。
作者:
黄锐
时间:
2012-8-1 10:49
你说的这种情况用的少,但有时候也有其使用的必要性,举个例子:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileRead {
BufferedReader bufReader = null;
public FileRead() {
try {
bufReader = new BufferedReader(new FileReader(new File("C://Log.log")));
try {
String line = bufReader.readLine();
while (null != line) {
System.out.println(line);
line = bufReader.readLine();
}
} catch (IOException e) {
System.out.println("文件读取失败");
} finally {
dispose();
}
} catch (FileNotFoundException e) {
System.out.println("文件不存在");
}
}
public void dispose() {
try {
bufReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new FileRead();
}
}
使用try-catch嵌套来解决文件关闭的问题,当文件不存在时创建bufReader对象失败,所以不会去执行第二层的try-catch了,直接抛出异常。也不需要去关闭流了。
如果使用一层try-catch的话,如果文件不存在,则bufReader对象,也就不会创建成功,如果去finally中关闭的话,如果不判空去关闭,就会出现空指针异常
作者:
王峰
时间:
2012-8-1 11:37
为捕捉或捕获异常,把任何可能导致错误的语句都包围在try/catch块中。如果在try块中的语句执行时异常发生,则程序控制权将传递到catch块;如果catch块包括finally语句,则无论是否有异常发生,finally部分的代码都在最后执行。
1.try块---通式
try
{
//Statements that may cause error.
}
catch(ExceptionType [VariableName])
{
//Statements for action when exception occurs.
}
finally
{
//Statements that always execute before exit of try block.
}
2.try块---示例
try
{
sumInteger = int.Parse(sumTextBox.Text);
sumTextBox.Text = sumInteger.ToString();
}
catch
{
messageLabel.Text = "Error in input data.";
}
前面示例中的catch块将捕获任何异常。还可以指定想要捕获的异常的类型,甚至编写若干catch语句,各自捕获一种不容类型的异常。
作者:
刘源
时间:
2012-8-1 20:51
问题已经解决
作者:
陈红建
时间:
2012-8-1 21:06
我个人认为,你既然想在try里面抛弃异常的话。还不如在函数头部直接 throws Exception 呢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2