黑马程序员技术交流社区

标题: 异常 问题 头晕啊!!! [打印本页]

作者: 文密    时间: 2012-4-8 19:31
标题: 异常 问题 头晕啊!!!
class FuShuException extends Exception
{
FuShuException()
{
super();
}
FuShuException( String msg)
{
super(msg);
}
}
class Demo
{
int div(int a , int b)throws FuShuException
{
if (b<0)
throw new FuShuException();//手动通过throw关键字抛出一个自定义异常对象"出现了除数为负数"
return a/b;
}
}
class ExceptionDemo3
{
public static void main(String[] args)
{
Demo d = new Demo();
try
{
int x = d.div(4,-1);
System.out.println("x="+x);
}
catch (FuShuException e)
{
System.out.println(e.toString());
System.out.println("除数为负数");
}
System.out.println("over");
}
}
--------------------------------------------------------------------------------



class Demo
{
int div(int a , int b)//throws
{
if(b==0)
throw new ArithmeticException("被零除了");
return a/b;
}
}
class ExceptionDemo4
{
public static void main(String[] args)
{
Demo d = new Demo();
int x = d.div(4,0);
System.out.println("x="+x);
System.out.println("over");


}
}
函数内部抛出异常,但在函数上并没有声明异常,仍然编译通过,并且正常运行。
而如果将红色部分改为Exception("被零除了"); 编译就失败了。
显示:
ExceptionDemo4.java:6: 未报告的异常 java.lang.Exception;必须对其进行捕捉或声明
以便抛出
                        throw new Exception("被零除了");
                        ^
1 错误


这是怎么回事
作者: 未长法    时间: 2012-4-8 20:46
因为ArithmeticException是RuntimeException 的子类。抛出RuntimeException 及其子类,可以不处理。如果出错程序终止,需要对代码进行修改。
作者: 未长法    时间: 2012-4-8 20:51
/异常有两种:
   编译时被检测异常:如果编译时异常没有try 也没有抛出异常,编译失败
   运行时异常(编译时不检测):编译时不不需要处理,编译器也不检查。该异常发生时,建议不处理,让程序停止,需要对代码进行修改。(RuntimeException 及其子类)
作者: 张昊镭    时间: 2012-4-8 21:33
呵呵  这个是很蛋疼  看看我的笔记吧  希望对你有点帮助  

作者: 程旦    时间: 2012-4-8 23:51
运行时异常可以不声明的嘛,老毕不是说的很清楚吗
作者: pray    时间: 2014-4-26 06:20
努力,努力,再努力!!!!!!!!!!!




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