JAVA 學習模塊九: static(靜態)關鍵字

這裏寫圖片描述

1. static 修飾的 變量是所有對象共享的數據

static 修飾的是對象創建之前就存在,可以用。
static 修飾的變量可以直接被類名調用

class deo 
{
    public static void main(String[] args) 
    {   
        person p =  new person();
        p.show("xiao");
        System.out.println(p.country);
        System.out.println(person.country);
    }
}


class person
{
    String name;//成員變量,實例變量
    static String country = "cn";//country 是 所有person 共享的  靜態變量或類變量
    public void show(String name1)
    {
    name = name1;
    System.out.println(name + country); 
    }


}

有些數據不能被共享即不能被 static 修飾

2. static 的特點

  1. static 是一個修飾符,用於修飾成員
  2. static 修飾的成員被所有對象共享
  3. static 優先於對象存在,因爲 static 成員隨着類的加載已經存在了
  4. static 修飾的成員多了一種調用方式,可以直接被類名所調用,類名.靜態成員
  5. static 修飾的數據是共享的數據,對象中的存儲是特有數據。

static 修飾的叫 靜態變量,不在叫成員變量

3.成員變量和靜態變量的區別

1.生命週期不同:成員變量隨着對象的建立而存在,歲這對象的被回收而消失
靜態變量隨着類的加載而存在,隨着類的消失而消失
2.調用方式不同:成員變量只能被對象調用
靜態還可以被類名調用

3.別名不同: 成員變量也稱爲實例變量
靜態變量稱爲類變量
4. 存儲位置不同:
成員變量存儲在堆內存的對象中,所以也叫對象的特有數據
靜態變量存儲在方法區(共享數據區)的靜態區,也叫對象的共享數據。

4.靜態 使用中的注意細節


class person
{
    String name;
    static String country = "cn";
    public static void show() 
    {

    System.out.println(name + country); // 錯誤  name 非靜態
    }


}

/*
靜態使用注意:
1.靜態方法只能訪問靜態成員(非靜態既可以訪問靜態又可以訪問非靜態)
2.靜態方法中不可以使用 this super 關鍵字
3.主函數是靜態的。  所以只能調用靜態方法和靜態變量。 所以調用非靜態時 要先new 一個對象

(靜態前面省略的是類名,非靜態省略的是this)



*/

5. main 函數

class deo 
{

/*
public static void main(String[] args)

特殊之處:
1.格式是固定的
2.被jvm 所識別和調用

public: 因爲權限必須是最大的。
static: 虛擬機調用主函數時不需要對象,直接用主函數所屬類名調用
void: 主函數沒有具體的返回值。
main: 函數名,不是關鍵字,只是一個 jvm 識別的固定的名字
String[] args : 這是主函數的參數列表,是一個數組型的參數,而且元素都是字符串類型

args 即 arguments


*/
    public static void main(String[] args)  //new String[0] 
    {   
//      person p =  new person();
//      p.show("xiao");
        System.out.println(args);//輸出是 [Ljava.lang.String;@15db9742
        System.out.println(args.length);// 輸出是0
    }
}

6.什麼時候用靜態

class deo 
{

/*
1.靜態變量
分析對象中所具備的成員變量的值都是共有的,那麼可以被靜態修飾。
只要是數據在對象中都是不同的,就是對象特有的數據,必須存儲在對象中,是非靜態的。
如果是相同的數據,對象不需要修改,只要使用就行,不需要存儲在對象中,定義成靜態的。



2.靜態函數
函數是否用靜態修飾,就參考一點,就是該函數功能是否訪問到對象中的特有數據。
簡答來說就是: 從遇難代碼看,該功能是否需要訪問非靜態的成員變量,如果需要,那就是非靜態的。



*/
    public static void main(String[] args)  //new String[0] 
    {   
//      person p =  new person();
//      p.show("xiao");
        System.out.println(args);//輸出是 [Ljava.lang.String;@15db9742
        System.out.println(args.length);// 輸出是0
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章