当前位置: 首页 > 面试题库 >

为什么使用构造函数,为什么不总是使用简单的变量初始化?

暴才俊
2023-03-14
问题内容

我已经搜索了很多,并在此处给出的堆栈溢出中得到了这个答案

  • 那说明我们可以同时使用构造函数和简单初始化

但我想要答案

  • 但是,如果编译器自动完成构造函数初始化,为什么还要使用构造函数初始化呢!

问题答案:

构造函数的简单定义:

初始化类对象的特殊方法。始终且仅与new关键字一起使用以创建类的实例。

  1. 与类的名称相同。
  2. 可以接受一个或多个参数。
  3. 没有返回值,甚至没有void。
  4. 默认构造函数不带任何参数。
  5. 存在多个构造函数(方法重载)。

但是,如果编译器自动完成构造函数初始化,为什么还要使用构造函数初始化呢!

如果尚未实现构造函数,则构造函数由编译器(默认构造函数)初始化。

那么为什么我们需要实现一个构造函数呢?

  • 它的工作是告诉所有局部变量其初始值,并可能启动类中的另一种方法以对类的目的做更多的事情。
  • 取决于您拥有的数据,即可用的数据。
  • 创建对象的不同方式。
  • 所有类变量都必须使用构造函数进行初始化。

例如:

  • 考虑包中的Rectangle类,该类java.awt提供了几个不同的构造函数,都命名为Rectangle(),但是每个构造函数具有不同数量的参数,或者具有不同类型的参数,新Rectangle对象将从其获取初始状态。这是java.awt.Rectangle该类的构造函数签名:

  • public Rectangle()

  • public Rectangle(int width, int height)

  • public Rectangle(int x, int y, int width, int height)
  • public Rectangle(Dimension size)
  • public Rectangle(Point location)
  • public Rectangle(Point location, Dimension size)
  • public Rectangle(Rectangle r)

如果您的成员变量是private(安全性原因)怎么办?如果不想给其他类处理成员变量,则必须使用getter和setter,但是首先可以使用构造函数对其进行初始化,然后可以在以后需要时使用getter和setter对其进行更改。进行更改/更新。



 类似资料:
  • 问题内容: Java的设计者是否有任何理由认为不应为局部变量提供默认值?认真地讲,如果实例变量可以被赋予默认值,那为什么我们不能对局部变量做同样的事情呢? 问题答案: 声明局部变量主要是为了进行一些计算。因此,程序员决定设置变量的值,并且不应采用默认值。如果程序员错误地没有初始化局部变量并且使用默认值,则输出可能是一些意外值。因此,在使用局部变量的情况下,编译器将要求程序员在访问变量之前使用一些值

  • 问题内容: 我有以下这段代码: 现在在控制台中,构造函数要在的构造函数之前执行。 我想知道为什么会这样。 问题答案: 这是因为在编译时,编译器会将在声明位置完成的每个初始化都移到类的每个构造函数中。因此,类的构造函数可以有效地编译为: 因此,显然构造函数是在类的语句之前执行的。同样,如果您的类中还有其他构造函数,则初始化将移至所有它们。 让我们看一个简单类的字节码: 编译该类,并执行命令- 。您将

  • 问题内容: 为什么我们必须在Servlets中重写init()方法,同时可以在构造函数中进行初始化,并让Web容器调用构造函数,同时在调用构造函数时将ServletConfig引用传递给Servlet? 当然,容器必须为此使用反射,但是容器仍然必须使用反射来调用简单的无参数构造函数 问题答案: 由于构造函数不能是接口的一部分,因此与常规方法不同,不能在Servlet API中“正式”指定构造函数。

  • 如果我有: 很明显,这个表达式后面的应该是零,但我看到的任何地方,他们都说这个代码的行为是未定义的,而不仅仅是的值(直到减法之前)。 很明显,编译器可以简单地在变量中使用它认为“方便”的任何垃圾值,并且它将按照预期工作。这种方法有什么问题?

  • 问题内容: 我有两个班,第一个是我的主班,第二个是我的编辑框架班。 我的第二个类(UpdateGUI)在其构造函数中提供oldName,并对其进行编辑,当我单击时,它将newName发送给我的第一个类。 我的第二堂课: 我的问题是,为什么newName为null? 更新: UpdateGUIDialog类: 输出: 我需要打印而不是null。 问题答案: Java对象有点像真实对象。并顾名思义:它