【问题标题】:Difference between a method with void and a constructor带 void 的方法和构造函数之间的区别
【发布时间】:2013-10-31 19:07:49
【问题描述】:

使用带有 void 的方法和构造函数有什么区别?例如:

public class Time {
    public void getMethod() {

    }

    public Time() {

    }

}

我在哪里使用什么? 谢谢

【问题讨论】:

  • 调用已创建对象的方法。使用new Time()调用构造函数并创建对象。
  • 构造函数返回新对象,因为这样的 void 参数会很疯狂。另一方面,具有 void 的方法不返回任何内容
  • 您有什么疑问?我假设您知道创建对象时会使用构造函数。
  • @RichardTingle 在字节码级别,构造函数总是接受this 参数并返回void(实际上V 为void)

标签: java methods constructor


【解决方案1】:
  1. 在创建new Object() 后调用构造函数。通常会做一些初始化,准备对象。方法 - 您可以根据需要调用它们。
  2. 构造函数只能在某个对象上调用一次。方法可以被多次调用。
  3. 构造函数不能是static,因为这不合逻辑,static 表示“属于类,而不是对象”。方法可以是static。

【讨论】:

  • +1 构造函数也可以设置final 字段并且必须调用父构造函数。
【解决方案2】:

构造函数是属于与其创建相关联的类的方法。当您使用 Object a = new Object(); 声明一个对象时;这是调用构造函数的地方。

您应该使用构造函数来组织课程其余部分所需的任何数据。例如,如果您正在创建一个 Time 类,则 Time 构造函数可能会获取当前时间并将其设置在一个变量中以供以后使用。

其他方法就是这样。它们是为类进行一些计算或工作的方法。例如,您可能有一个接受日期并返回输入日期与当前日期之间的天数的方法。

【讨论】:

    【解决方案3】:

    'void' 只是方法的返回类型。

    构造函数没有返回类型。

    【讨论】:

      【解决方案4】:

      构造函数用于创建新对象。它的使用导致返回对新对象的引用(尽管从技术上讲,构造函数并不返回引用本身)。因此 void 对于构造函数来说将是一个毫无意义的关键字。用作Object o=new Object(parametersIfApplicable)

      另一方面,带有 void 返回参数的方法不返回任何内容(但通常会更改对象内的内部数据(或者不太频繁地更改传递给它的对象之一);否则调用它将毫无意义)。

      总结

      • 调用构造函数会生成一个新对象并返回对它的引用
      • 在现有对象上调用(非静态)方法来完成某些工作;它什么也不返回

      【讨论】:

      • 构造函数实际上并不返回新对象;如果是这样,则链接到父构造函数的派生类将接收父类型的对象,而不是它自己的对象。构造函数设置一个新创建的“空白”对象并传递给它;然而,与大多数方法不同的是,构造函数只能在自创建以来未以任何方式被触及的对象上调用。
      • @supercat,确实,我试图在我的“技术”部分中说明这一点。我的观点是,它被称为“在返回新对象的上下文中”
      • 我的观点是,基类方法没有“正常”的方式来生成它一无所知的派生类的对象,但是当链式基类构造函数返回时,它的调用者将是派生类对象。让调用构造函数的代码生成对象是实现这一目标的常用方法,但不是唯一方法。
      【解决方案5】:

      void 方法专门不返回任何数据或对象。实际上,构造函数不会返回任何内容。

      从硬件的角度来看,它初始化了调用者声明的对象所分配的构造时给出的信息; Doughty 在“References to and Creating Objects”下提供了广泛的概述。

      为了使用 getMethod() 方法,您必须创建类 Time 的实例,这是通过构造其构造函数定义的对象来完成的。

      Time currentTime; //Declaration of object only allocates space in memory for it currentTime = new Time() //Constructs an instance of Time
      //and assigns the object reference to variable currentTime

      然后使用返回void的方法:

      currentTime.getMethod();

      只需调用该方法即可执行其任务。它不返回数据或对象,而是将控制权返回到调用它的位置。

      【讨论】:

        【解决方案6】:

        对象的大多数方法在被正在构建的对象调用时,将与从其他任何地方调用时的调用方式相同。构造函数不同。构造函数是一种特殊的void 方法,不能直接从“正常”代码中调用。相反,所有构造函数调用都必须采用以下两种形式之一:

        • 在一个构造函数的一开始调用当前类或超类中的另一个构造函数。

        • 系统生成的调用,作为以下序列的一部分(为x = new Foo(123); 提供的伪代码):

          // "Magical" system routine to create an object without running constructors
          Foo temp = InternalSystemMagic.CreateNewObject([foo's type]); 
          temp.Foo_constructor(p1); // Now invoke the constructor
          x = temp; // Note that if the constructor throws, x will not get set.
          

        请注意,编译器可以生成代码,该代码将首先创建 Foo 类型的对象而不运行构造函数,然后在新创建的类型上调用构造函数,即使没有另一个操作都不合法。

        【讨论】:

          猜你喜欢
          • 2015-02-24
          • 2015-01-05
          • 1970-01-01
          • 2012-08-25
          • 1970-01-01
          • 2015-09-26
          • 1970-01-01
          • 2015-06-05
          • 2013-09-09
          相关资源
          最近更新 更多