Ani*_*wda 25 java null overloading reference nullpointerexception
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:调用NullPointerException方法
Tho*_*ets 38
如果有多个重载方法可能使用给定参数调用(null
在您的情况下),编译器会选择最具体的方法.
见http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5
在你的情况下methodTest(Exception e)
更具体methodTest(Object e)
,因为Exception是Object的子类.而且methodTest(NullPointerException e)
更具体.
如果用另一个Exception子类替换NullPointerException,编译器将选择那个.
另一方面,如果你做一个额外的方法,像testMethod(IllegalArgumentException e)
编译器会抛出一个错误,因为它不知道选择哪一个.