Java“ANSI常量”

时间:2013-10-04 06:29:35

标签: java naming-conventions history

我在浏览Java代码约定时遇到了这个小小的问题:

  

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

(来自here。)

这份文件所说的“ANSI常数”是什么?他们如何使调试更难?

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:6)

它们很可能是指ANSI C常量,defined as follows

  

在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中,const struct的字段在初始化后无法更新,并且对于这样的"常量"没有相应的Java术语。 (final并没有很好地捕捉到不变性的概念。)

答案 2 :(得分:0)

此处, ANSI常数是指由ANSI(美国国家标准协会)定义的预定义常数。请参考此link了解更多详细信息。

ANSI实际上是建立标准的组织,使我们所有人的生活更加轻松。已经为许多事物建立了ANSI标准。 ASCII将值映射到字符表示形式的数字编码,即65 = A,被ANSI标准覆盖。 NaN(不是数字)是可以通过浮点计算返回的值,并且该值由ANSI与IEEE结合定义。 ANSI为许多事物建立了常量,尤其是在通讯领域,例如SQL,字符集,颜色(这就是为什么大多数计算机上黑色为0的原因!)等。因此,如果定义一个常量,该常量表示已定义的常量在ANSI标准中,例如 公共静态最终ANSI_BLACK = 0; 您应该遵循这些约定。 (注意,与NaN,Color.black等类似,Sun违反了这些约定。)

我希望这会有所帮助 卡尔·特鲁西亚克,SCJP2,SCWCD

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

答案 3 :(得分:-1)

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

public class TestClass
{
  final static Object ANSI_CONSTANT;
  static { ANSI_CONSTANT = new Object();
}