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

Java我应该在构造函数内部还是外部初始化变量

戚宏扬
2023-03-14
问题内容

当我基于C ++知识使用Java时,我喜欢使用以下方式初始化变量。

public class ME {
    private int i;

    public ME() {
         this.i = 100;
    }
}

一段时间后,我改变了习惯

public class ME {
    private int i = 100;

    public ME() {
    }
}

我碰到了其他源代码,有些使用1st约定,有些使用2nd约定。

我可以知道大家都推荐哪种惯例,为什么?


问题答案:

我发现第二种样式(一口气声明和初始化)更出色。原因:

  • 一目了然,该变量是如何初始化的。通常,在读取程序并遇到变量时,首先会去声明它(在IDE中通常是自动的)。使用样式2,你会立即看到默认值。对于样式1,你还需要查看构造函数。
  • 如果你有多个构造函数,则不必重复初始化(并且你不会忘记它们)。
    当然,如果不同构造函数中的初始化值不同(甚至在构造函数中计算得出),则必须在构造函数中进行初始化。


 类似资料:
  • 假设你有这个代码片段 例如,如果编译器决定让它看起来像 这将是一个问题,因为calculateWaitTime()生成一个新线程,该线程可能会将集合视为null或其中没有1。 那么问题又来了,这种重新排序可能吗?或者所有在构造函数之外初始化的最终字段都是在构造函数之前初始化的,或者至少总是由编译器移动到构造函数的顶部

  • 问题内容: 假设我有 什么时候初始化?之前,之后,取决于? 如果我有一个与的全局定义冲突的构造函数,例如在上面的第三个构造函数中,该怎么办?取哪个值? 这不会给我造成任何问题,但我只是想更好地理解该语言。我喜欢了解这些小知识,以便以后可以潜在地利用它们。 问题答案: 变量被初始化为其类型的默认值(0,null等) 首先,调用超类构造函数。如果超类构造函数调用任何在该类中重写的虚拟方法,则该重写将看

  • 之前我们使用大括号声明并初始化了一些Time结构: Time currentTime = { 9, 14, 30.0 }; Time breadTime = { 3, 35, 0.0 }; 现在,通过使用构造函数,我们能用另一种方式来声明和初始化: Time time (seconds); 这两个函数展现了不同的编程风格,以及在C++历史上不同的观点。可能是出于这个原因,C++编译器要求你使用

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

  • 问题内容: 这两种方法有什么优势吗? 范例1: 范例2: 问题答案: 没有区别-实例变量初始化实际上是由编译器放入构造函数中的。 第一种变体更具可读性。 你不能使用第一个变体进行异常处理。 另外还有初始化块,编译器也将其放在构造函数中: 但是,字段声明不是任何方法的一部分,因此它们不能像语句那样执行。相反,Java编译器会自动生成实例字段初始化代码,并将其放入该类的一个或多个构造函数中。初始化代码

  • 问题内容: 我的代码中有内部类。我想授予对其实例的公共访问权限,但是只有外部类才可以创建此实例,就像在“私有”访问权限中一样。是否可以不做适当的小包装(或为每个这样的内部类创建公共接口)? (对不起,如果我的英语不好:P) 问题答案: 有可能的。将 内部类 声明为 public,但将其构造函数声明为private 。这样,您只能在封闭的类及其内部内部创建它,而不能从外部创建它。