黑马程序员技术交流社区
标题:
没有定义的异常处理怎么还能运行?
[打印本页]
作者:
吴通
时间:
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这个类之后,没有保存就直接编译运行了,你在重新编写试试看
Exception in thread "main" java.lang.Error: 无法解析的编译问题:
类型 Demo 中的方法 div(int, int)引用缺少的类型 FuShuException
FuShuException 无法解析为类型
复制代码
作者:
吴通
时间:
2012-8-23 20:35
奥 是的!编译没有通过!谢谢 已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2