1. 程式人生 > >Java中的靜態變數和靜態函式

Java中的靜態變數和靜態函式

Java中的靜態變數和靜態函式

靜態變數: 

  在JAVA類在宣告的時候,其實並沒有申請和產生記憶體空間,就如同我們的一個切實可行的想法,但其實並沒有去實施這個想法。而類只有在用這種資料型別建立一個類的物件的時候,才能在記憶體中申請和產生類大小的記憶體空間,這一塊記憶體空間是用來存放成員變數和成員函式的備份。所以在類宣告的時候,是不可以對成員變數進行初始化的,只有用類建立的物件時,才能通過物件對變數初始化SO,便產生的靜態變數!!!它對所有的類物件都是很公共的,對每一個類的物件都具有相同的值。靜態變數的關鍵字是static,它的語法是:

 

Static<

資料型別><靜態變數名>=<初始化靜態變數>;

 

靜態變數在宣告的時候就同時初始化,並且只能初始化一次(即使建立多個物件,初始化多次,只保留最最後一次的初始化值),它有自己的變數作用域,但具有全域性的生命週期,可以隨時被呼叫。它宣告的時候記憶體中就從開始一直保留一份值。在類的物件沒有被建立之前可以使用類名調靜態成員變數,它的語法是:

<類名>.<靜態成員變數>;

 

 靜態函式:

  既然有了靜態變數那就會有靜態函式,靜態函式只有訪問靜態變數,其它非靜態的函式是不被允許的,但在靜態成員函式中可以宣告它自身的變數,它也是一個函式也具有其它函式的特性

!靜態函式的宣告和靜態變數的宣告所差無幾:

 

Static<資料型別><靜態函式名>(變量表);

 

和靜態變數一樣,靜態函式在宣告的時候就在記憶體中存在(即使沒有建立物件這和其它的非靜態函式是不一樣的),也具有全域性的生命週期。

 

下面給出一個靜態函式和靜態變數的例子:

import java.io.*;   //匯入io

public classTest_Static 

{

 int iNum1;

 static intiNum2;

 Test_Static(int

iNum1,int iNum2)

 {

 this.iNum1=iNum1;

 this.iNum2=iNum2;

 this.iNum1++;

 this.iNum2++;

 }

 public voidDisplay1(String str)

 {

 System.out.println(str+".iNum1="+iNum1); 

 }

 //靜態函式只能訪問靜態變數

 public staticvoidDisplay2(String str)

 {

 System.out.println(str+".iNum2="+iNum2);

 }

 public staticvoidmain(String[] args)

 {

 Test_Static Obj1=new Test_Static(1,2);

 Test_Static Obj2=new Test_Static(10,20);

 Test_Static Obj3=new Test_Static(40,50);

 

 Obj2.Display1("Obj2"); //輸出:iNum1=11

 Obj2.Display2("Obj2"); //輸出:iNum2=51

 

 Obj1.Display1("Obj1"); //輸出:iNum1=2

 Obj1.Display2("Obj1"); //輸出:iNum2=51

 

 Obj3.Display1("Obj3"); //輸出:iNum1=41

 Obj3.Display2("Obj3"); //輸出:iNum2=51(最後一次NUM2初始化為50,所以所有的objectobject1——object3)所屬的NUM2全變成了51.但是各自的NUM1還是按照各自初始化的值做了++運算。)

 }

}