在 Java 中,是否可以创建一个没有 class 和构造函数的对象?
In Java, Is it possible to create an object without a class and a constructor?
有!
我是 Java 的新手,最近偶然发现了构造函数的概念。我想我理解了这个概念,但是我正在阅读的书介绍了数组中的 对象的概念 ,我迷路了。
在示例中,本书只是使用构造函数 new
创建了一个对象。但问题是本书将它与 对象引用变量 一起使用,该变量引用不存在的 class.
中的对象
让我用代码写吧。
Dog [] pets;
pets = new Dog[];
我知道创建了一个名为 Dog
的对象,其中包含数组 []
。
当时,以我目前的理解应该是这样的:
//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,或者是否可以根据需要创建对象 Dog[]
,而无需 class/constructor 调用。
如果有人能向我澄清这个概念,我将不胜感激。
感谢阅读!
数组不是 Java 中的 class,即使实例化它使用 new
关键字,并且没有构造函数。不过,撇开这一点不谈,让我们稍微澄清一下语法,因为您对代码的实际含义有些困惑。
将数组想象成一系列串在一起的盒子。每个框,或 element
,可能包含一个 something 的实例。您需要告诉数组允许其所有框包含什么类型,您可以通过将该类型的名称放在方括号之前来实现。在这种情况下,作者使用了虚构的 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
的任何构造函数是否可访问,或类似的东西。
有!
我是 Java 的新手,最近偶然发现了构造函数的概念。我想我理解了这个概念,但是我正在阅读的书介绍了数组中的 对象的概念 ,我迷路了。
在示例中,本书只是使用构造函数 new
创建了一个对象。但问题是本书将它与 对象引用变量 一起使用,该变量引用不存在的 class.
让我用代码写吧。
Dog [] pets;
pets = new Dog[];
我知道创建了一个名为 Dog
的对象,其中包含数组 []
。
当时,以我目前的理解应该是这样的:
//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,或者是否可以根据需要创建对象 Dog[]
,而无需 class/constructor 调用。
如果有人能向我澄清这个概念,我将不胜感激。
感谢阅读!
数组不是 Java 中的 class,即使实例化它使用 new
关键字,并且没有构造函数。不过,撇开这一点不谈,让我们稍微澄清一下语法,因为您对代码的实际含义有些困惑。
将数组想象成一系列串在一起的盒子。每个框,或 element
,可能包含一个 something 的实例。您需要告诉数组允许其所有框包含什么类型,您可以通过将该类型的名称放在方括号之前来实现。在这种情况下,作者使用了虚构的 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
的任何构造函数是否可访问,或类似的东西。