類例項呼叫靜態方法(Java)
阿新 • • 發佈:2020-04-11
前言
第一次看到在Java中可以通過類例項呼叫靜態方法,當然不推薦這麼做,避免出現意想不到的問題,接下來會講到,但是在C#中通過類例項呼叫靜態方法在編譯時就不會通過,這裡做下記錄。
類例項呼叫靜態方法
首先我們來看一個簡單的例子說明為何不能通過類例項呼叫靜態方法,我們知道未例項化的物件去呼叫對應方法或者欄位時會丟擲空指標異常,比如如下:
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() 。
總結
在Java中通過類例項可以呼叫靜態方法可能是在最初設計時所產生的缺陷,當然,這只是我個人的揣測,沒有再過多深究,看到居然編譯不出錯而且可以正常執行,認為這一點和C#有很大的區別,故此記錄總結