Java中的static方法訪問特點 + static變量特點

學習筆記:僅static訪問特點

目錄
1、static修飾的方法訪問特點
2、static變量的特點

參考文章:Java中的static關鍵字解析

static是一個修飾符,static關鍵字是靜態的意思,可以修飾成員方法,成員變量
static關鍵字的用途:方便在沒有創建對象的情況下來進行調用(方法/變量)

1、static修飾的方法訪問特點

static方法一般稱作靜態方法,由於靜態方法不依賴於任何對象就可以進行訪問,因此對於靜態方法來說,是沒有this的,因爲它不依附於任何對象,既然都沒有對象,就談不上this了。
並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變量和非靜態成員方法,因爲非靜態成員方法/變量都是必須依賴具體的對象才能夠被調用。

static修飾的方法訪問特點

  • 非靜態的成員方法
    能訪問靜態的成員變量、非靜態的成員變量、靜態的成員方法、非靜態的成員方法
  • 靜態的成員方法
    僅能訪問靜態的成員方法、靜態的成員變量
public class Student  {
    //非靜態成員變量
    private String name = "";
    //靜態成員變量
    private static String university = "傳智大學";
    //非靜態成員方法
    public void show(){
    }
    //非靜態成員方法
    public void show2(){
        System.out.println(name);//非靜態成員變量
        System.out.println(university);//靜態成員變量
        show();//非靜態成員方法
        show3();//靜態成員方法
    }
    //靜態成員方法
    public static void show3(){
    }

    //靜態成員方法
    public static void show4(){
//        System.out.println(name);//非靜態成員變量  報錯
        System.out.println(university);//靜態成員變量
//        show();//非靜態成員方法   報錯
        show3();//靜態成員方法
    }
}

2、static變量的特點

static變量也稱作靜態變量,靜態變量和非靜態變量的區別是:靜態變量所有的對象共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。
而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。

static成員變量的初始化順序按照定義的順序進行初始化。static是不允許用來修飾局部變量,無論在靜態方法,還是在非靜態方法中static都不允許用來修飾局部變量

static變量的特點

  • 被類的所有對象共享,這也是我們判斷是否使用靜態關鍵字的條件
  • 可以通過類名調用,當然也可以通過對象名調用
  • 推薦使用類名調用
public class Student  {
    public String name;//姓名
    public int age; //年齡
    public static  String university;//學校
    public static  String address;//地址

    public void show(){
        System.out.println("name="+ name +"," + "age="+ age +"," + "university="+ university +"," +"address="+address);
    }
}
public class ExtendsDemo {
    public static void main(String[] args) {
        Student.university = "傳智大學";
        Student s =  new Student();
        s.name="小揚";
        s.age = 18;
        s.address ="成都";
        s.show();
        System.out.println("------------------");

        Student s1 =  new Student();
        s1.name="小袁";
        s1.age = 18;
        s1.show();
    }
}

在S1對象中,沒有給address賦值,在輸出結果中,S1調用show()地址值也是成都。也說明static修飾成員變量,如果在某個對象中賦值,這個賦值結果被該類的所有對象共享。
一般static修飾成員變量修飾的成員變量,賦值用類名.成員變量名賦值,如Student.university = "傳智大學";

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章