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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© H._张_♂ 中级黑马   /  2014-4-6 20:35  /  1042 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class T1
  2. {
  3. public void a()
  4. {
  5.   new T2()
  6.   {
  7.    public void b() throws Exception
  8.    {
  9.     throw new Exception("T2方法抛出异常");
  10.    }
  11.   };
  12. }
  13. }
  14. class T2
  15. {
  16. public void b() throws Exception
  17. {
  18.   System.out.println("B的b()方法执行。");
  19.   throw new Exception("T2方法抛出异常");
  20. }
  21. }
复制代码

这个A类中直接内部类,为什么不说需要抛出异常?

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览

1,子类重写父类方法要抛出与父类一致的异常,或者不抛出异常

2,子类重写父类方法所抛出的异常不能超过父类的范畴。。


这样的写法是没有问题的。父类抛出的异常包含所有异常。

  1. class A {  
  2.     public void fun() throws Exception {  
  3.          
  4.     }  
  5. }  
  6. class B extends A {  
  7.     public void fun() throws IOException, RuntimeException {  
  8.          
  9.     }  
  10. }  
复制代码
这样写法是出错的,子类IOException超过了父类的异常范畴

  1. class A {  
  2.     public void fun() throws IOException {  
  3.          
  4.     }  
  5. }  
  6. class B extends A {  
  7.     public void fun() throws IOException, RuntimeException, ArithmeticException {  
  8.          
  9.     }  
  10. }  
复制代码

这样写也是可以的。。可以不抛出异常

  1. class A {
  2. public void fun() throws Exception {

  3. }
  4. }
  5. class B extends A {
  6. public void fun()  {

  7. }
  8. }
复制代码




评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马