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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-8-22 20:12  /  1336 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
class FuShuException extends Exception
{
        FuShuException(String msg)
        {
                super(msg);
        }
}
*/
class Demo
{
        int div(int a,int b)throws FuShuException
        {
                if(b<0)
                        throw new FuShuException("出现了负数");
                return a/b;
        }
}
class ExceptionDemo1
{
        public static void main(String[] args)//throws Exception
        {
                Demo d=new Demo();
                try
                {
                        int x=d.div(4,-1);
                        System.out.println("x="+x);
                }
                catch (FuShuException e)
                {
                        System.out.println("除数出现负数了");
                }
        }
}

这个程序把上面的FuShuException类去掉为什么编译和运行都正常?

3 个回复

倒序浏览
本帖最后由 刘芮铭 于 2012-8-22 23:03 编辑

我是这样理解你的问题的!你只是说把FuShuException这个自定义的异常类去掉!

但是你后面依然对要产生异常的int x=d.div(4,-1)进行了try{}catch{}处理,并抛出了最大的父类异常Exception
所以你相当于是处理了这个异常,所以编译时没有任何问题的,再加上你的“出现负数”是自定义的异常,
在编译器看来本身就是合法的,所以更不会报错,运行结果当然也不会报错,因为除法运算是允许除数为负的!

延伸一点:如果你把负数这一项改为0的话,如果你不进行try{}catch{}的话,编译时期就会产生异常,
如果你进行了try{}catch{}处理,
运行结果会抛出一个RuntimeException,因为除法运算是不允许除数为0的!

回复 使用道具 举报
本帖最后由 应广驰 于 2012-8-23 00:32 编辑

不是吧,我用eclipse运行是无法编译的,异常也是一个类,你没有定义这个类,就在代码中new了一个该类的对象,编译应该失败无法通过才对,可能是你注释了FuShuException这个类之后,没有保存就直接编译运行了,你在重新编写试试看
  1. Exception in thread "main" java.lang.Error: 无法解析的编译问题:
  2.         类型 Demo 中的方法 div(int, int)引用缺少的类型 FuShuException
  3.         FuShuException 无法解析为类型
复制代码
回复 使用道具 举报
奥  是的!编译没有通过!谢谢  已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马