回覆列表
  • 1 # IT人劉俊明

    作為一名從業多年的程式設計師,同時也出版過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的時候,預設的選擇應該是不用。

  • 2 # 丁哥開講

    是的,在主函式外面定義的變數,如果你要在主函數里面呼叫的話一定要用靜態修飾符,來修飾你的變數。

    這是因為靜態函式,不是透過物件的例項來呼叫的,它是透過類來呼叫的。

    而非靜態變數,是透過類例項來呼叫的。

    這樣看,主函式作為一個靜態函式,如果想呼叫外部定義的變數,那也就是透過類這一級進行呼叫。

    當然啦,如果說你在這個主函式外面定義一個變數,然後又在非靜態函數里面呼叫它,那你就不需要加靜態修飾符,但是這樣子定義的變數是沒有用處的,因為你在這個類裡只要有一個靜態的main函式,就證明這個類是一個有出口的類。

    從理論上講,是可以用這個類作為一個例項化的物件,在其他類中進行呼叫,但是這樣子設計軟體程式的話,就不對啦。

    這會造成你的程式至少有兩個以上的出口。

    這個在程式設計裡面算是個錯誤。

    現在簡單說一下,靜態修飾符的作用。

    靜態修飾符可以用來修飾主函式作為程式的入口。程式載入時,這個主函式也會被載入,不需要例項化,物件來呼叫。

    靜態修飾符也可以修改修飾一般的函式。這種函式直接透過類來進行呼叫。不透過類的例項來呼叫。

    靜態修飾符也可以修飾一段程式碼。這種情況一般用於資料的初始化。比如說一些字典類的資料,需要這麼做。因為程式在啟動的時候需要這些資料,因此這些資料需要在啟動之前載入。

    靜態修飾符也可以修飾一些變數。這些變數可以透過類來直接進行呼叫,可以作為一些共享資料在程式中進行修改和讀取。這種變數在使用的過程中要注意共享的問題。尤其是在多執行緒條件下只允許一個執行緒可以對其進行寫入。

    以上這些,就是靜態修飾符在程式中的一些具體應用例項,靜態修飾符在程式語言中是非常有用的,目前幾乎所有的程式語言都支援靜態修飾符,就連一直不用靜態修飾符的Ruby,現在也支援了靜態修飾符可見這種修飾符的強大。

  • 中秋節和大豐收的關聯?
  • 火箭如果在下賽季開始前沒有拿到他們想要的詹姆斯或者保羅喬治會怎樣?