java 理解執行個體和類成員(翻譯自Java Tutorials)

來源:互聯網
上載者:User

 原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/30/2796085.html

這個章節,我們主要介紹static關鍵字建立類的欄位和執行個體,而不是講類的執行個體。

 

類變數

從類的藍圖中建立一個對象,每個對象都有自己的變數的唯一拷貝。例如Bicycle類,執行個體變數是cadence, gear, speed。每個Bicycle對象的每個變數都有自己的值,儲存在不同的記憶體位置。

有時,你希望所有對象共用變數。這通過static修飾符可以做到。使用static關鍵字修飾的欄位,稱之為靜態欄位或者類變數。這些變數是通過類關聯的,而不是任何對象。類的每個執行個體都共用每個類變數,每個類變數都儲存在固定位置。每個對象都可以修改類變數的值,但是類變數在沒有建立類執行個體的情況下,也可以操縱。

例子,加入你要建立Bicycle類,並賦值一個序號,第一對象從1開始,每個對象執行個體的ID都是唯一的,同時,你需要一個變數追蹤,至今有多少個Bicycle類已經建立了,你才能知道下一個建立的對象要賦值什麼ID,而這個變數不與其他獨立的對象有關聯,但是它與整個類有關係。所以,我們需要一個類變數,numberOfBicycles,如下:

public class Bicycle{            private int cadence;    private int gear;    private int speed;            // add an instance variable for    // the object ID    private int id;        // add a class variable for the    // number of Bicycle objects instantiated    private static int numberOfBicycles = 0;        ...}

類變數可以通過類名引用,例如:

Bicycle.numberOfBicycles

這種使用方式清晰說明它是類變數。

注意:你也可以通過一個對象執行個體引用static欄位,例如

myBike.numberOfBicycles

but this is discouraged because it does not make it clear that they are class variables.

這種使用方式不不推薦的,因為它不能清晰說明它是一個類變數。

我們可以在Bicycle構造方法中,設定id執行個體變數,自增numberOfBicycles類變數:

public class Bicycle{            private int cadence;    private int gear;    private int speed;    private int id;    private static int numberOfBicycles = 0;            public Bicycle(int startCadence, int startSpeed, int startGear){        gear = startGear;        cadence = startCadence;        speed = startSpeed;        // increment number of Bicycles        // and assign ID number        id = ++numberOfBicycles;    }    // new method to return the ID instance variable    public int getID() {        return id;    }        ...}

 

類方法

java程式語言,支援靜態方法,就像支援靜態變數一樣。靜態方法,它在聲明中有static修飾符,應該使用類名調用,不需要建立任何類的執行個體,例如

ClassName.methodName(args)

注意:你可以通過對象引用靜態方法,例如

instanceName.methodName(args)

但是這種方法不推薦,因為它不能清晰表達它是一個類方法。

一個常見用途是使用static方法訪問static欄位,例如,我們可以在Bicycle類中添加一個static方法訪問static欄位numberOfBicycles。

public static int getNumberOfBicycles() {    return numberOfBicycles;}

不是執行個體和類的變數和方法的組合都是合法的:

  • 執行個體方法可以直接存取執行個體變數和執行個體方法
  • 執行個體方法可以直接存取類變數和類方法
  • 類方法可以直接存取類變數和類方法
  • 類方法不能直接存取執行個體變數和執行個體方法—必須通過對象的引用訪問。同樣,類方法不能使用this關鍵字,因為當前沒有任何執行個體引用。

 

常量

static修飾符和final修飾符組合,可以用於聲明常量。final關鍵字指示欄位的值不能被初始化。

例如,以下的變數聲明聲明一個常量,名字為PI,其值是一個近似的pi(其直徑的圓的周長的比率)

static final double PI = 3.141592653589793;

使用這種方法聲明常量,常量不能重新賦值,如果程式試圖這麼做,編譯器會報錯。按照慣例,長嶺的名字是使用大寫字母拼字,如果名字包含多個單詞,單詞與單詞之間通過底線(_)做分割。

注意:如果一個原生類型或者是一個string聲明為常量,它的值可以在編譯期擷取,編譯器會在代碼中,使用這個常量的做一個替換。這種稱之為編譯時間常量。如果常量在外面的類改變了值(例如,如果立法PI實際為3.975),你需要重新編譯引用到這個常量的任何類。

 

Bicycle類

Bicycle使用了這個章節全部的修飾符,代碼如下:

public class Bicycle{            private int cadence;    private int gear;    private int speed;            private int id;        private static int numberOfBicycles = 0;            public Bicycle(int startCadence,                   int startSpeed,                   int startGear){        gear = startGear;        cadence = startCadence;        speed = startSpeed;        id = ++numberOfBicycles;    }    public int getID() {        return id;    }    public static int getNumberOfBicycles() {        return numberOfBicycles;    }    public int getCadence(){        return cadence;    }            public void setCadence(int newValue){        cadence = newValue;    }            public int getGear(){    return gear;    }            public void setGear(int newValue){        gear = newValue;    }            public int getSpeed(){        return speed;    }            public void applyBrake(int decrement){        speed -= decrement;    }            public void speedUp(int increment){        speed += increment;    }}

 



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.