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

定义中的初始化与构造函数中的初始化

石正奇
2023-03-14
问题内容

在Java中,但是在其他OO语言中,初始化属性定义之间也有区别,例如

class Example {
    public Sample sample_attribute = new Sample();
}

并使用构造函数对其进行初始化?

class Example {
    public Sample sample_attribute;

    public Example() {
        sample_attribute = new Sample();
    }
}

我想不出任何实际的区别,有没有?否则,即使结果相同,是否存在一种方法优于另一种方法的情况?


问题答案:

初始化顺序在这里很重要。

  1. 将字段设置为默认初始值(0,false,null)
  2. 调用对象的构造函数(但不要执行构造函数的主体)
  3. 调用超类的构造函数
  4. 使用初始化程序和初始化块初始化字段
  5. 执行构造函数的主体

因此,第一种情况将sample_attribute在第4步中初始化变量,第二种情况将sample_attribute在第5步中初始化变量。这完全取决于您的要求。

如果要从构造函数访问任何变量,则需要使用第一种情况。



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

  • 主要内容:初始化 const 成员变量构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用 初始化列表。 C++构造函数的初始化列表使得代码更加简洁,请看下面的例子: 运行结果: 小明的年龄是15,成绩是92.5 李华的年龄是16,成绩是96 如本例所示,定义构造函数时并没有在函数体中对成员变量一一赋值,其函数体为空(当然也可以有其他语句),而是在函数首部与函数体之间添

  • 映射对构造函数没有限制或要求 (__init__ )类的方法。您可以自由地为您想要的函数要求任何参数,为ORM未知的实例分配属性,并且通常在编写Python类的构造函数时做您通常会做的任何其他事情。 sqlAlchemy ORM不调用 __init__ 从数据库行重新创建对象时。ORM的过程有点类似于Python标准库的 pickle 模块,调用低级 __new__ 方法,然后在实例上悄悄地恢复属

  • 我试图从WebClient中替换RestTemplate,因为根据Java文档,RestTemple将被弃用。Spring团队建议尽可能使用WebClient。 之前的RestTempalte代码如下 我想从WebClient替换RestTemplate。所以我实现了类WebClientConnection,如下所示 我使用这个依赖项 Webclient create 上有堆栈溢出错误 如何正确地

  • 我想在构造函数中初始化二维数组。但是,我在类中声明数组的实例变量时遇到了一个问题。如果我这样做就错了: 我怎么解决这个问题?

  • 我试图用BaseURl、DefaultHeader等构建webClientBuilder。我试图在MyServiceImpl构造器中初始化它,但不确定它是否正确。 我做得对吗?还是有更好的方法。 目前我有2个ServiceImpls来调用不同的API,这就是我试图在服务本身设置“baseUrl”和其他默认值的原因。