static關鍵字

Static關鍵字概述

static(靜態(tài))關鍵字可以用于修飾變量、方法和代碼塊。我認為static關鍵字的主要用途是:方便程序在不創(chuàng)建對象的情況下調用相應的變量或者方法。被static修飾的變量或者方法可以簡單地通過應用類名來進行調用,無需創(chuàng)建相應的對象。

注意,Java語法規(guī)定,static不允許修飾局部變量

1、static變量

static變量即靜態(tài)變量,被所有對象所共享,在內存中只有一個副本,當且僅當類被加載時初始化一次。
舉個例子:

        class StaticTest{
            static int i = 47;
        }
        
        StaticTest st1 = new StaticTest();
        StaticTest st2 = new StaticTest();
        System.out.println(st1.i  + " " + st2.i)

        StaticTest.i++; // 不用新建對象,直接調用static變量
        System.out.println(st1.i  + " " + st2.i)        

在這里,StaticTest內存在一個靜態(tài)變量i,在StaticTest類被加載時,i會初始化為47。新建兩個StaticTest變量st1和st2,輸出st1和st2的i的值,都為47。經過StaticTest.i++后,再輸出st1和st2的i的值,都變成了48。即靜態(tài)變量被這兩個對象共享,且只有一個副本。

如果一個類既有static變量,又有非static變量。那么在初始化時,先進行static變量的初始化,再進行普通變量的初始化,最后執(zhí)行該類的構造函數(shù)。具體例子請查看“初始化和清除”一章。

2、static方法

static方法意味著“一個特定的方法沒有this,我們不可以從一個static方法內部發(fā)出對非static方法的調用”,因為非static的變量和方法都需要通過實際具體的對象進行調用,而static方法沒有this,不依附于任何對象。
即:非static的方法可以調用static的方法,但是static方法不能調用非static的方法。

因此,如果說想在不創(chuàng)建對象的情況下調用某個方法,就可以將這個方法設置為static。
最常見的static方法即為main方法(public static void main)。由于程序在執(zhí)行main方法之前沒有任何對象,只能通過類名來調用,因此main方法必須是static的。

3、static代碼塊

static方法塊只會在類初次被加載時,按順序執(zhí)行一次。巧妙利用static方法塊,可以在一定程度上減少內存的使用,優(yōu)化程序性能。
我們來看一個例子:

public class StaticTest {
    static Date a;
    static Date b;
    static{
        a = new Date(2008);
        b = new Date(2017);
    }

    boolean compare1(Date birthDate){
        if(birthDate.compareTo(a) >= 0 &&  birthDate.compareTo(b) < 0)
            return true;
        return false;
    }

    boolean compare2(Date birthDate){
        Date low = new Date(2008);
        Date high = new Date(2010);
        if(birthDate.compareTo(a) >= 0 &&  birthDate.compareTo(b) < 0)
            return true;
        return false;
    }
}

我們希望實現(xiàn)輸入出生年月日,判斷是否在2008--2017年內出生。
按照compare2方法,每次輸入一個人的出生年月,都需要新建兩個Date對象,分別代表下界2008和上界2017,然后再進行比較。
如果我們先在StaticTest類中定義兩個static對象,同時通過static代碼塊在類初次被加載時對他們進行初始化為下界和上界。這樣在輸入數(shù)據(jù)進行比較compare1時,就不需要每次都新創(chuàng)建兩個Date對象,優(yōu)化了程序的性能。

因此,我們可以將一些只需要初始化一次的初始化操作都放在static代碼塊中進行。

具體的一些代碼和面試題,可以參考:Java中的static關鍵字解析

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 文章大綱:1.為什么static會有這樣的效果?2.static的使用3.static誤區(qū)4.static面試題 ...
    檸檬烏冬面閱讀 5,984評論 3 43
  • Java中的static關鍵字解析 本文轉子博客園,單擊此處閱讀原文 static關鍵字是很多朋友在編寫代碼和閱讀...
    簡單應用閱讀 611評論 1 7
  • 作者:海子原文地址:http://www.cnblogs.com/dolphin0520/ static關鍵字是很...
    IT程序獅閱讀 1,309評論 0 16
  • 風不知所起,等風也等你
    未央姝閱讀 155評論 0 0
  • 暑假以來,沒有睡好過。心態(tài)不似以往,異常倦怠。 大一很實在的結束了,用實在這個詞,不是指多充實,而是指心里對這一年...
    是我的海閱讀 413評論 0 1

友情鏈接更多精彩內容