第一次看到在Java中能够经过类实例调用静态方法,固然不推荐这么作,避免出现意想不到的问题,接下来会讲到,可是在C#中经过类实例调用静态方法在编译时就不会经过,这里作下记录。spa
首先咱们来看一个简单的例子说明为什么不能经过类实例调用静态方法,咱们知道未实例化的对象去调用对应方法或者字段时会抛出空指针异常,好比以下:设计
public static void main(String[] args) { Object o = null; System.out.println(o.toString()); }
可是若将其应用到静态方法上则会出现意想不到的问题,好比以下例子:指针
public class Player { public static final String type = "Human"; private int age; public static String getType() { return type; } public int getAge() { return age; } }
public static void main(String[] args) { Player player = null; System.out.println(player.getType()); System.out.println(player.getAge()); }
上述对象并未实例化,可是调用其变量的静态方法却不会抛出异常并能打印出结果,固然答案也很简单,由于静态方法是属于类而非类实例,因此上述调用 player.getType() 本质上确定是调用 Player.getType() 。 code
在Java中经过类实例能够调用静态方法多是在最初设计时所产生的缺陷,固然,这只是我我的的揣测,没有再过多深究,看到竟然编译不出错并且能够正常运行,认为这一点和C#有很大的区别,故此记录总结下。对象