![](/img/trans.png)
[英]Is it possible to create an instance of an object in Java without calling the constructor?
[英]In Java, Is it possible to create an object without a class and a constructor?
那里!
我是 Java 的新手,我最近偶然發現了構造函數的概念。 我想我理解了這個概念,但是我正在閱讀的書在 arrays 中介紹了對象的概念,我迷路了。
在示例中,本書使用構造函數new
簡單地創建了一個 object。 但問題是本書將它與object 引用變量一起使用,該變量引用了不存在的 class 中的 object。
讓我用代碼寫出來。
Dog [] pets;
pets = new Dog[];
我了解創建了一個名為Dog
的 object,其中包含 arrays []
。
什么時候,以我目前的理解應該是這樣的:
//We have a class named Dog
public class Dog{
//And We have a basic default constructor here
public Dog(){
}
}
//We have another class
public Class2{
//In this class we create a "reference variable"
//to create an object from the above class named Dog.
Dog[] pets;
pets= new Dog[];
}
所以,我不知道這本書是否簡單地消除了名為Dog
的 class 或者是否可以按需創建 object Dog[]
,而無需調用類/構造函數。
如果有人可以向我澄清這個概念,我將不勝感激。
謝謝閱讀!
數組不是 Java 中的 class,即使實例化它使用new
關鍵字,並且沒有構造函數。 盡管如此,讓我們稍微澄清一下語法,因為您的代碼的實際含義存在一些混淆。
將數組想象成一系列串在一起的盒子。 每個盒子或element
都可能包含某物的一個實例。 您需要告訴數組它的所有框都允許包含什么類型,並且您可以通過將該類型的名稱放在方括號之前來做到這一點。 在這種情況下,作者使用了虛構的Dog
類型(即Dog[]
),但它也可以是Integer
、 String
或任何其他類型。 您的代碼創建了一個數組實例,該實例能夠包含Dog
或其后代類型的實例。
聲明Dog[] pets;
要求有一個 class 或名為Dog
的接口。 它以Dog[]
類型聲明變量pets
,這意味着pets
將始終持有null
或對Dog[]
類型數組的引用(或者可能是諸如Chihuahua[]
之類的子類型)。 您的書顯然假設Dog
在其他地方定義,並讓您填寫空白。 (這很正常:書籍通常不會為每個示例提供完整的程序,因為他們不想分散他們向您展示的具體內容。)
賦值pets = new Dog[]
無效:您無法創建一個數組而不說明它有多少元素,無論是使用數字( new Dog[3]
)還是通過顯式列出元素( new Dog[] { null, null, null }
)。
賦值pets = new Dog[3]
要求有一個 class 或名為Dog
的接口,但它不調用任何Dog
的構造函數(因為它不創建Dog
,只有Dog[]
),所以它不關心Dog
是否有無參數構造函數, Dog
是否是具體的 class,是否有任何Dog
的構造函數是可訪問的,或者類似的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.