1. 程式人生 > >小猿圈java之static關鍵字

小猿圈java之static關鍵字

static靜態方法學java的都很熟悉,那static有什麼作用、又是怎麼用的呢?使用過程中應該注意什麼呢?小猿圈加加詳解一下static,對static模糊的朋友看到這篇文章,清晰透徹,下面進入整題。

static方法

static方法一般稱作靜態方法,由於靜態方法不依賴於任何物件就可以進行訪問,因此對於靜態方法來說,是沒有this的,因為它不依附於任何物件,既然都沒有物件,就談不上this了。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變數和非靜態成員方法,因為非靜態成員方法/變數都是必須依賴具體的物件才能夠被呼叫。(static方法就是沒有this的方法。在static方法內部不能呼叫非靜態方法,反過來是可以的)

Static修飾方法:方法可以直接被類名點出

基本作用:方便在沒有建立物件的情況下來進行呼叫(方法/變數)。

2、static變數

static變數也稱作靜態變數,靜態變數和非靜態變數的區別是:靜態變數被所有的物件所共享,在記憶體中只有一個副本,它當且僅當在類初次載入時會被初始化。而非靜態變數是物件所擁有的,在建立物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響。

static成員變數的初始化順序按照定義的順序進行初始化。

static修飾變數:變數可以直接被類名點出,是一個靜態變數 在記憶體中的方法區中 如果常量池中有該變數 那麼有且只有一個

注意:被static所修飾 可以直接通過類名點出 資料存放在方法區 資料是整個專案公用的

3、static程式碼塊:{}

static關鍵字還有一個比較關鍵的作用就是 用來形成靜態程式碼塊以優化程式效能。static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被載入的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。

{}定義在方法中:普通程式碼塊

{}定義在類中:構造塊

{}定義在類中並且被static所修飾:靜態程式碼塊

    執行順序:靜態程式碼塊——構造塊——普通程式碼塊

在我們程式啟動的時候 被static所修飾的會先被建立 而沒有被static所修飾會後載入 被static所修飾 會優於類的建立

static所修飾的變數和方法 只能 被static修飾的方法所呼叫  不能呼叫非static修飾的方法

非static的方法 可以代用 static修飾的方法

面試真題練習:

下面是一道面試當中,出現頻率很高的一道關於static的面試題:

這段程式碼的輸出結果是什麼?

class Base{

    static{

        System.out.println("base static");

        }

    public Base(){

        System.out.println("base constructor");

        }

    }

public class Test extends Base{

    static{

        System.out.println("hello static");

        }

    public Test(){

        System.out.println("hello constructor");

        }

    public static void main(String[] args){

        new Test();

        }

    }

result:

base static

test static

base constructor

test constructor

解析:程式碼塊執行順序:靜態程式碼塊——構造塊——普通程式碼塊,所以在我們程式啟動的時候 被static所修飾的會先被載入, 而沒有被static所修飾會後載入,Test類繼承自Base類,因此會轉去先載入Base類的static塊,再載入Test類中的static塊,然後依照順序載入父類和子類的其他程式碼塊

看完小猿圈寫的這篇文章,是不是感覺賺到了,static寫的一目瞭然,最後面試題也是相當重要的,是static知識點出的,做錯的朋友可以看看解析,希望大家可以通過小編這篇文章,對static好好理解了,想了解其他知識點的朋友,可以看看小猿圈加加