24

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

声明为类常量的变量名和 ANSI 常量名应全部大写,单词之间用下划线 ("_") 分隔。(为了便于调试,应避免使用 ANSI 常量。)

(从这里开始。)

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

文本听起来好像“变量声明的类常量”(我将其解释为普通static final变量)和这些“ANSI 常量”之间存在二分法,但我不知道有任何方法可以在 Java 中声明常量,而不是使它们成为static final变量。

4

4 回答 4

7

它们很可能是指 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 的字段const struct在初始化后无法更新,并且没有对应的 Java 术语来表示这种“常量”(final不能很好地捕捉不变性的概念)。

于 2015-03-25T21:22:41.537 回答
7

Internet 上关于什么是 ANSI 常量的唯一参考资料是在阅读过命名约定的人们提出相同问题的论坛中。似乎该术语是由编写文档的人发明的,您必须询问他们的意思。

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

于 2013-10-04T06:46:49.750 回答
0

这里,ANSI 常量是指由 ANSI(美国国家标准协会)定义的预定义常量。请参阅此链接了解更多详情。

ANSI 实际上是一个建立标准的组织,它使我们所有人的生活更轻松。很多事情都建立了 ANSI 标准。ASCII 是将值映射到字符表示的数字编码,即 65 = A,由 ANSI 标准涵盖。NaN(不是数字)是可以通过浮点计算返回的值,该值由 ANSI 与 IEEE 一起定义。ANSI 为很多事情建立了常量,特别是在通信领域,例如 SQL、字符集、颜色(这就是为什么黑色在大多数计算机上的值为 0!)等。因此,如果您定义一个常量来表示定义的常量在 ANSI 标准中,例如 public static final ANSI_BLACK = 0;您应该遵循这些约定。(注意 Sun 与 NaN、Color.black 等一样违反了这些约定。)

我希望这可以帮助 Carl Trusiak,SCJP2,SCWCD

在调试时使用这些可能会导致内部冲突,因为可能会错误地引用用户定义的常量或常量的隐含值。

于 2020-11-03T06:33:03.497 回答
-2

我希望它与静态初始化程序或非编译时间常量有关,但我真的不知道(我在代码约定中搜索该术语,这将我带到这里:)

public class TestClass
{
  final static Object ANSI_CONSTANT;
  static { ANSI_CONSTANT = new Object(); }
}
于 2014-02-15T00:11:07.817 回答