public class TestMain {
public static void methodTest(Exception e) {
System.out.println("Exception method called");
}
public static void methodTest(Object e) {
System.out.println("Object method called");
}
public static void methodTest(NullPointerException e) {
System.out.println("NullPointerException method called");
}
public static void main(String args[]) {
methodTest(null);
}
}
输出:NullPointerException方法调用
如果有多个重载方法可以使用给定的参数调用(null
在您的情况下),则编译器将选择最具体的方法。
参见http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5
您的情况methodTest(Exception e)
比更为具体methodTest(Objecte)
,因为Exception是Object的子类。而且methodTest(NullPointerException e)
更加具体。
如果将NullPointerException替换为Exception的另一个子类,则编译器将选择该子类。
另一方面,如果您使用其他方法,例如testMethod(IllegalArgumentExceptione)
编译器将抛出错误,因为它不知道选择哪个方法。
问题内容: 我正在使用Java 7,下面有下面的类。我实现和正确的,但问题是,收益的主要方法,下面又返回两个对象相同的散列码。我可以让更多的眼睛看着这个班级,看看我在这里做错了什么吗? 更新: 我更换了我称之为行方法用我自己的哈希函数:。它返回一个不同的哈希码,这是当两个对象不同时应该执行的操作。是方法打破? 对你的帮助表示感谢! 问题答案: 实际上,您碰巧触发了纯粹的巧合。:) 碰巧是通过相继添
我正在处理使用模拟类的现有测试用例。我重载了一个无参数的方法,这样现在就存在一个方法来获取字符串。例如: 在测试类中,HelloClass被嘲弄。因此,我添加了重载方法,这样我们就有了声明: 然而,当我运行它们时,测试用例失败了。当我将方法设置为私有时,测试用例将再次通过。 是否能够处理添加到中的几个重载方法?
我们有两个班级。 我试图弄清楚函数 是否会被视为或。我尝试使用关键字,它说该方法未被覆盖。但我想知道 关键字是否仅在父类中的函数被编写为函数时才有效,并且在上述情况下是否可以将该函数视为被覆盖。 另外,我想知道重写方法是否总是意味着后期绑定/运行时多态?
问题内容: 在Java中,我们不能覆盖final方法,但是有可能重载吗? 问题答案: 是的,重载最终方法是完全合法的。 例如:
我在一个类中重载了以下2个方法: 当我调用方法testMethod时,它会打印“String”。 当我再添加一个重载方法时: 它抛给我编译器错误:是矛盾的。 当我用null调用方法时,所有这些都会发生 我的问题是: 为什么它打印字符串而不是对象? 为什么添加第三种方法会出现编译错误?
问题内容: 我将某些本机方法重写为常规Java方法。 本机方法有效地静态吗?或者是否曾经有一个隐式的“ this”参数? 谢谢! 问题答案: 就像常规Java方法一样,本机方法可以是非方法。 非本机方法接收引用,而非本机方法则接收对containg类的引用。 根据JNI规范: 本机方法参数 JNI接口指针是本机方法的第一个参数。JNI接口指针的类型为JNIEnv。第二个参数根据本机方法是静态还是静