Java中常用的關鍵字static和final

Java中常用的關鍵字static和final

在我們平時的開發當中,經常會遇見static關鍵字,那麼大家對static的用法,大家知道多少呢?下面我們來一起看一下吧,首先咱們來看《Java編程思想》中的一段話:

​ “static方法就是沒有this的方法.在static方法內部不能調用非靜態方法,反過來是可以的.而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用static方法.這實際上正是static方法的主要用途.”

​ 簡而言之,一句話來描述就是:

​ static方便在沒有創建對象的情況下來進行調用方法或者變量

static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態的static代碼塊

static可以修飾:
1.成員變量(簡稱屬性)
2.方法
3.代碼塊(不能出現在方法內部)
被static修飾的成員變量和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。

只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。

1)static修飾的成員變量

static修飾的變量(屬性)被稱作static變量或者說靜態變量,靜態變量的兩個特徵:

1.靜態變量的數據被本類中所有實例對象共享

2.靜態變量的訪問權只要不是private,都可以直接通過"類名.屬性"進行直接訪問

看字是不是很無聊,來看代碼吧:

1).創建一個demo類

public class StaticDemo{
    //定義了一個靜態的變量phone
    static String phone="小米";
}

2)創建一個static的測試類:

public class StaticDemoTest{
    public static void main(String[] args){
        //直接輸出phone吧
        System.out.println(StaticDemo.phone);//這句話輸出小米
        //使用類名.屬性來直接修改屬性值
        StaticDemo.phone = "vivo";
        System.out.println(StaticDemo.phone);//這時候輸出的則是vivo
        //也可以new來通過實例對象來訪問
        StaticDemo sd = new StaticDemo();
        //下面來通過實例對象輸出StaticDemo的phone變量
        System.out.println(sd.phone);//同樣這句話也輸出vivo
        //修改屬性值
        sd.phone = "華爲";
        //我們再來輸出一下phone
        System.out.println(sd.phone);//這時候我們輸出出來的就是華爲
    }
}

在這裏插入圖片描述

2)static修飾成員方法:

被static修飾的方法稱作靜態方法,和靜態變量一樣,可以直接使用"類名.方法名"來直接調用,可以不創建對象

直接看代碼吧

//這是在本類中,可以直接使用方法名來直接調用
public class StaticDemo{
    public static void Test(){
        System.out.println("測試static修飾的方法");
    }
    public static void main(String[] args){
        Test();
    }
}

下面咱們來創建一個測試類:

public class StaticDemoTest{
    public static void main(String[] args){
        //直接使用類名.方法名是可以直接訪問Test()方法
        StaticDemo.Test();
    }
}

在這裏插入圖片描述

由此可以看出:靜態方法只能訪問被static修飾的成員,靜態方法不能調用非靜態的資源,因此,非靜態資源需要使用對象來調用,但是,靜態方法在加載的時候可能還沒有對象呢

3)static修飾的代碼塊

被static修飾的代碼塊被稱爲靜態代碼快,靜態代碼快隨着類的加載而執行,並且靜態代碼塊只會執行一次

//咱們還使用前面的StaticDemo類,進行測試
public class StaticDemo{
    //靜態的代碼塊
    static{
        System.out.println("靜態代碼塊執行了....");
    }
    //非靜態代碼塊
    {
        System.out.println("非靜態代碼塊執行了....")
    }
    //構造方法
    public StaticDemo(){
        System.out.println("構造方法執行了......");
    }
    public static void main(String[] args){
        new StaticDemo();
    }
}

說到這裏了,咱們來說說他們的執行順序:首先加載出來的是靜態代碼塊,其次是非靜態代碼塊,接着最後加載出來的是構造方法

在這裏插入圖片描述

static的簡單使用就是這麼多了,下面來看看static和他的好兄弟final一塊用是什麼樣子的:

首先咱們必須先了解一下final是什麼?

final翻譯成中文就是最後的,最終的,既然是最後的,那麼肯定是不能被修改的

final可以用於修飾三個地方:類,屬性,方法

1.final修飾的類不能被繼承,簡稱終類

2.final修飾的屬性,必須手動給初始值,並且給定以後不能被修改

3.final修飾的方法可以被繼承,但是不能被覆蓋或者重寫

那麼多static和final在一起是做什麼的呢?

static final用來修飾變量和方法,簡稱全局常量(static和final之間的書寫順序是沒有關係的)

注意:常量的命名規範:字母全部都大寫,用下劃線連接多個單詞,不能用任何方式來引用this或者super

對於變量,一旦給值,將不能被修改,可以通過類名進行訪問

對於方法,不可覆蓋,可以通過類名進行直接訪問

常量*(static和final之間的書寫順序是沒有關係的)

注意:常量的命名規範:字母全部都大寫,用下劃線連接多個單詞,不能用任何方式來引用this或者super

對於變量,一旦給值,將不能被修改,可以通過類名進行訪問

對於方法,不可覆蓋,可以通過類名進行直接訪問

好了,今天就先分享這麼多,有什麼不足的地方,歡迎各位大佬指點,咱們下期再見…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章