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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鲍霄霄 中级黑马   /  2012-7-12 11:56  /  1504 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当catch块中引发一个异常时,它的执行过程如何?

4 个回复

倒序浏览
try中捕获到异常后,在catch中对异常进行处理。
一般有给用户一个提示,或者是中断当前正在执行的程序。
回复 使用道具 举报
catch住一个异常后, 你的catch语句中写什么就怎么处理。

比如你可以输出一些信息 来提示这些异常怎么产生的或者是什么异常等等,也可以什么都不写,就不做任何处理了。赞同0| 评论
回复 使用道具 举报
不是catch中引发一个异常的,而是try语句中引发的异常,你看下面这段代码:
                try
                {
                        int x = d.div(5,0);//这边调用了一个除法函数,需要对其检查是否出现算数异常,因此就放在了try语句块中。当try中出现了异常,直接就跳到了catch中进行处理
                        System.out.println("x="+x);
                }
                catch (ArithmeticException e)//catch语句块中则是对捕获的异常进行处理,可以进行自定义处理,也可以不处理,这是根据实际需要来决定的
                {
                        System.out.println(e.toString());
                        System.out.println("被零除了!!");

                }
回复 使用道具 举报
如果在catch块中引发了新的异常,当然是抛出这个新的异常给调用该方法的方法,后面的代码不再执行,但是如果有finally方法块,会执行其中的内容,为了更好地说明这个执行过程,下面附加我的验证代码。

class ExceptionTest
{
        public static void method() throws NoException
        {
                Demo d = new Demo();

                try
                {
                        int x = d.div(4,-1);
                        System.out.println("x="+x);
                }
                catch (FuShuException e)
                {
                        System.out.println(e.toString());
                        throw new NoException("FuShuException中发生NoException!");  //这里代表着在catch中出现新的异常,抛出
                }
                finally
                {
                        System.out.println("finally");//finally中存放的是一定会被执行的代码。
                }
        }

        public static void main(String[] args)  // throws NoException
        {
                try
                {
                        method();   
                }
                catch (NoException e)    //抛出后的异常在这里被捕获,并在catch中处理;
                                                      //如果不处理,就在main函数中抛出,交给JVM处理;
                                                      //一般不建议不处理,自己处理能自定义提示信息,方便解决问题。
                {
                        System.out.println(e.toString());
                }               
                System.out.println("over");
        }
}

class FuShuException extends Exception
{
        FuShuException(String msg)
        {
                super(msg);
        }
}

class NoException extends Exception   
{
        NoException(String msg)
        {
                super(msg);
        }
}

class Demo
{
        int div(int a,int b)throws FuShuException
        {
                if(b<0)
                        throw new FuShuException("除数为负数");
                return a/b;
        }
}

为了演示异常中出现异常的处理方法,定义了2个自定义异常FuShuException和NoException,都继承于Exception类。
最后,附上异常处理原则。(都是毕老师总结的,认真看视频就知道了)        1,处理方式有两种:try 或者 throws。
        2,调用到抛出异常的功能时,抛出几个,就处理几个。一个try可以对应多个catch。
        3,多个catch,父类的catch放到最下面。
        4,catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。
                try
                {
                        throw new AException();
                }
                catch (AException e)
                {
                        throw e;
                }
                如果该异常处理不了,但并不属于该功能出现的异常。
                可以将异常转换后,在抛出和该功能相关的异常。

                或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,
                当调用者知道。并处理。也可以将捕获异常处理后,转换新的异常。
                try
                {
                        throw new AException();
                }
                catch (AException e)
                {
                        // 对AException处理。
                        throw new BException();
                }

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 山寨

查看全部评分

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