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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 文密 中级黑马   /  2012-4-8 19:31  /  2584 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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 错误


这是怎么回事

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

5 个回复

倒序浏览
因为ArithmeticException是RuntimeException 的子类。抛出RuntimeException 及其子类,可以不处理。如果出错程序终止,需要对代码进行修改。
回复 使用道具 举报
/异常有两种:
   编译时被检测异常:如果编译时异常没有try 也没有抛出异常,编译失败
   运行时异常(编译时不检测):编译时不不需要处理,编译器也不检查。该异常发生时,建议不处理,让程序停止,需要对代码进行修改。(RuntimeException 及其子类)
回复 使用道具 举报
呵呵  这个是很蛋疼  看看我的笔记吧  希望对你有点帮助  
回复 使用道具 举报
程旦 来自手机 中级黑马 2012-4-8 23:51:04
报纸
运行时异常可以不声明的嘛,老毕不是说的很清楚吗
回复 使用道具 举报
努力,努力,再努力!!!!!!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马