java - 最终(常量)实例(非静态)变量的行为与类(静态)变量类似吗?

标签 java variables scope constants

在以下示例中,变量 b 被声明为 final,但不是 static。这意味着它是一个常量实例变量。但是,由于它是常量,因此任何 Passenger 对象都无法更改其值。那么,将其声明为static并使其成为类变量,这样所有实例化对象都只使用一份副本不是更好吗?

class Passenger {
    int a;
    final int b = 0;

    void drive() {
        System.out.println("I'm driving!");
    }
}

最佳答案

final 但非static 变量的目的是拥有一个对象范围的常量。它应该在构造函数中初始化:

class Passenger {
    final int b;

    Passenger(int b) {
        this.b = b;
    }
}

如果您始终将常量文字值 (0) 分配给 final 变量,则没有多大意义。首选使用 static,这样您就只有 b 的单个副本:

static final int b = 0;

顺便说一句,我不认为拥有默认访问修饰符是您的意图。

关于java - 最终(常量)实例(非静态)变量的行为与类(静态)变量类似吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9699524/

相关文章:

java - ClickOnce 与 Java WebStart

c - 在 C 中,如何计算一个函数中的局部变量,在另一个函数中?

swift - 在运行时创建常量,但在其他函数中访问常量

pandas - 使用 Pandas 将变量转换为多列

variables - 模块函数中使用的 $_ 变量为空 (PowerShell)

java - 为什么@EnableWs从spring bean中删除aop代理

java - Jpeg DCT 和 IDCT 计算不正确

java - SonarQube 通过质量门进行技术债务管理

javascript - 理解 JavaScript 中的 LOCAL 和 GLOBAL 变量

ruby-on-rails - Rails 4错误: The scope body needs to be callable