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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周志强 中级黑马   /  2013-1-15 16:07  /  9673 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 11:06 编辑

try
{
}
catch ()
{
     try
      {
     }
    catch ()
     {
     }
}
毕老师说这个语句可以嵌套使用?我怎么不太理解?那位大侠能给解释一下?

9 个回复

倒序浏览
给你一个例子,比如:下面的文件操作异常处理就是经常要这样用的
//拷贝文件
        private static void test4() {
                FileWriter fw = null;
                FileReader fr = null;
                try {
                        fw = new FileWriter("D:\\1.txt");
                        fr = new FileReader("D:\\aa.java");

                        /*
                         * //低效--读取一个字符写入一个 int n=0; while((n=fr.read())!=-1){ fw.write(n);
                         * } fw.close(); fr.close();
                         */
                        // 高效方法---先读取一部分再写
                        char[] chars = new char[1024];
                        int num = 0;//
                        while ((num = fr.read(chars)) != -1) {
                                fw.write(chars, 0, num);// 读取几个字符写入几个
                        }

                } catch (IOException e) {
                        // 处理不了--删除文件等...
                        throw new RuntimeException("读写失败!");
                } finally {
                        if (fw != null) {
                                try {
                                        fw.close();

                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                        if (fr != null) {
                                try {
                                        fr.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
        }

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
java io操作时,可能会遇到各种异常,比如: fw = new FileWriter("D:\\1.txt");这一句,就可能遇到FileNotFoundException,这时程序会走finally块,在finally块里要调用fw.close()方法也可能引发异常,所以也要捕捉.这就是try{}catch{}嵌套的情况,也就是说如果在finally{}块或catch{}块里进行了某种操作可能引发异常,也需要用try{}catch{}处理
回复 使用道具 举报
你可以这么理解,处理异常时还可能发生别的异常。所以try catch是可以嵌套使用的。
回复 使用道具 举报
      首先这个try{}catch(){}是可以嵌套使用的,所以不理解应该是思路上的问题。
    从句型上来说,你可以把try当成if,catch当成else,只要成对出现都不会编译出错。(当然捕捉的异常要存在继承关系)JVM执行的时候,会将离try最近的catch当成一对执行。这么想应该简单多了吧
    从处理问题的角度来说,在try中嵌套,显然是为了细化执行的代码,比如:
try {
   bufReader = new BufferedReader(new FileReader(new File("C://Log.log")));
   try {
    String line = bufReader.readLine();
    这样很容易就看出是哪里出了异常,catch的时候也可以处理的更细致,更贴切;这种情况下,catch中的异常不必一定要有继承关系,注意对应好try中的语句就行了。
   而在catch中嵌套,则是为了细化处理异常的代码,比如:
    try    {   // Firefox, Opera 8.0+, Safari   
                  xmlHttp=new XMLHttpRequest();    }
            catch (e)    {  // Internet Explorer   
                        try      {       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");      }   
                                catch (e)      {。。。
    这样则可以将捕捉到的异常细化地处理,有点像switch的感觉。这种情况下,由于嵌套的try是在捕捉异常之后再判断的,所以嵌套中的异常通常是外层异常的子类或同一个类,否则嵌套就没有多大意义了。
    希望对你有所帮助~

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 很给力!

查看全部评分

回复 使用道具 举报
在你try 捕捉异常的时候如果有异常他就会交给catch来处理 但是在catch处理的过程中还可能会引发异常
所以需要你再定义一个try catch来处理异常
回复 使用道具 举报
yong230 发表于 2013-1-15 16:18
java io操作时,可能会遇到各种异常,比如: fw = new FileWriter("D:\\1.txt");这一句,就可能遇到FileNotF ...

谢谢你的热心回复,有点懂了
回复 使用道具 举报
陈丽莉 发表于 2013-1-15 16:31
首先这个try{}catch(){}是可以嵌套使用的,所以不理解应该是思路上的问题。
    从句型上来说 ...

哇 大部分都是在以后的学习中遇到的啊   我才刚看到异常   要向你学习啊 加油
回复 使用道具 举报
胡勇敏 发表于 2013-1-15 16:21
你可以这么理解,处理异常时还可能发生别的异常。所以try catch是可以嵌套使用的。 ...

谢谢你哦
回复 使用道具 举报
林其荣 发表于 2013-1-15 16:42
在你try 捕捉异常的时候如果有异常他就会交给catch来处理 但是在catch处理的过程中还可能会引发异常
所以 ...

谢谢你啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马