第一次看到在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#有很大的區別,故此記錄總結下。對象