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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘晓康 中级黑马   /  2012-4-4 22:17  /  1250 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class ExceptionDemo4 {

        /**
         * @param args
         */
        public static void main(String[] args) throws ArithmeticException {
                // TODO Auto-generated method stub
     Demo d=new Demo();
     d.div(4, 0);
   
     System.out.println("asd");//为什么抛异常 不执行呢?
        }

}
class Demo
{
        int div(int a,int b)// throws ArithmeticException
        {
        if(b==0)
                        throw new ArithmeticException("出错了");
                return a/b;
        }
}

Exception in thread "main" java.lang.ArithmeticException: 出错了
        at Demo.div(ExceptionDemo4.java:21)
        at ExceptionDemo4.main(ExceptionDemo4.java:10)
为什么不执行System.out.println("asd");//

5 个回复

倒序浏览
class Demo
{
        int div(int a,int b)// throws ArithmeticException
        {
        if(b==0)
                        throw new ArithmeticException("出错了");
                return a/b;
        }
}
int div(int a,int b)后面生命的异常不要加注释符,你加了注释符虚拟机就不会读取它
那么你下面就相当于还没声明异常就直接抛出异常了!而且,如果在这个程序里主函数
已经是最终调用者了,它把一场抛给虚拟机,虚拟机就把程序停了,下面的代码当然就
读不出来!
回复 使用道具 举报
本帖最后由 孙利川 于 2012-4-4 23:22 编辑

class Demo
{
        int div(int a,int b)// throws ArithmeticException
        {
        if(b==0)
                        throw new ArithmeticException("出错了");
                return a/b;
        }
}
回复二楼:int div(int a,int b)后面生命的异常不用写,因为ArithmeticException异常是RuntimeException的子类,不用声明。
楼主,这样的结果很正常呀,在程序执行的预料之中呀,d.div(4,0)这句代码调用类Demo的div方法,抛出异常,其后的代码自然就不会执行了,程序到此停止呀。
回复 使用道具 举报
// ArithmeticException 这里注释不注释都没关系,这个异常没自定义,父类是RuntimeException 所以不声明也没关系

但是异常抛出给了调用者,div(4,0)了 这里是主函数,并且没有try catch()所以就又抛给虚拟机了,所以程序就停掉了
没法执行到下一句了
回复 使用道具 举报
因为在抛出异常后,程序就停止了,所以后面的就不会运行了。
回复 使用道具 举报
   你在主函数上声明了异常,程序在执行的过程中发现除数为0,就发生了异常,这时程序就结束了。下面的代码就执行不了,而且执行也没有意义,如果你要想让他执行必须try,finally 把你需要执行的语句放在finally中的语句一定会被执行,看下面代码

class Demo
{
        int div(int a,int b)throws Exception
        {
                return a/b;
        }
}

class FinallyDemo
{
        public static void main(String[] args)
        {
                Demo d = new Demo();
                try
                {
                        int num = d.div(4,0);
                        System.out.println("num="+num);
                }
                catch (Exception e )
                {
                        System.out.println(e.toString());
                        //return;
                        System.exit(0);//退出jvm。
                }
                finally
                {
                        //定义的是一定会被执行的代码。
                        System.out.println("finally");
                }
                System.out.println("Hello World!");
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马