A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘源 中级黑马   /  2012-8-1 09:07  /  13560 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘源 于 2012-8-1 21:59 编辑

在try块中可以抛出异常吗,没见到有人用过啊。
如果能的话,一般什么时候使用,有没有要注意的地方啊。



问题已经解决”。

7 个回复

倒序浏览
可以抛异常,不过用得比较少,很少见
比如在检测代码的时候,自己处理不了,抛给另一个地方用他的方式让他去处理。我个人的理解呵呵
try
{
        throw new Exception();
}
catch (Exception e)
{
}
回复 使用道具 举报
try块中可以抛出异常,之所以很少见,因为这样做就是多此一举
因为try本身就是检测异常并抛出的,你手动抛出有什么意义呢,这是一般情况
但是也有特殊情况,比如在try块中你加入了特殊判断条件并手动抛出其他异常
还有就是在IO中有一个情况可以手动抛出,创建读取流的时候,文件不存在,可以用try-catch嵌套形式
在try块中再加一个try-catch-finally块,外层try中放入创建流代码,内层try中放流操作代码
这样的话,如果流创建失败,直接抛出异常,也不用关流,免去了关流时的空指针异常
其实这个也不能说是手动抛出,只是在try中嵌try,还是用了try的自动检测异常、抛出异常

上面这些也并不是一定要这样做的,因为都有单层try的解决办法,所以就被人忽略不常用了
你可以根据实际需要这样做,但是也不建议刻意去用,因为本来就是没什么用啊
回复 使用道具 举报
余清兰 发表于 2012-8-1 09:47
可以抛异常,不过用得比较少,很少见
比如在检测代码的时候,自己处理不了,抛给另一个地方用他的方式让他 ...

哇塞,美女 又见到你了。
回复 使用道具 举报
你说的这种情况用的少,但有时候也有其使用的必要性,举个例子:

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中关闭的话,如果不判空去关闭,就会出现空指针异常
回复 使用道具 举报
为捕捉或捕获异常,把任何可能导致错误的语句都包围在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 21:06:28
8#
我个人认为,你既然想在try里面抛弃异常的话。还不如在函数头部直接 throws Exception 呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马