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

在构造函数中初始化一个静态的final字段

子车海
2023-03-14
问题内容
public class A 
{    
    private static final int x;

    public A() 
    {
        x = 5;
    }
}
  • final 表示变量只能在构造函数中分配一次。
  • static 表示它是一个类实例。

我不明白为什么禁止这样做。这些关键字在哪里互相干扰?


问题答案:

每次创建该类的实例时,都会调用一个构造函数。因此,上述代码意味着x的值将在每次创建实例时重新初始化。但是由于变量被声明为final(和static),因此您只能这样做

class A {    
    private static final int x;

    static {
        x = 5;
    }
}

但是,如果删除静态,则可以执行以下操作:

class A {    
    private final int x;

    public A() {
        x = 5;
    }
}

或这个:

class A {    
    private final int x;

    {
        x = 5;
    }
}


 类似资料:
  • 问题内容: Python中是否有诸如静态构造函数之类的东西? 如何在Python中实现静态构造函数? 这是我的代码…当我这样调用App时不会触发。该不是静态构造函数或静态初始化。 我必须这样称呼它,它每次都会实例化App类: 这是我的课: 每次调用的问题是重新创建了App对象。我的“真实” App类很长。 问题答案: 提示:任何引用都将需要实例化该类。您可以这样做: 但是,来吧,这似乎有很多不足。

  • 问题内容: 我有一堂课,在那堂课我有: 然后在我的构造函数中: 如果这样做,一切正常。默认数据值已初始化,但如果我改为这样做: 它说: 为什么? 在构造函数内部初始化数组的最佳方法是什么? 问题答案: 这已经将您的数组元素初始化为0。您无需在构造函数中再次重复该操作。 在您的构造函数中,它应该是:

  • 问题内容: 如果未将ArrayList初始化为字段,则将项目添加到ArrayList时出现NullPointerException。谁能解释为什么? 当我将ArrayList初始化为字段时起作用: 当我将ArrayList声明为字段然后在Class构造函数中对其进行初始化时,它不起作用: 问题答案: 因为构造函数中的版本正在创建一个新变量,而该变量恰好与您的成员字段名称相同,而成员字段仍未设置。这

  • 问题内容: 在Java中,但是在其他OO语言中,初始化属性定义之间也有区别,例如 并使用构造函数对其进行初始化? 我想不出任何实际的区别,有没有?否则,即使结果相同,是否存在一种方法优于另一种方法的情况? 问题答案: 初始化顺序在这里很重要。 将字段设置为默认初始值(0,false,null) 调用对象的构造函数(但不要执行构造函数的主体) 调用超类的构造函数 使用初始化程序和初始化块初始化字段

  • 问题内容: 谁能告诉我此类是否是线程安全的? 编辑:我的错是不澄清这个问题。根据JMM常见问题解答: 应该提供初始化安全性的新保证。如果正确构造了一个对象(这意味着对该对象的引用在构造期间不会逸出),那么所有看到对该对象的引用的线程也将看到在构造函数中设置的其最终字段的值,而无需同步。 这使我感到困惑,因为aMap的设置是。所以其他线程可以看到这些 或不 ? 问题答案: 正如已经指出的那样,它是绝

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