开发人员不使用 Java 中的 const 关键字将字段标记为常量。相反,他们将 Java 中的关键字 static final 以菊花链式连接,以创建一个可以说是具有不可更改值的全局变量。
虽然 const 字在 Java 中是保留的,但它没有实现,任何在代码中使用它的尝试都会触发编译时错误。从其他语言转向 Java 的开发人员会发现在 Java 中使用术语 static final 而不是 const 关键字是不直观的。但是,以这种方式实现语言有一个面向对象的编程原因。
Java中static和final的区别
开发人员创建 Java 类,例如 Person 类或 BankAccount 类,他们从中创建实例。可以这样想,一个类就像一个饼干切割器,而一个单独的实例就像一个饼干。
如果开发人员希望某个字段在被赋值后永远不会更改,则将该字段标记为最终字段。例如,我的银行帐号创建后永远不会更改,你的也不会更改。显然,你的银行帐号与我的不同,因此对于 BankAccount 类的每个实例,它们都不相同。但是对于每个单独的实例,帐户 ID 永远不会改变。
因此,将帐户 ID 称为常量会有些不准确,因为它会从一个帐户更改为另一个帐户。但是,对于任何个人帐户都是如此。使用常量这个词——或者Java 关键字const——来描述这个领域在哲学上是不合理的。
Java 的 static 与 final 关键字
现在让我们看一下 Java 关键字 static。标记为静态的字段对于类的每个实例都是相同的。例如,银行账户可能有一个代表利率的静态变量。当利率发生变化时,每个银行账户实例都会发生变化。如果明天利率从 1% 降到 2%,就会影响到每个人。它就像一个全局变量,类的每个实例都可以访问。但是静态变量不是恒定的,因为它可以随时更改。
现在假设开发人员想要一个无法更改的值,并且对于类的每个实例都是相同的。开发人员需要结合关键字 static final 在 Java 中实现此目的。static 关键字意味着类的每个实例的值都是相同的。final 关键字意味着一旦为变量分配了一个值,它就永远无法更改。Java中static final的结合是如何创建一个常量值的。
不需要 Java const 实现
Java 中的术语 static 和 final 具有不同的含义。final 关键字意味着无法更改某些内容。static 关键字意味着类级别的范围。当你在 Java 中组合 static final 时,你创建了一个对类来说是全局的且无法更改的变量。其他平台的开发人员会认为这种创建等同于全局常量变量。一起使用的静态 final 关键字消除了实现 Java 的 const 关键字的需要。