在Java中,是否可以在没有类和构造函数的情况下创建一个对象?

问题描述 投票:0回答:2

诸位!我是Java新手,最近偶然发现了构造函数的概念。

我是Java新手,最近偶然发现了构造函数的概念。我自认为理解了这个概念,但我正在看的书中介绍的是 数组中的对象 我就迷路了。

在例子中,书中只是简单地使用构造函数创建了一个对象 new. 但问题是,这本书在使用它的时候,有一个。对象参考变量 指向一个不存在的类中的对象。

让我用代码写出来。

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 或者是否可以创建一个对象。Dog[] 而无需调用classconstructor。

如果有人能给我澄清这个概念,我会很感激。

谢谢你的阅读!

java class object constructor new-operator
2个回答
0
投票

宣言 Dog[] pets; 需要有一个名为 Dog. 它声明了变量 pets 种类 Dog[]意思是 pets 将永远保持 null 类型的数组的引用,或对 Dog[] (或者是一个子类型,如 Chihuahua[]). 你的书显然是在假设 Dog 的定义,让你填空。这是很正常的:书上通常不会为每个例子展示整个程序,因为他们不想分散你对具体事物的注意力)。

作业 pets = new Dog[] 是无效的:你不能创建一个数组而不说它有多少元素,要么用一个数字(new Dog[3])或通过明确列出元素(new Dog[] { null, null, null }).

转让 pets = new Dog[3] 需要有一个名为 Dog但它确实 呼叫任何 Dog的构造函数(因为它没有创建一个新的 Dog惟有 Dog[]),所以它不关心是否 Dog 有一个无参数的构造函数,无论 Dog 是一个具体的类,无论任何 Dog的构造函数是可访问的,或者类似的东西。


0
投票

数组在Java中并不是一个类,尽管实例化它时使用了 new 关键字,而且没有构造函数。撇开这些不谈,我们先来澄清一下语法,因为有些人对你的代码的实际含义感到困惑。

想象一个数组是一系列串在一起的盒子。每个盒子,或者 element的实例,可能包含一个 东西. 你需要告诉数组它的所有盒子都允许包含什么类型,你可以通过在方括号前加上该类型的名称来实现。在本例中,作者使用了一个虚构的 Dog 型(即 Dog[]),但它也可以是 Integer, String或任何其他类型。你的代码创建了一个数组的实例,这个数组能够包含以下类型的实例。Dog 或其后代类型。

© www.soinside.com 2019 - 2024. All rights reserved.