java类的方法重写时规定子类方法重写不能抛出超越父类方法定义的异常类的范围这个时没错的但是对于抽象方法或者接口竟然编译运行通过:
举例如下:
import java.io.IOException;class MyException extends Exception {}interface Inf1 {
void test1() throws MyException;
}class A implements Inf1 {
public void test1() throws java.lang.NumberFormatException {
// public void test1() throws IOException {
NumberFormatException e = new NumberFormatException("测试");
throw e ; }
}如上NumberFormatException 和 MyException时没有继承体系的,但是该方法编印和运行都正确
但是大家看注释的那一行,如果抛出IOException 则编译出错IOException  未已检测异常
NumberFormatException 和MyException为未检测异常有人对异常机制内部研究过的来解释一下

解决方案 »

  1.   

    NumberFormatException为RuntimeException,所以编译不会有错误,至于运行不报错,应该是针对的父类而不是接口(继承而不是实现) IOException 是Exception的子类,不属于运行期异常,所以编译出错个人理解  大师们帮解释下
      

  2.   

    throws java.lang.NumberFormatException 属于声明一个运行时异常。由运行时异常无需声明,所以编译器在编译时会忽略这句。
      

  3.   

    interface Inf1 {
    void test1() throws MyException;
    }修改为
    abstract class Inf1{
          abstract void test1() throws MyException;}也是一样的的了
      

  4.   

    Dan1980() ( ) 信誉:98    Blog   加为好友  2007-4-6 15:51:59  得分: 0  
     
     
       
    throws java.lang.NumberFormatException 属于声明一个运行时异常。由运行时异常无需声明,所以编译器在编译时会忽略这句。  
     
    ===================================================================================是正确的答案RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。 java.lang.Object
      java.lang.Throwable
          java.lang.Exception
              java.lang.RuntimeException
                  java.lang.IllegalArgumentException
                      java.lang.NumberFormatException
      

  5.   

    interface   Inf1   { 
    void   test1()   throws   IOException; 
    }  class   A   implements   Inf1   { 
    public   void   test1()   throws   MyException   { 
    // public   void   test1()   throws   IOException   { 
    NumberFormatException   e   =   new   NumberFormatException( "测试 "); 
    throw   e   ;  } 


    class   MyException   extends   IOException     { } 这样写就可以通过