calling static method in java [duplicate]

2019-04-05 14:32发布

问题:

Possible Duplicate:
How come invoking a (static) method on a null reference doesn’t throw NullPointerException?

Can any one explain why the output of the following program is "Called"

public class Test4{

  public static void method(){
    System.out.println("Called");
  }

  public static void main(String[] args){
    Test4 t4 = null;
    t4.method();
  }
}

I know we can call static method with class reference , but here I am calling using null reference . please clarify my doubt

回答1:

In the Byte code

Test4 t4 = null;
t4.method();

will be

Test4 t4 = null;
Test4.method();

Compiler would convert the call with the class name for static methods. refer to this question on SO which i myself have asked it.



回答2:

It doesn't matter if the instance is null, because you are calling a static method. Think of it this way.

Every static method is equivalent with a class method whereas a non-static method is equivalent with an instance method.

Therefor it doesn't matter what value the instance takes as long as you are working with static methods or members.



回答3:

Static methods can be called via the classname or an instance. I would try to avoid to call them by an instance (also a lot of tools warn you to do so because of bad practice).