我在浏览Java代码约定时遇到了这个小小的问题:
声明类常量和ANSI常量的变量名称应全部为大写,并用下划线(“_”)分隔。 (为了便于调试,应避免使用ANSI常量。)
(来自here。)
这份文件所说的“ANSI常数”是什么?他们如何使调试更难?
该文本听起来好像在“变量声明类常量”(我将其解释为普通static final
变量)和这些“ANSI常量”之间存在二分法,但我不知道任何方式在Java中声明常量而不是使它们成为static final
个变量。
答案 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();
}