1. 程式人生 > 實用技巧 >28-關鍵字:static

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 }