Java “ANSI 常量”

2022-09-01 19:30:44

我在浏览Java代码约定时点击了这个小花絮:

声明类常量的变量名称和 ANSI 常量的名称应全部大写,并用下划线 (“_”) 分隔的单词。(应避免使用 ANSI 常量,以便于调试。

从这里开始

本文档所说的这些“ANSI 常量”是什么?它们如何使调试更加困难?

这段文字听起来好像在“变量声明的类常量”(我将其解释为普通变量)和这些“ANSI常量”之间存在二分法,但我不知道除了使它们成为变量之外,还有什么方法可以在Java中声明常量。static finalstatic final


答案 1

互联网上关于什么是ANSI常量的唯一参考是在论坛上,阅读过命名约定的人会问同样的问题。似乎这个词是由撰写文档的人发明的,你必须问他们是什么意思。

ANSI是美国的国家标准机构,例如ASCII字符集标准和ANSI C语言标准。ANSI也是Microsoft Windows所称的基于ASCII的区域默认字符编码。作者可能指的是字符串文本。


答案 2

它们最有可能指的是ANSI C常量,定义如下

在ANSI中,C常量可以通过两种方式定义:通过#define语句和使用const修饰符。例如,以下两个语句是等效的:

#define LENGTH 10       /* Length of the square in inches */

const int length = 10;  /* Length of the square in inches */

现在Java中显然没有C常量,因为Java不是C:-)(这不是官方编码约定中最奇怪的部分,但我离题了)。

那么他们为什么要写ANSI常量呢?这很可能只是引用最终基元和不可变对象的一种便捷方式。请记住,在C中,初始化后无法更新a的字段,并且没有相应的Java术语用于此类“常量”(不能很好地捕获不可变性的概念)。const structfinal