class Test1{
public static void hello(){
System.out.println("hello");
}
}
public class Demo1 {
public static void main(String[] args) {
Test1 test1 = null;
test1.hello();
((Test1)null).hello();
}
}
输出:
hello
hello
总结
- 上面用两种形式的空指针调用了Test1类的静态方法,且都成功了。说明静态方法不依赖于对象而存在。
- 我的理解是普通方法,必须初始化类的对象成功,才会给方法分配空间,才可以调用方法,而空指针本身就没有初始化类的对象成功,所以无法调用普通方法,
- 而静态方法在JVM加载的时候就已经编译过了,随时可以调用,不需要依赖于对象的创建。
- 相对于静态方法而言,动态方法占的内存资源就少些,因为它是什么时候使用什么时候实例化,也就是说在不使用的时候它是不会占用资源的,相对与静态方法的缺点是它每次使用的时候都要进行实例化,也就是说比较麻烦一些了,方法定义static看具体需求,当调用次数比较多的util类建议用static。