当前位置: 首页 > 知识库问答 >
问题:

使用此关键字为最终实例变量赋值

郎言
2023-03-14

Java规范说:变量可以声明为final。最后一个变量只能分配一次。声明变量>final可以作为有用的文档,说明其值不会改变,并有助于避免编程>错误。

如果最后一个变量被赋值,除非它在赋值之前明确地没有赋值(§16)>,否则这是一个编译时错误。

空白final是其声明缺少初始值设定项的final变量。

public class Sample {
    private final int a;
    private final Object object1; // compile error that object1 is not initialized
    private final Object object2 = null;

    public Sample(int value) {
        System.out.println(this.a);
        a = value;
        System.out.println(this.a);
        object2 = new Object(); // Compile error that it shouldn't change
    }
}
    null

如果你觉得这是一个愚蠢的问题,我很抱歉,但我要求你指出一个来源,我可以得到答案。


谢谢
Sharath

共有1个答案

闾丘冠玉
2023-03-14

在第2行public final int a中,JVM将为a分配默认值0

这就是JVM所做的。这不是编译器所做的--它不是源代码中的赋值。它只是变量在赋值之前所具有的值。

JLS并没有说不能观察到构造函数中最终变量的值变化。它说你必须给最后一个变量赋值一次。a正是这种情况-对它的唯一赋值是在构造函数中,所以很好。

 类似资料:
  • 问题内容: 关键字如何使变量不可变?维基百科说没有。 问题答案: 在Java中,术语 final 是指引用,而不 可变 是指对象。将修饰符分配给引用意味着它不能更改为指向另一个对象,但是如果对象是可变的,则可以对其进行修改。 例如: 就像Wikipedia文章中提到的那样,如果您来自C ++,则必须分离出into 和不可变的概念。

  • 问题内容: 我读了这个问题不可变对象,并留下了关于不可变对象,并最终场一个问题: 为什么我们需要不可变类中的实例变量为最终变量? 例如,考虑以下不可变的类: 如果在上面的代码中没有set方法,而实例变量仅在构造函数中设置,为什么要求将实例变量声明为final? 问题答案: 有没有 要求 这样做的变量。但是,当您确实明确打算永远不更改变量时,通常这样做是一种好习惯,因为这不仅可以使变量避免错别字或其

  • 我正在做一个赋值,我被这个错误困住了:无法为最终变量计数赋值 到目前为止,这是我的代码... 我对java非常陌生,显然不是电脑高手,所以请尽可能用最简单的术语解释问题/解决方案。非常感谢。

  • 问题内容: 将实例变量作为最终变量有什么意义? 那么将该变量设置为静态最终变量会更好吗? 原因是如果任何对象都不能更改它,那么它与类(静态)变量相同,对吗? 问题答案: 不。 表示该类的所有实例都相同。 表示在初始分配后无法分配。因此,两个实例的非静态最终变量的值可能不同。 您可能有很多原因想使变量为final;最好的方法之一就是清晰度。如果我读了一个方法并且注意到foo是最终的,那么我不必担心它

  • 我读到了这个关于不可变对象的问题,留下了一个关于不可变对象和final字段的问题: 为什么我们需要不可变类中的实例变量成为最终变量? 例如,考虑这个不可变类: 如果在上面的代码中没有设置方法,并且实例变量只在构造函数中设置,那么为什么需要将实例变量声明为final?

  • 我想了解各种情况下类实例的初始化 在JLS-7第12.5节中,没有提到如何以及何时初始化最终实例变量?如果实例变量被声明为final,是否有人能给我一点参考来理解其行为? 给出的输出如下 在哪里作为 是否将输出作为