1. 程式人生 > 其它 >十九、static關鍵字

十九、static關鍵字

1.1、概述

static是靜態修飾符,一般修飾成員。static修飾的成員被多個物件共享,所以會影響每一個物件。被static修飾的成員又叫類成員,不叫物件的成員。

static是修飾成員為靜態,讓例項出來的物件都能共享static靜態成員。

1.2、static特點

  1. 被static修飾的成員,被所在類的所有物件共享
  2. 靜態成員可以通過物件呼叫,也可以通過類名呼叫,建議使用類名呼叫。
  3. 靜態成員隨著類的載入而載入,優先於物件存在

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 使用場景

  • 一般用於工具類中,可以通過類名直接呼叫