28-關鍵字:static
static:靜態的
1.可以用來修飾的結構:主要用來修飾類的內部結構
>屬性、方法、程式碼塊、內部類
2.static修飾屬性:靜態變數(或類變數)
2.1 屬性,是否使用static修飾,又分為:靜態屬性 vs 非靜態屬性(例項變數)
* 例項變數:我們建立了類的多個物件,每個物件都獨立的擁一套類中的非靜態屬性。當修改其中一個物件中的非靜態屬性時,不會導致其他物件中同樣的屬性值的修改。
* 靜態變數:我們建立了類的多個物件,多個物件共享同一個靜態變數。當通過某一個物件修改靜態變數時,會導致其他物件呼叫此靜態變數時,是修改過了的。
2.2 static修飾屬性的其他說明:
* ① 靜態變數隨著類的載入而載入。可以通過"類.靜態變數"的方式進行呼叫
* ② 靜態變數的載入要早於物件的建立。
* ③ 由於類只會載入一次,則靜態變數在記憶體中也只會存在一份:存在方法區的靜態域中。
* ④ 類變數 例項變數
* 類 yes no
* 物件 yes yes
2.3 靜態屬性舉例:System.out; Math.PI;
3.靜態變數和例項變數記憶體解析:
4.static修飾方法:靜態方法、類方法
① 隨著類的載入而載入,可以通過"類.靜態方法"的方式進行呼叫
② 靜態方法 非靜態方法
類 yes no
物件 yes yes
③ 靜態方法中,只能呼叫靜態的方法或屬性
非靜態方法中,既可以呼叫非靜態的方法或屬性,也可以呼叫靜態的方法或屬性
5. static的注意點:
5.1 在靜態的方法內,不能使用this關鍵字、super關鍵字
5.2 關於靜態屬性和靜態方法的使用,大家都從生命週期的角度去理解。
6.如何判定屬性和方法應該使用static關鍵字:
6.1 關於屬性
> 屬性是可以被多個物件所共享的,不會隨著物件的不同而不同的。
> 類中的常量也常常宣告為static
6.2 關於方法
> 操作靜態屬性的方法,通常設定為static的
> 工具類中的方法,習慣上宣告為static的。 比如:Math、Arrays、Collections
7.使用舉例:
1 //舉例一:Arrays、Math、Collections等工具類
2 //舉例二:單例模式
3 //舉例三:
4 class Circle{
5 private double radius;
6 private int id;//自動賦值
7
8 public Circle(){
9 id = init++;
10 total++;
11 }
12
13 public Circle(double radius){
14 this();
15 // id = init++;
16 // total++;
17 this.radius = radius;
18 }
19
20 private static int total;//記錄建立的圓的個數
21 private static int init = 1001;//static宣告的屬性被所物件所共享
22
23 public double findArea(){
24 return 3.14 * radius * radius;
25 }
26
27 public double getRadius() {
28 return radius;
29 }
30
31 public void setRadius(double radius) {
32 this.radius = radius;
33 }
34
35 public int getId() {
36 return id;
37 }
38
39 public static int getTotal() {
40 return total;
41 }
42 }