1. 程式人生 > >JAVA中的變數----例項變數和類變數

JAVA中的變數----例項變數和類變數

java中的變數分為2種:一種是成員變數,一種是區域性變數。

成員變數是在類內定義的變數,成員變數有分為兩種,
如果是用static修飾的就是靜態變數或者叫類變數;沒有被static修飾就是非靜態變數或者叫例項變數。

區域性變數包括3種:
方法的形參,通過方法的呼叫進行賦值,並隨著方法的結束而結束;
方法內的區域性變數,必須在方法內對其進行顯式的初始化,隨著方法的結束而結束;
程式碼塊內的區域性變數,隨著的初始化完成後開始生效,隨著程式碼塊的結束而結束。

例項變數和類變數的引用次序
例項變數的引用遵循前向引用,類變數也遵循這樣的前向引用。如下面的例子是錯誤的引用。

public
class test { int a=b; int b=3; static int c=d; static int d=0; }

但是例項變數引用類變數的時候可以不遵守前向引用原則,如下面的例子是正確的。

public class test {
    int a=d;
    static int d=0;
    }

例項變數和類變數的屬性
類變數只需要一次開闢空間,但是例項變數每建立一個例項就是為例項分配一個記憶體空間,這就決定了例項變數屬於物件,類變數屬於類。修改一個物件的例項變數的值不會影響另一個物件的例項變數的值,但是修改了類變數的值就會影響所有的物件的這個類變數的值。如下面的例子所示。

public class student {
  int age;
  static int sex;
}

public class test {
    public static void main(String[] args) {
        student.sex=99;

        student s1=new student();
        s1.age=11;
        System.out.println(s1.age+"\t"+s1.sex);
        s1.sex=88;

        student s2=new student();
        s2.age=100
; System.out.println(s2.age+"\t"+s2.sex); } }

上面的例子還表明了,類變數可以直接通過類的進行賦值,成例項變數必須通過物件進行賦值;此外,修改了一個物件中的類變數的值,另一個物件在呼叫這個類變數的時候會按照修改後的值進行顯示。
下圖展示了類變數和例項變數在記憶體中的狀態。(盜圖)
這裡寫圖片描述