java中static學習筆記


static

1、可以用來定義靜態的成員變量

2、可以用來定義靜態的函數

3、可以定義靜態代碼塊



1、靜態成員變量語法特點

定義方法:起名Person.java

class Person {

        staticint i;   //int i 前加上static  i 就是靜態成員變量

}


a)、常用的調用成員變量方法,先生成

“類的對象”例如:(1) Person person = new person();

                                                   person.i= 10

class test{

        publicstatic void main (String args []){

                  Personperson = new Person(); //紅色警報 Person person中間不加.

                  person.i= 10;

        }

}


當我們將Person.java中定義爲靜態成員變量時候如上邊1、靜態成員變量


的語法特點)

我們在test中就可以直接調用

class test{

        publicstatic void main (String args []){

                  Person.i= 10

        }

}

注:1、靜態成員變量【可以】使用類名進行直接調用;

2、靜態成員變量同時也可以用對象來調用,即普通調用方法;

P1 是一個person的對象;將p1i成員變量賦值爲10

P1 p2 都是一個引用他們分別指向堆內存當中的一個對象;

P1 對象中i的變量爲10

wKioL1L8Jh2wePIyAAE0B3z0YS0729.jpg

注意

如果i設置爲靜態的成員變量

wKiom1L8JmfQt1AsAAEit4ToBKI244.jpg

此時p1p2使用的i的這個成員變量是同一個,


所有的對象使用的靜態變量的值都是同一份;

wKiom1L8JruiVpPuAABKFF7UAd8124.jpg

wKioL1L8JrXDf_VYAADOAY5FDoM987.jpg

此爲代碼,先編譯Person.java 然後編譯Test.java然後執行Test

wKiom1L8JurARoFoAACD4rTnmKo995.jpg








--------------------------------------------------------------------------------

//定義一個Person的類

class Person {

        staticint i;   //int i 前加上static  i 就是靜態成員變量

}


//定義一個Test的類

class Test{

   public static void main (String args[]){

   Person p1 = new Person();

   Person p2 = new Person();

   Person.i = 10;

   System.out.println("p1的i值爲" + p1.i);

   System.out.println("p2的i的值" +p2.i);

/*

   p1、p2使用的i的這個成員變量是同一個,任何一個成員變量的值得到修改,其他的所有的成員變量的值一同修改

*/

   p1.i=20;

   System.out.println("p1的i值爲" + p1.i);

   System.out.println("p2的i的值" +p2.i);

   }

}

分別編譯執行java Test

wKioL1L8NA7Rn1QzAACBOUKjqDw737.jpg





總結 1、定義靜態變量在變量的類型前面加上static

    2、既可以用對象名調用,又可以用類名調用

    3、所有的對象使用的靜態變量都是同一份,任何一個靜態變量得到修改,其他的靜態變量都會跟着修改







----------------------------------------------------------------------

靜態函數:

class Person{

//static int i ;

   static void fun() {

   System.out.println("我是靜態函數");

   }

}

--------

class Test{

   public static void main (String args[]){

/*

   Person p1 = new Person();

   Person p2 = new Person();

   Person.i = 10;

   System.out.println("p1的i值爲" + p1.i);

   System.out.println("p2的i的值" +p2.i);

   //p1、p2使用的i的這個成員變量是同一個,所以修改p1的成員對象值時,p2也會同時修改

   p1.i=20;

   System.out.println("p1的i值爲" + p1.i);

   System.out.println("p2的i的值" +p2.i);

*/

 Person.fun ();

   }

}




----------------------------------------------------------------------------

class Person3{

   static String name;

   static void talk(){

   System.out.println("I most love the human is " + name);

   }

}

---

class Test3{

   public static void main (String args[]){

   Person3.name = "劉晶晶";

   Person3.talk();

   }

}

1、靜態函數前邊需要加上static

2、靜態函數是可以用類名直接調用的 如上 class Test3 中 Person3.talk(); Person3就是類名

3、在靜態函數中不可以引用非靜態的成員變量 wKioL1L9fGfiVEKrAACTFhwAYHo262.jpg

如果紅線處可以應用非靜態的成員變量,那麼this就無法解釋,因爲沒有所謂的調用這個函數的對象。



--------------------------------------------------------------------------

靜態代碼塊:

class Person3{

   static{

   System.out.println("靜態代碼塊");

   }


   static String name;

   static void talk(){

   System.out.println("I most love the human is " + name);

   }

}

------

class Test3{

   public static void main (String args[]){

   Person3.name = "劉晶晶";

   Person3.talk();

   }

}


如果單一執行 Person3 會產生錯誤:提示找不到主函數

wKiom1L9f4jgZL8QAACioqEW3EQ888.jpg

此靜態代碼塊需要在裝載這個類的時候執行


作爲一個類要執行分爲幾個步驟

步驟:先把這個類裝載到內存當中,裝載到虛擬機裏邊去,裝載完了之後再進行解釋執行


對於靜態代碼塊來說他無需調用,只要這個類裏邊有靜態代碼塊,那麼裝載這個類的時候就會執行這個靜態代碼塊,

靜態代碼塊主要作用就是爲靜態變量name來賦一些初始值





--------------------------

總結static

1、可以定義一個靜態的成員變量 而且他的值只有一份,,,所有的對象使用的靜態成員變量都是同一個。

2、static可以定義靜態函數,靜態函數也是可以用類名進行調用,在靜態函數中不能使用this,即不能在靜態函數中引用非靜態的成員變量。

3、靜態代碼塊的主要作用是爲靜態成員變量賦初始值。





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