2015-07-03 57 views
0

現在,當我從一個特定的類在Java中創建一個新對象並將其分配給一個變量時,我們稱之爲該變量?什麼是攜帶物體的變量類型?

Class1 new1 = new Class1(); 

問題是關於「new1」,如果它是一個對象或攜帶對象的變量。 同樣,當我們說,

public class Class1 { 
Class2 n1; 
} 
public class Class2{ 
void method(); 
} 

爲n1認爲是一個實例變量或其他類的對象?

如果它是一個對象就是它的寫作前進行,

n1 = new Class2(); 

+0

'new1'和'n1'只是變量。 –

+0

@SotiriosDelimanolis我寧願在第二個例子中調用'n1'類'Class1'的屬性。術語「變量」通常與堆棧連接(即使這並不總是正確的)。 – Turing85

回答

0

當我從一個特定的類在Java中創建一個新對象並將它分配給一個變量時,我們稱之爲該變量?

在一般情況下,我們只是將其稱爲變量。

我們也可以稱之爲初始化變量。但「初始化」只是一個形容詞,反映了你已經分配了一些東西的事實。還有其他形容詞可以應用;例如「實例變量」,「局部變量」,「類變量」以及其中一些常見的同義詞。

問題是關於「new1」,如果它是一個對象或攜帶對象的變量。

這絕對不是一個對象。

是否n1被認爲是一個實例變量或另一個類的對象?

這是一個「實例變量」。它也被稱爲「字段」或「屬性」,但「實例變量」是Java語言規範使用的術語。

如果它是一個對象就是它的寫作n1 = new Class2();

它是不是一個對象之前執行。變量不是對象或原始值。變量將保存一個值,但它不是一個值。

(通常所用的類似的是,一個變量是「槽」或「鴿巢」,可容納的東西。變量是時隙,而不是在槽中的東西。)

的狀態如果它是一個實例變量,變量n1將爲null。如果n1是一個局部變量,那麼Java語言將不會讓您看到狀態是什麼......因爲在明確初始化之前訪問局部變量是非法的。

+0

謝謝,這真的很有幫助 – Badr

0
  • 問題1:它被稱爲參考。 new1包含內存地址,其中Class1類型的新創建對象位於。

  • 問題2:通常情況下,您將其稱爲屬性或字段。這是一個對象而不是原始的事實並不重要。

  • 問題3:未初始化的引用是null,如果它是類屬性。正如EJP指出的那樣,如果引用是局部變量,那麼它是未初始化的。您無法讀取未初始化的局部變量,這會導致編譯錯誤。

一個進一步的評論:在Java中,對象總是存儲在堆內存中。沒有例外。然而,您的本地變量(如第一個示例中的new1)位於堆棧上並引用了堆上的新對象。這就是爲什麼Java是pass-by-value的原因。


其實不是的內存地址,而是一個唯一的ID被引用。 Java隱藏物理內存地址。

+2

_an未初始化的對象爲null_。不,是一個單元**變量**。 –

+0

@SotiriosDelimanolis你是對的。更正了我的答案。 – Turing85

+0

未初始化的引用*爲未初始化的*對於*類成員引用的*默認初始值*爲空。這不是一回事。在這種情況下,'new1'是一個局部變量,正如你自己所說的那樣,並且根本沒有初始值。而你的最後一段是*不是*'爲什麼Java是按值傳遞'的原因。原因很簡單,它缺少方法參數的引用語義,與C++或Pascal不同。 – EJP

相關問題