public class CallingStaticMethod {
public static void method() {
System.out.println("I am in method");
}
public static void main(String[] args) {
CallingStaticMethod csm = null;
csm.method();
}
}
Кто-то может объяснить, как статический метод вызывается в вышеупомянутом коде?
Компилятор оптимизировал его просто потому, что наличие экземпляра класса не обязательно. Компилятор в основном заменяет
csm.method();
на
CallingStaticMethod.method();
Это в общем и целом хорошая практика сделать это самостоятельно. Даже средняя IDE предупредила бы о доступе к статическим методам через экземпляр, как минимум Eclipse делает это здесь.
Java позволяет использовать экземпляр класса для вызова статических методов, но не следует путать это разрешение, как если бы метод был вызван в экземпляре, используемом для его вызова.
instance.method ();
совпадает с
Class.method ();