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
對於變量,一旦給值,將不能被修改,可以通過類名進行訪問
對於方法,不可覆蓋,可以通過類名進行直接訪問
好了,今天就先分享這麼多,有什麼不足的地方,歡迎各位大佬指點,咱們下期再見…