閱讀898 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java 25天基礎-DAY 06-麵向對象-ststic關鍵字

靜態:static
用法: 是一個修飾符,用於修飾成員(成員變量,成員函數)
當成員被靜態修飾後,就多了一個調用方式,除了可以被對象調用外,還可以直接被類名調用(類名.靜態成員)。

static的特點:
1、隨著類的加載而加載。
也就是說,靜態會隨著類的消失而消失,說明它的生命周期最長。
2、優先於對象存在。
靜態是先存在,對象是後存在的。
3、被所有對象所共享。
4、可以直接被類名所調用。
實例變量和類變量的區別:
1、存放位置,
類變量隨著類的加載而加載,存在與方法區中。
實例變量隨著對象的建立而存在與堆內存中。
2、生命周期。
類變量的生命周期最長,隨著類的消失而消失。
實例變量的生命周期,隨著對象的消失而消失。

靜態的使用注意事項:
1、靜態方法隻能訪問靜態成員(包括方法和變量)
2、非靜態方法即可以訪問靜態成員也可以非靜態成員,
3、靜態方法中不可以定義this,super關鍵字。因為靜態優先於對象存在,所以靜態方法中不可以出現this。
4、主函數是靜態的

靜態有利有弊
利:對對象的共享數據進行單獨空間的存儲,節省內存。沒有必要每個對象中都存儲一份。
可以被類名直接調用。
弊:生命周期過長,
訪問出現局限性(靜態雖好,隻能訪問靜態)。

什麼時候使用靜態?
要從兩方麵下手:
因為靜態修飾的內容有成員變量和函數。
什麼時候定義靜態變量(類變量)呢?
當對象中出現共享數據時。該數據被靜態所修飾。
對象中的特有數據要定義成非靜態,存在於堆內存中。
什麼時候定義靜態函數呢?
當功能內部沒有訪問到非靜態數據,(對象的特有數據)
那麼該功能可以定義城靜態的。

例:
class person
{
String name;//成員變量或實例變量。
static String country="CN";//靜態的成員變量或類變量。
//通過靜態修飾後,不在堆內存中開辟空間,放到共享區。可以被對象和類名所調用
public void show ()
{
System.out.println (name+":::"+country);
}

}

class gjzstatic
{
public static void main(String[] args)
/*主函數是一個特殊的函數,可以被jvm調用作為程序的入口。
主函數的定義
public:代表著該函數的訪問權限是最大的。
static:代表著主函數隨著類的加載就已經存在了。
void: 主函數沒有具體的返回值。
main: 不是關鍵字,但是是一個特殊的單詞,可以被jvm識別。
函數的參數:(String [] arr)函數的參數,參數類型是一個數組,該數組中的元素是字符串,字符串類型的數組。
args:可以隨便定義隻要符合參數命名規範就行。
jvm在調用主函數時,傳入的是new String[0];
*/
{

    System.out.println(person.country);//靜態修飾後,可以使用類名直接訪問。
    person p =new person();
    p.name=("張三豐");//也可以使用對象訪問。
    p.show();
    System.out.println(p.country);//使用對象調用。

    System.out.println(args);//jvm在調用主函數時,傳入的是new String[0];\
    jingtai.test();
}

}

class jingtai
{
/*當功能內部沒有訪問到非靜態數據,(對象的特有數據)
那麼該功能可以定義城靜態的。
*/
String name;
public static void test ()
{
System.out.println("haha");
}
}
clipboard

最後更新:2017-10-13 23:04:29

  上一篇:go  Java 25天基礎-DAY 06-麵向對象-靜態應用---工具類
  下一篇:go  oracle初使用遇到的問題