在 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[]),但它也可以是 IntegerString 或任何其他类型。您的代码创建了一个数组实例,该实例能够包含 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 的任何构造函数是否可访问,或类似的东西。