在Java中使用 null 调用方法
先决条件: Java中的 null , Java中的静态
你能预测以下程序的输出吗?
在回答之前,请注意在给定的代码中,fun() 是一个静态成员,属于类而不是任何实例。
// Java program to illustrate calling
// static method using Null
public class GFG {
public static void fun()
{
System.out.println("Welcome to GeeksforGeeks!!");
}
public static void main(String[] args)
{
((GFG)null).fun();
}
}
输出:
Welcome to GeeksforGeeks!!
解释:
这个程序看起来好像应该抛出 NullPointerException。但是,main 方法在常量 null 上调用了 greet 方法(fun),您不能在 null 上调用方法。
但是,当您运行该程序时,它会打印“Welcome to GeeksforGeeks!!”。让我们看看如何:
- 理解这个谜题的关键是 GFG.fun 是一个静态方法。
- 虽然在静态方法调用中使用表达式作为限定符是一个坏主意,但这正是该程序所做的。
- 不仅表达式的值所引用的对象的运行时类型在确定调用哪个方法方面没有任何作用,而且对象的身份(如果有的话)也没有任何作用。
- 在这种情况下,没有对象,但这没有区别。评估静态方法调用的限定表达式,但忽略其值。不要求该值非空。