Java類成員和執行個體成員

來源:互聯網
上載者:User

Java類中的成員(屬性和方法)可以分成兩種,分別是執行個體成員和類成員。

一、什麼是執行個體成員和類成員?

        執行個體成員中是屬於對象的,即屬於對象層級的,它包括執行個體成員屬性(也稱為執行個體成員變數)和執行個體成員方法,只有建立了對象之後才能訪問執行個體成員屬性和執行個體成員方法。

        類成員是屬於類的,類成員包括類成員屬性(也稱為類成員變數)和類成員方法,通過類名可以直接存取類成員變數和調用類成員方法。類成員不需要伴隨對象,也就是說即使沒有建立對象,也能夠引用類成員,類成員也可以通過對象引用。類成員需要用關鍵字static標識,也稱為靜態成員。

二、類變數和執行個體變數的區別:
1、聲明的差別:沒有使用static聲明的為執行個體成員屬性,用static 聲明的為類成員屬性。
例如:
private static x; //類成員變數

private int y; //執行個體成員變數

2、儲存結構的差別:對於執行個體變數而言,每個對象的每個執行個體成員變數都分配了一個儲存單元使得不同對象的執行個體成員變數具有不同的值;而對於類成員變數只分配一個儲存單元,使得所有的對象共同使用一個類成員變數。

3、引用方式的差別: 執行個體成員變數對於對象,通過對象進行訪問;類成員變數屬於類,既可以通過對象,也可以通過類訪問。

三、使用注意事項:
        類方法中,不能訪問或使用執行個體成員。
例如:
private int count; //執行個體成員變數
private static setCount(){
count++;
} //類成員方法
這是錯誤的用法,正確的用法是:
private static int count; //類成員變數
private static setCount(){
count++;

} //類成員方法

四、具體例子
建立一個動物類Animal,簡單的設定了legs和kind兩個屬性,並且添加了count這個類成員來記錄動物的數量。接著建立繼承Animal類的兩個子類Lion和Fish,其中也設定了類成員count來記錄該類動物的數量。詳細代碼如下:

Animal.java

public class Animal{private int legs; //執行個體成員變數private String kind;//執行個體成員變數private static count;//類成員變數//無參數建構函式public Animal(){setLegs(4);count++;}//帶參數建構函式public Animal(int l){setLegs(l);count++;}//設定執行個體對象的腿數目的執行個體成員方法public void setLegs(int l){        if( l!=0 && l!=2 && l!=4){            System.out.println("Wrong number of legs! ");            return;        }        legs = l;}//擷取執行個體對象的腿數目的執行個體成員方法public int getLegs(){return legs;}//設定執行個體對象的類型的執行個體成員方法public void setKind(String k){kind = k;}//擷取執行個體對象的類型的執行個體成員方法public String getKind(){return kind;}//擷取對象數目的類成員方法public static int getCount(){return count;}}  

Lion.java

public class Lion extends Animal{        private static int count;  //設定類成員變數記錄Lion執行個體的數量        public Lion(){        setLegs(4);        setKind("Lion");        count++;    }//擷取Lion的數目的類成員方法    static public int getCount(){return count;    }    }

Fish.java

public class Fish extends Animal{        private static int count;  //設定類成員變數記錄Fish執行個體的數量        public Fish(){        setLegs(0);        setKind("Fish");        count++;    }//擷取Fish的數目的類成員方法        static public int getCount(){return count;    }    }

主類,zoo.java

public class zoo {        public static void main(String arg[]){Animal annimal = new Animal();Fish fish1 = new Fish();Fish fish2 = new Fish();Fish fish3 = new Fish();Fish fish4 = new Fish();Lion lion1 = new Lion();Lion lion2 = new Lion();System.out.println("Total Animal:" + Animal.getCount());System.out.println("Total Fish:" + Fish.getCount());System.out.println("Total Lion:" + Lion.getCount());                      }    }

運行結果:

Total Animal:7

Total Fish:4

Total Lion:2

五、總結

        執行個體成員是伴隨著對象而存在的,而類成員是伴隨類而存在的。可以不需要對象就可以直接使用類成員,因為類一直存在在那裡,但是執行個體成員就不行。如果在類方法中使用了執行個體成員。那麼Java在編譯時間就會報錯。    而執行個體對象是可以訪問類成員的,但是要注意,當改變類成員的資料時,所有使用到這個類成員的對象都會受到影響。就拿前面的例子說,如果你跑到動物園的管理室去改動物的數量記錄時,後面的人都會看到這項修改。相反的,對於執行個體成員來說是每個對象各自擁有的,例如legs屬性,你修改了某個對象的legs屬性值,不會影響到其他對象的legs屬性值。就像動物園中某隻動物斷了一隻腳,其他動物不會受到影響。

參考《JAVA SE6 全方位學習》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.