Java基礎——static修飾符
阿新 • • 發佈:2020-07-23
static
static
在多種計算機語言在常有用到
static
在java語言中作為修飾符也有著重要的地位
引入
static
修飾屬性,可生成靜態屬性static
修飾方法,可生成靜態方法static
修飾程式碼塊,可生成靜態程式碼塊static
修飾類,可生成靜態類
靜態屬性
//許可權修飾符 static 資料型別 名稱;
public static int num;
各個物件資料進行溝通,實現資料的共享
特點
static
宣告的屬性為類屬性- 建立物件時,不產生
static
屬性的拷貝 - 類所有例項共享一個
static
屬性 - 類裝載時,只分配一塊儲存空間,所以類的物件進行操作
- 靜態屬性值一旦改變,所有類的物件均共享改變
訪問方式
由特點可知:
- 靜態屬性不屬於任何例項,屬於類物件
- 所以該類的例項都可進行操作靜態屬性
- 類名.公有靜態屬性名
- 物件名.公有靜態屬性名
//Demo為含有公有靜態屬性num的類
Demo d = new Demo();
//第一種方法
Demo.num = 1;
//第二種方法
d.num = 2;
靜態方法
//許可權修飾符 static 返回值型別 方法名(引數){
// 方法體;
//}
private static int num = 1;
public static int getNum(){
return num;
}
java的三大特性之一:封裝
為了體現java的特性,所有類的屬性一般設為私有(private
為了訪問私有的靜態成員,需要靜態方法來實現該功能。
特點
- 不呼叫不執行。
- static方法獨立於任何例項,因此static方法必須被實現,而不能是抽象的(abstract)
訪問方式
- 類名.公有靜態方法名(引數);
- 物件名.公有靜態方法名(引數);
//Demo為含有私有靜態屬性num、公有靜態方法getNum的類
Demo d = new Demo();
//第一種方法,用的最多
Demo.getNum();
//第二種方法
d.getNum();
使用規則
- 在靜態方法中,只能直接呼叫其他
static
型別的方法 - 在靜態方法中,只能直接訪問
static
型別的屬性 - 在靜態方法中,不能使用
this
super
靜態程式碼塊
靜態程式碼塊主要是初始化類中的靜態變數。
static{
//程式碼塊
}
特點
僅在類被載入時執行一次。
繼承順序
//父類
public class Parent{
static{
//程式碼塊1
}
Parent(){
//程式碼2
}
}
//子類
public class Son extends Parent{
static{
//程式碼塊3
}
Son(){
//程式碼4
}
}
//執行順序
//程式碼1
//程式碼3
//程式碼2
//程式碼4
當一個類繼承父類,父類和該類中有靜態程式碼塊
在該類載入時,程式碼的執行順序為:
- 父類的靜態程式碼塊
- 子類的靜態程式碼塊
- 父類的構造方法
- 子類的構造方法
靜態與非靜態順序
- 靜態屬性/靜態程式碼塊
- 非靜態屬性/非靜態程式碼塊
- 構造方法
靜態類
普通類不允許宣告為靜態,內部類可以
宣告為靜態的內部類可以直接作為一個普通類來使用,而不需例項化一個外部類。
final
final和static一起使用,修飾成員變數和方法,可作為全域性常量
-
static final 常量,一旦賦值不可修改,可通過類名訪問
-
static final 方法, 不可覆蓋,可通過類名訪問