簡體   English   中英

是否在函數外聲明了所有實例變量?

[英]Are all instance variables declared outside functions?

我知道變量可以用兩種方式分類: -

第一種方法是根據范圍將它們分類為全局變量和局部變量 當變量可由類的實例的所有方法訪問時,即在整個類中,則它被稱為全局變量,並且當它僅在類的實例中的代碼塊內可訪問時,它是已知的作為局部變量。

第二種方法是將它們分類為類/靜態實例/非靜態變量 類/靜態變量是屬於該類的變量,並且對於類的所有實例僅存在這些變量的一個副本,並且它們由它們共享。 實例變量是屬於類實例的變量,為每個實例創建單獨的副本。

我的講師說實例變量只能在函數外聲明。 為什么會這樣? 局部變量可以不是實例變量嗎?

如果在方法中聲明變量,則它是屬於該方法的局部變量。 方法終止時,它將超出范圍。 使變量屬於實例的唯一方法是直接在類下聲明它 - 即,在任何方法之外。

編輯:

這是@Yeikel建議的樣本:

public class MyClass {

    private static int iAmAStaticMember = 1;

    private int iAmAnInstanceMember;

    public void someMethod() {
        int iAmALocalVariables = 4;
    }
}

如果它們在方法內聲明,則它們僅在方法范圍內。 方法運行后,變量將被銷毀。

public class Something {

    int j = 0; // j lives as long as the class exists

    public doSomething() {
        int i = 0;
        // i is gone after method run
    }
}

只有全局變量可以分為實例和靜態變量。 函數內部的變量是函數的局部變量,既不屬於類也不屬於對象。 實例變量屬於對象,靜態變量屬於類。

在Java中,您有實例,靜態和局部變量。

靜態變量是屬於類本身的類級變量,因此所有類/對象都維護和使用一個副本。 當類加載器加載類時,它們會被激活,而當類被卸載時它們會死掉。

實例變量綁定到類的實例,即對象。 因此,每個創建的對象都有一個變量的副本。 基於訪問修飾符,對其在類外的使用施加限制(通常使其成為私有的並通過getter和setter訪問)。 它們在創建實例時變為活動狀態,並在垃圾收集器發現該對象沒有指向它的有效/使用中引用時死亡。

局部變量是方法級變量,即它們是方法的本地變量。 這些變量是在調用方法時(以靜態方式或通過對象引用)創建的,並在方法執行完成時死亡,或者換句話說,當方法將控制權返回給調用者時。

    class Demo {

    // static variable - can be accessed by any class/object
    public static int num1 = 1;

    // instance variable - accessed by all objects of this class; if made private, can use accessor methods to access it
    public int num2 = 2;

    // num3 is a local variable (method arguments are also local variables)
    public void getSum() {
        int num3 = 3;
        return num2 + num3;
    }

}

希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM