黑马程序员技术交流社区

标题: 没有定义的异常处理怎么还能运行? [打印本页]

作者: 吴通    时间: 2012-8-22 20:12
标题: 没有定义的异常处理怎么还能运行?
/*
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类去掉为什么编译和运行都正常?

作者: 刘芮铭    时间: 2012-8-22 23:02
本帖最后由 刘芮铭 于 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:24
本帖最后由 应广驰 于 2012-8-23 00:32 编辑

不是吧,我用eclipse运行是无法编译的,异常也是一个类,你没有定义这个类,就在代码中new了一个该类的对象,编译应该失败无法通过才对,可能是你注释了FuShuException这个类之后,没有保存就直接编译运行了,你在重新编写试试看
  1. Exception in thread "main" java.lang.Error: 无法解析的编译问题:
  2.         类型 Demo 中的方法 div(int, int)引用缺少的类型 FuShuException
  3.         FuShuException 无法解析为类型
复制代码

作者: 吴通    时间: 2012-8-23 20:35
奥  是的!编译没有通过!谢谢  已解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2