为什么我们不能在抛出异常的基础上重载一个方法呢?

时间:2010-01-12 15:28:56

标签: java

为什么我们不能重载一个具有相同返回类型,名称,参数但有一些抛出异常的方法?如图所示

      public String getAppletInfo(){  }
      public String getAppletInfo() throws Exception{ }

5 个答案:

答案 0 :(得分:12)

当您在代码中调用getAppletInfo()时,您希望JVM如何选择要调用的重载?单个方法调用中没有语义信息,允许您指定它应该期望的异常。

答案 1 :(得分:5)

根据JLS(Java语言规范),抛出的异常不是方法签名的一部分。因此,您提供的方法定义不会因其签名而有所不同,因此不是有效的Java代码。

JLS Section 8.4.9
如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)都具有相同的名称,但签名不是覆盖等效的,那么方法名称就是过载

方法签名定义如下: Section 8.4.2
如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。

答案 2 :(得分:3)

如果我打电话给myObject.getAppletInfo()哪一个被叫?

答案 3 :(得分:0)

任何方法都可以抛出RuntimeException,它是Exception的子类。因此,添加throws Exception对于编译器选择正确的方法来说还不够明显。

答案 4 :(得分:0)

首先,函数重载的基础是方法签名必须是不同的,包括参数的数量和参数的类型(参见docs)。因此,如果在两种方法中,如果它只是与不同的抛出异常部分不计算在内 函数重载。

重载方法可以抛出它重载的方法抛出/抛出的任何异常,因为它们都是独立的东西。