1. 程式人生 > >static關鍵字深入理解

static關鍵字深入理解

本部落格記錄只為了個人學習(我記得這篇很早都寫了,但是可能當時可能有其他的原因,沒釋出吧)

1、static變數

按照是否靜態的對類成員變數進行分類可分兩種:一種是被static修飾的變數,叫靜態變數或類變數;另一種是沒有被static修飾的變數,叫例項變數。

兩者的區別是:
a).語法上的區別:

前邊加static的是靜態變數,不加static的是例項變數

b).作用的區別:

VM載入類的時候,會給static分配一個地址,可以通過類名直接訪問 非static:每建立一個例項,就給他分配一次記憶體

c).靜態的好處:
實現資源共享
訪問資料比較方便

2、靜態方法

靜態方法的好處就是不用生成類的例項就能直接呼叫,只要通過類名就可以訪問,不需要耗費資源反覆建立物件,因為在程式第一次載入的時候就已經在記憶體中了,直到程式結束該記憶體才會釋放。如果不是static修飾的成員在使用完之後該記憶體就會被回收,所以說static要慎用,根據實際情況而定

3.static修飾類

一般靜態內部類可以用static修飾(java內部類分為四種:常規內部類、靜態內部類、區域性內部類、匿名內部類)。只能訪問外部類的static成員,不能直接訪問外部類的例項變數與例項方法。

4、static程式碼塊

static程式碼塊也叫靜態程式碼塊,是在類中獨立於類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內,JVM載入類時會執行這些靜態的程式碼塊,如果static程式碼塊有多個,JVM將按照它們在類中出現的先後順序依次執行它們,每個程式碼塊只會被執行一次,所以說static塊可以用來優化程式效能。
static方法塊和static方法的區別:
靜態程式碼塊是自動執行的;

靜態方法是被呼叫的時候才執行的.

靜態方法:如果我們在程式編寫的時候需要一個不例項化物件就可以呼叫的方法,我們就可以使用靜態方法,具體實現是在方法前面加上static,如下:

public static void method(){}

在使用靜態方法的時候需要注意一下幾個方面:

在靜態方法裡只能直接呼叫同類中其他的靜態成員(包括變數和方法),而不能直接訪問類中的非靜態成員。這是因為,對於非靜態的方法和變數,需要先建立類的例項物件後才可使用,而靜態方法在使用前不用建立任何物件。(備註:靜態變數是屬於整個類的變數而不是屬於某個物件的)

靜態方法不能以任何方式引用this
super關鍵字,因為靜態方法在使用前不用建立任何例項物件,當靜態方法呼叫時,this所引用的物件根本沒有產生。

--------------------------------華麗的分界線(面試)------------------------------------