【问题标题】:In Java, Is it possible to create an object without a class and a constructor?在Java中,是否可以在没有类和构造函数的情况下创建对象?
【发布时间】:2020-09-09 17:39:13
【问题描述】:

那里!

我是 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[],而无需调用类/构造函数。

如果有人能向我澄清这个概念,我将不胜感激。

感谢阅读!

【问题讨论】:

  • 未创建包含数组的名为 dog 的对象,已创建包含 Dogs 的数组对象。
  • 你能详细说明你的目标吗?
  • @Ashish Sharma 我的主要问题是,如果可以创建一个对象,在这个例子中是一个数组对象,可以在没有类和构造函数的情况下创建一个作为参考。
  • 因为构造函数的基本定义是“Java构造函数是一个特殊的方法,当一个对象被INSTATIATED调用”,因此,如果一个构造函数被实例化,我猜必须有一个类实际实例化。

标签: java class object constructor new-operator


【解决方案1】:

声明Dog[] pets; 要求有一个名为Dog 的类或接口。它以Dog[] 类型声明变量pets,这意味着pets 将始终保存null 或对Dog[] 类型数组的引用(或者可能是Chihuahua[] 等子类型)。您的书显然假设 Dog 在其他地方定义,并让您填写空白。 (这很正常:书籍通常不会为每个示例提供完整的程序,因为他们不想分散他们向您展示的具体内容。)

分配pets = new Dog[] 无效:您不能创建一个数组而不说明它有多少元素,无论是使用数字 (new Dog[3]) 还是通过显式列出元素 (new Dog[] { null, null, null })。

赋值pets = new Dog[3] 要求有一个名为Dog 的类或接口,但它确实调用Dog 的任何构造函数(因为它不创建@ 987654336@,只有一个Dog[]),所以它不关心Dog 是否有无参数构造函数,Dog 是否是一个具体类,Dog 的任何构造函数是否可访问,或者其他任何东西像这样。

【讨论】:

  • 谢谢我的朋友,我想我明白了,但我希望得到你的更多帮助来巩固这个概念。澄清一下,Dog[] 不是一个对象,而是一个能够创建对象的数组?我的意思是,数组pets Dog[3] 将能够创建名为Dog 的类的四个instances 或四个objects,并且这三个对象将关联或用变量pets 引用。对吗?
  • @esus4:数组实际上一个对象,但它是一种特殊的对象。它不能创建对象,但它可以保持对对象的引用。例如,如果petsDog[],那么pets[3] 可以是Dog
  • 哦,我明白了!如果正确理解我的书,对对象的引用是创建对象(使用new)然后引用它们的东西。对吗?
  • @esus4:引用不会创建对象,它们只是指向它们。因此,就像表达式3 + 4 + 5 进行一些加法然后计算 为整数12 一样,表达式new Object() 创建一个对象并计算对该对象的引用。至少从程序员的角度来看,在创建对象之前,引用是不存在的。
【解决方案2】:

数组不是 Java 中的类,即使实例化它使用 new 关键字,并且没有构造函数。尽管如此,让我们稍微澄清一下语法,因为您的代码的实际含义有些混乱。

将数组想象成一系列串在一起的盒子。每个盒子,或element,都可能包含一个something的实例。您需要告诉数组它的所有框都允许包含什么类型,并且通过将该类型的名称放在方括号之前来做到这一点。在这种情况下,作者使用了虚构的Dog 类型(即Dog[]),但它也可以是IntegerString 或任何其他类型。您的代码会创建一个数组实例,该实例能够包含 Dog 或其后代类型的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2013-10-22
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多