作為一名從業多年的程序員,同時也出版過Java編程書籍,我來回答一下這個問題。
首先,在main方法外部創建對象是不需要添加static修飾符的,看一個具體的實例:
但是,如果在main方法當中要想使用這個對象,那么這個對象就需要使用static修飾符進行修飾了,否則會提示錯誤,看一下具體的實例:
原因是static修飾的main方法是隨著類的加載而加載,要想保證main方法能夠有效使用外部的對象,則這個外部的對象要與main方法保持同步的加載。
static在Java語言當中是一個比較特殊的存在,普通的應用級開發,比如Web開發很少會用到static修飾符,在某些場景下甚至會嚴格限制static的應用,因為會涉及到同步問題。而在研發級開發領域,static卻是比較重要的存在,尤其是在資源管理方面,合理的使用static能夠明顯提升系統的運行效率。
static在Java語言中的基本應用有三種情況,其一是修飾屬性,也稱為“類屬性”,特點是隨著類的加載而加載,同時能夠在對象間共享(同一個類);其二是修飾方法,也稱為“類方法”或者“靜態方法”,特點是可以直接通過類的名字進行訪問;其三是修飾程序塊,特點是隨著類的加載而加載,但是只加載一次,是一種介于方法和構造器之間的一種應用。
另外,內部類一旦使用static修飾之后,會升級為“頂級類”,可以直接在外部創建其對象,內部類中也可以定義static屬性和static方法,這也是比較重要的一個特點。看一個例子:
除了以上應用之外,在進行程序調試的時候,Java程序員為了“方便”也經常使用static修飾符,但是在調試結束之后,通常要把static修飾符去掉。
最后,static修飾符是一柄雙刃劍,用得好能夠明顯提升程序的執行效率,用得不好不僅會加大系統的整體資源消耗,同時也會帶來并發問題和穩定問題,所以static應該慎用。當不確定是否應該使用static的時候,默認的選擇應該是不用。