1. 程式人生 > >JAVA初級(六)物件和類(2)類的成員變數,區域性變數.方法

JAVA初級(六)物件和類(2)類的成員變數,區域性變數.方法

本回介紹類的主要組成裡的成員變數中的例項變數,和方法,以及方法內的區域性變數

成員變數

1,什麼是成員變數?
定義在方法外面的變數就是成員變數
成員變數分為例項變數和靜態變數
其中靜態變數下回說,這裡涉及到static關鍵字.下回介紹static關鍵字

例項變數

例項變數是成員變數的一種,它在JAVA裡如何寫的?

public class Phone {
    public double machineId;//例項變數,-->這邊我們給它個名字,機器碼
    public void size(){}
}

這樣寫在方法外面類裡面然後沒有static修飾的變數就是例項變數
寫法很簡單
修飾符 型別 名稱; 就這麼寫。
那麼它怎麼用呢?或者說有什麼用?
例項變數,它為什麼叫例項變數,那是因為它隨著物件的產生(例項化)而產生,消滅而消滅.

Phone phone = new Phone();

這麼一個new的動作就是物件的產生,此時裡面的machineId也隨之生成.
也就是說我們在得到這個手機的同時也能夠得到它的機器碼.當你把這行程式碼刪了,phone這個物件就死了,裡面的例項變數也就死了.
此時我們執行以下語句

public static void main(String[] args) {
        Phone phone = new Phone();
        double machineId = phone.machineId;
        System.out.println(machineId);
    }

結果輸出0.0
從這段程式碼就能認識到.
1,我們如何才能使用例項變數?
要先生成一個物件,然後物件.變數 就能使用了.也就是說它只能被物件呼叫,先new出一個物件, 然後在物件. 名稱,你直接Phone.machineId 會報錯,這就相當於你手機還沒到手呢,你能知道它的機器碼?
2,例項變數會初始化


你發現我沒有給這個機器碼賦值.但它還是輸出了東西.它不會報錯…也就是說在例項化物件的同時,會給例項變數初始化.
如果你想要在獲取物件的同時,例項變數初始化一個值如何做?
直接給這個變數賦值

public class Phone {
    public double machineId = 123456;//直接這樣寫
    public void size(){}
}

或者構造方法賦值

public class Phone {
    public double machineId;
    public Phone(){//用構造方法初始化
    machineId =123456;
    }
}

然後你在執行上面的main方法,它就不會輸出0.0了

到此,想必對成員變數中的例項變數有所瞭解了.

拓展:例項變數存在放堆記憶體,這個記住下.

區域性變數

什麼是區域性變數?

在方法體定義的變數就叫區域性變數.
成員變數在方法體外類以內定義,區域性在方法體內定義.這是最明顯的區別.

那麼區域性變數怎麼用?

區域性變數,它定義在方法體內,也就是說在呼叫這個方法,並執行到定義變數的那一行時,這個區域性變數就出生了.這個方法執行完後.這個區域性變數就銷燬了

public class Phone {
    public double mechineId;
    public double size(){
        System.out.println("size還沒出生");
        double size = 5.5;//size出生了,方法體內定義-->就是區域性變數
        return size;//執行方法了.size死去
    }
}

在size()方法內定義的size就是區域性變數
然後執行以下程式碼

public static void main(String[] args) {
        Phone phone = new Phone();//物件產生了,但區域性變數size還沒有出生,而成員變數machineId已經出生了
        double phoneSize = phone.size();//呼叫size方法,並執行完double size = 5.5;這行,區域性變數size才出生
        System.out.println(phoneSize);
    }

在例項化物件,即new出一個phone物件時,區域性變數size還沒出生.只有在呼叫size()方法並執行完定義size的那一行時,size才出生.
然後執行完方法.即執行完 double size = phone.size();這一行時區域性變數size已經死去.

就好比你拿到這個手機,你不去點選檢視手機資訊你是看不到手機尺寸的。只有去點選後你眼睛喵到那一行才能看得到.然後關閉後又看不到了。就相當於這個尺寸"死了".

到這對於區域性變數應該有所瞭解了吧。
拓展:區域性變數儲存在棧記憶體.現在稍微知道下.

成員變數和區域性變數區別

想必到這,直接讓你去整理,你也能整理出一些他們的區別
1,定義的位置不一樣,成員在方法體外類以內.區域性變數在方法體內
2,生命週期不同.成員變數中的例項變數隨物件產生而產生,消失而消失.
區域性變數隨著呼叫方法並執行完定義變數的那一行而產生,方法執行結束而死去.
3,寫法有點不一樣.成員變數可以用許可權修飾符public這樣的修飾,區域性變數不行
4,儲存位置不一樣,成員變數儲存在堆,區域性變數儲存在棧

拓展,這樣的區域性變數什麼時候死去?

 public double size(){
        System.out.println("size還沒出生");
        if(true){
            double size = 5.5;//size出生了,
        }
        //到這size 已經死了
        return 0;
    }

此時這個size就不是方法執行完死了,而是if執行完後就掛了
為什麼呢?
這邊就涉及到了作用域.這裡不細說作用域。就簡單通俗的說明一下。想了解具體的可以自己去查。
作用域就是一個{ },裡面定義的程式碼在一個作用域執行完後就會死去.所以上面的size就死了.因為已經從{}出來了
所以此時你這樣定義

public double size(){
        System.out.println("size還沒出生");
        double size;//size出生了
        if(true){
            size = 5.5;//size有值了
        }
        //到這size 沒死,還沒從{}跳出來
        return 0;
    }

這樣size就是執行完整個方法才死.因為它還在屬於它的{}中.
到這想必你也知道為什麼成員變數活得比較久了吧

類的方法

方法的基礎已經說過了,具體可瞭解下
JAVA初級(五)方法
方法也是類的一個組成部分.從上面的例子可以看出.類的方法如何定義?

public class Phone {
    public double mechineId;
    public void fun(){//這就是方法
        System.out.println("方法");
    }
}

就這麼寫.在類裡面寫個方法.
那麼如何呼叫?

  public static void main(String[] args) {
        Phone phone = new Phone();
        phone.fun();//呼叫方法
    }

就這麼呼叫。你得先獲取一個物件,然後物件.方法()
就好比你要使用手機的拍照功能.你得先拿到手機.
方法使用就這麼簡單.