[英]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.