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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Yaphets 中级黑马   /  2013-12-28 12:57  /  2552 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

throws 和throw及Throwable 之间的区别是什么? 以及怎么样自定义异常?

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

4 个回复

倒序浏览
首先Throwable 是一个异常体系的超类,throws和throw都是用于抛出异常的关键字,
异常体系有一个特点,就是异常类和异常对象都需要被抛出
他们都具备可抛性,这个可抛性是throwable这个体系中的独有特点
这个体系中的类和对象需要throws和throw这两个关键字进行操作

throws和throw的用法:
throws使用在函数上
throw使用在函数内
throws后面跟的是异常类。可以跟多个,用逗号隔开
throw后面跟的是异常对象


自定义异常之前首先要考虑这样一个问题:
既然java能对常见问题进行对象封装,我们能不能对本项目中出现的特有问题进行特有对象封装?
答案必须是肯定的。
首先自定义一个特有异常类去继承Exception
但是要注意这里面有个及其特殊的情况不能继承Exceprion而要继承RuntimeExceprion
这个情况是自定义异常时,如果该异常的发生,无法再继续进行运算的话,就需要让自定义的异常类继承RuntimeException,对于“怎样算是无法继续进行运算情况”我自己的理解就是,比如你是程序员,对方是调用者,作为程序员,出现某一种特殊问题时,你想要强制调用者去修改代码,而不是抛来抛去,这时后就继承RuntimeException。在书写格式上作为RuntimeException的子类如果在函数内抛出了,函数上不用声明。
//下面上例子
  1. class FuShuException extends Exception
  2. {
  3.         FuShuException(String msg)
  4.         {
  5.                 super(msg);
  6.         }
  7. }

  8. class Demo
  9. {                  
  10.                  
  11.         int div(int a,int b)throws FuShuException
  12.         {
  13.                 if(b<0)
  14.                         throw new FuShuException("/负数");
  15.                 return a/b;                          
  16.         }                          
  17.                                   
  18. }
  19. class Hello
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Demo d = new Demo();
  24.                 try
  25.                 {
  26.                         int x = d.div(4,-1);
  27.                         System.out.println("x="+x);
  28.                 }
  29.                 catch (FuShuException e)
  30.                 {
  31.                         System.out.println(e.toString());
  32.                                                                                        
  33.                         System.out.println("!除数为负数了");
  34.                 }
  35.                 System.out.println("over");
  36.         }
  37. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
//补充一点基于老毕视频整理的关于异常的总结,你结合着看
/*
异常的总结:
*/
异常是什么?是对问题的描述,将问题进行对象的封装。
异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性。
                                也就是说可以被throw和throws关键字所操作。
                                只有异常体系具备这个特点。
throw和throws的用法:
throw定义在函数上,用于抛出异常对象,
throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。

当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,否则编译失败。
注意:RuntimeException除外,也就是说,如果函数内抛出的是RuntimeException异常,函数上可以不用声明。

如果函数声明了异常,调用者需要进行处理。处理方式可以throws可以try。

异常有两种:
编译时被检测异常(该异常在编译时,如果没有处理,那么编译失败。该异常被标示,代表可以被处理。)
运行时异常(编译时不检测)(在编译时,不需要处理,编译器不检查。该异常发生,建议不处理,让程序停止,需要对代码进行修正。)

异常处理语句:
try
{
        需要被检测的代码
}
catch ()
{
        处理异常的代码
}
finally
{
        一定会执行的代码
}
注意:finally中定义的通常是关闭资源代码,因为资源必须被释放。

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1 mark

查看全部评分

回复 使用道具 举报
DOOR 发表于 2013-12-28 14:17
首先Throwable 是一个异常体系的超类,throws和throw都是用于抛出异常的关键字,
异常体系有一个特点,就是 ...

哥们这种样式的代码是怎么粘的
回复 使用道具 举报
工善器 发表于 2013-12-29 11:31
哥们这种样式的代码是怎么粘的

在输入框的头像左边有<>尖括号,你点完它就会弹出来一个输入框,把代码贴进去就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马