【问题标题】:Does every Object in java have its own Constructor?java中的每个对象都有自己的构造函数吗?
【发布时间】:2011-09-23 05:27:58
【问题描述】:

这个问题是因为我读到了这一行一个对象的新实例是通过调用构造函数方法创建的。我agrre但是构造函数方法是什么......?一个 OObject 或一个类本身......?......对不起,如果它是一个业余问题,但我仍在学习 java,我发现它很难理解。

这让我想起了先有鸡还是先有蛋..?

编辑:

可能是我的问题不清楚,我知道对象是如何创建的,每个类都有一个构造函数,但我想知道的是,堆中的每个对象都有自己的实例变量副本。以同样的方式,他们也会有一个构造函数,或者它只是类才有的东西。

【问题讨论】:

  • Java 是您使用的第一个面向对象的语言吗?
  • 每个类至少有一个构造函数。期间。
  • @jonavidjohn.. 是的,它是第一个..

标签: java constructor


【解决方案1】:

在面向对象的设计中,构造函数是根据类定义创建对象...

这里有两个关键概念

  • - 类是实例化 对象应包含的蓝图,包括行为(方法)和信息(属性)。通常包含一个构造函数。

  • Object - 由构造函数创建的东西,instatiated 版本的 Class 在实际使用中。 p>

使用中的构造函数示例

public class MyClass {

    public int intProperty;

    // This is the Constructor, Notice it shares a name with the Class
    public MyClass(int value) {
        intProperty = value;
    }
}

现在使用类

//                            |----------This is calling the constructor
//                            |          and placing a new MyClass object
//                            v          in myClassObejct
MyClass myClassObject = new MyClass(3);

myClassObject.intProperty; // 3

这会创建一个新的MyClass 对象

Java 没有没有类和构造函数,它是语言设计模式的核心......

只有类有构造函数,对象构造函数的产物,对象本身不包含构造函数。

【讨论】:

  • 看我的补充...Java 不能在没有类和构造函数的情况下工作,它是语言设计模式的核心...
  • @ntc:你是指 Java 对象,还是 Java java.lang.Object 类? download.oracle.com/javase/1,5.0/docs/api/java/lang/Object.html
  • 它的小“O”,只是对象而不是对象
  • @ntc 好吧,是的,没有对象构造函数之类的东西。当调用 >> 类
  • @Daryl Teo.. 谢谢老兄.. 我明白了。
【解决方案2】:

是的,每个类都有一个构造函数。

如果你没有明确定义一个,Java 会为你创建一个默认的空的。

【讨论】:

    【解决方案3】:

    是的,你调用了类的构造函数:

    MyClass instance = new MyClass();
    

    但请注意,某些对象具有语言允许的特殊构造函数,例如 String:

    String x = "foobar";
    

    非常类似于(但不完全相同):

    String x = new String("foobar");
    

    请注意,如果没有为该类定义构造函数,则默认(无参数)构造函数是隐含的。

    【讨论】:

    • 其实我不相信这是真的。如果我没记错(我经常错)“foobar”实际上是一个静态字符串实例。例如,如果您有 String x = "foobar";字符串 y = "foobar";并且做 x == y,它会给你 True(因为它们实际上是同一个实例,而不是创建一个新实例)。这也是为什么很多初学java的程序员在比较字符串时会错误地使用相等运算符而不是“compareTo”或“equals”的原因;它在编译时存在字符串时有效,但在运行时创建字符串时失败(通过用户输入等)
    • 这就是为什么我说“不完全一样”。对于大多数正常情况,它可以被认为是“相同的”(即您不应该使用== 来比较字符串)
    • 所以你的意思是在创建对象时调用类的构造函数而不是对象本身的构造函数..?
    • @Bohemian “一些对象”是指字符串和原语的包装器,对吧?
    【解决方案4】:

    在 Java 中,每个类都有一个或多个构造函数,当您使用 new 关键字创建对象时,会调用该类的构造函数。

    示例:

    Integer i = new Integer("1");
    //i is the object, and the Integer class constructor gets called
    

    【讨论】:

      【解决方案5】:

      每个类都必须有自己的构造函数。您要么提供一个或多个 ctor,要么编译器为您生成一个默认的无参数 ctor。如果你有自己的ctor,那么编译器不会生成任何东西。

      【讨论】:

        【解决方案6】:

        Java 中的每个对象都必须通过某个 Class 的构造函数来创建,除了少数像 String 这样具有特殊分配规则的原始类。即使在最基本的层面上,你也可以随时调用

        Object o = new Object();
        

        并且由于 Java 中的所有对象都继承自 Object 超类,因此大多数对象将继承默认构造函数。

        例外情况是当一个类只有一个私有构造函数时——一个不能被任何外部类调用的构造函数。在这种情况下,由于不再需要默认构造函数,因此也将无法访问它。

        class MyClass
        {
            private MyClass()
            {
                //cannot be called by outside classes
            }
        }
        

        通常,这用于纯静态类(不需要实例)或单例对象(想要限制实例化)。因此,所有对象都是从某个构造函数创建的,但并非所有类都必须具有可用的构造函数。

        【讨论】:

          【解决方案7】:

          “对象的新实例是通过调用构造方法创建的”语句是不正确的语句,是造成混淆的原因。没有对象的实例这样的东西。对象是类的一个实例。以下 2 条语句有效:

          通过调用构造方法创建对象。

          通过调用构造方法来创建类的实例(即对象)。

          【讨论】:

            猜你喜欢
            • 2015-09-19
            • 2012-09-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多