十九、static關鍵字
阿新 • • 發佈:2021-06-23
1.1、概述
static是靜態修飾符,一般修飾成員。static修飾的成員被多個物件共享,所以會影響每一個物件。被static修飾的成員又叫類成員,不叫物件的成員。
static是修飾成員為靜態,讓例項出來的物件都能共享static靜態成員。
1.2、static特點
- 被static修飾的成員,被所在類的所有物件共享
- 靜態成員可以通過物件呼叫,也可以通過類名呼叫,建議使用類名呼叫。
- 靜態成員隨著類的載入而載入,優先於物件存在
1.3、定義和使用格式
類變數定義
定義格式:
static 資料型別 變數名;
舉例:
static String room;
比如說,同學們來xx學校學習,那麼我們所有同學的學校都是xx學生, 不因每個同學不同而不同。所以,我們可以這樣定義一個靜態變數school,程式碼如下:
public class Student { private String name; private int age; // 類變數,記錄學生學習的學校 public static String school = "xx學校"; public Student(String name, int age){ this.name = name; this.age = age; } // 列印屬性值 public void show() { System.out.println("name=" + name + ", age=" + age + ", shool=" + shool ); } } public class StuDemo { public static void main(String[] args) { Student s1 = new Student("張三", 23); Student s2 = new Student("李四", 24); Student s3 = new Student("王五", 25); Student s4 = new Student("趙六", 26); s1.show(); // Student : name=張三, age=23, shool=xx學校 s2.show(); // Student : name=李四, age=24, shool=xx學校 s3.show(); // Student : name=王五, age=25, shool=xx學校 s4.show(); // Student : name=趙六, age=26, shool=xx學校 } }
靜態方法定義
定義格式:
修飾符 static 返回值型別 方法名(引數列表){
// 執行語句
}
舉例:在Student類中定義靜態方法
public static void showNum() {
System.out.println("num:" + numberOfStudent);
}
變數與方法呼叫
被static修飾的成員可以並且建議通過類名直接訪問。雖然也可以通過物件名訪問靜態成員,原因即多個物件均屬於一個類
格式: // 訪問類變數 類名.類變數名; // 呼叫靜態方法 類名.靜態方法名(引數); 呼叫演示,程式碼如下: public class StuDemo2 { public static void main(String[] args) { // 訪問類變數 System.out.println(Student.numberOfStudent); // 呼叫靜態方法 Student.showNum(); } }
1.4、類內部靜態方法呼叫的注意事項
- 靜態方法直接訪問本類中其他成分時,只能訪問靜態成分(類成分),不能訪問非靜態成分(例項成分)。
- 靜態方法中,不能使用this關鍵字(因為this屬於例項)。
- 反之,非靜態方法可以訪問本類中的靜態和非靜態成分。
1.5、問題:
如果想要在靜態方法中呼叫非靜態成員能不能做到?
- 建立物件呼叫!!!
面向物件中為什麼方法不設定static?
- 因為面向物件共享不合理。而且static 宣告週期長,佔用記憶體
static 使用場景
- 一般用於工具類中,可以通過類名直接呼叫