[英]What is the variable type that carry objects?
現在,當我從特定類中用Java創建新對象並將其分配給變量時,我們將該變量稱為什么?
Class1 new1 = new Class1();
問題是關於“ new1”的問題,如果它是對象或帶有對象的變量。 還有,當我們說
public class Class1 {
Class2 n1;
}
public class Class2{
void method();
}
是否將n1視為實例變量或其他類的對象?
如果它是對象,那么在寫入之前要攜帶它,
n1 = new Class2();
?
問題1:它稱為參考。 new1
擁有一個內存地址1 ,新創建的Class1
類型的對象位於該地址中。
問題2:通常,您將其稱為屬性或字段。 在這里,它是對象而不是原始對象這一事實無關緊要。
問題3:如果未初始化的引用是類屬性,則為null
。 但是,如果引用是局部變量,則未初始化 ,如EJP所指出的那樣。 您無法讀取未初始化的局部變量,這將導致編譯錯誤。
進一步說明:在Java中,對象始終存儲在堆內存中。 沒有例外。 但是,您的局部變量(如第一個示例中的new1
)位於堆棧上,並引用堆上的新對象。 這就是Java 傳遞值的原因 。
1實際上,不是引用內存地址,而是引用唯一的ID。 Java隱藏物理內存地址。
當我從特定的類中用Java創建新對象並將其分配給變量時,我們將該變量稱為什么?
在一般情況下,我們僅將其稱為變量。
我們也可以稱它為初始化變量。 但是“已初始化”只是一個形容詞,反映了您已為其分配了某些內容的事實。 還有其他形容詞可能適用。 例如“實例變量”,“局部變量”,“類變量”,並且其中一些具有常見的同義詞。
問題是關於“ new1”的問題,如果它是對象或帶有對象的變量。
絕對不是對象。
是否將
n1
視為實例變量或其他類的對象?
它是一個“實例變量”。 它也被稱為“字段”或“屬性”,但是“實例變量”是Java語言規范使用的術語。
如果它是一個對象,則在編寫
n1 = new Class2();
之前要攜帶的是什么n1 = new Class2();
這不是一個對象。 變量不是對象,也不是原始值。 變量將保存一個值,但不是一個值。
(經常使用的類比是,變量是可以容納某些東西的“插槽”或“鴿子洞”。變量是插槽,而不是插槽中的東西。)
如果變量n1
是實例變量,則其狀態將為null
。 如果n1
是局部變量,則Java語言不會讓您看到狀態是什么,因為在顯式初始化之前訪問局部變量是非法的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.