Java代码惯例澄清-直接编码数值常量

Java代码惯例澄清-直接编码数值常量,java,conventions,Java,Conventions,第10.3节中规定: 数字常量(文字)不应该直接编码,除了-1、0和1,它们可以作为计数器值出现在for循环中 “直接编码”数值常量意味着什么 我相信这意味着使用它们而不定义它们实际上是什么。例如,不要说明: public static double PI = 3.14; //<-- Clearly defines the meaning of this value. 公共静态双PI=3.14// 它指的是所谓的“幻数”。遵守以下代码: float radians = 180/3.141

第10.3节中规定:

数字常量(文字)不应该直接编码,除了-1、0和1,它们可以作为计数器值出现在for循环中


“直接编码”数值常量意味着什么

我相信这意味着使用它们而不定义它们实际上是什么。例如,不要说明:

public static double PI = 3.14; //<-- Clearly defines the meaning of this value.
公共静态双PI=3.14// 它指的是所谓的“幻数”。遵守以下代码:

float radians = 180/3.141;

float degreesInRadians = myDegrees/Math.PI;

哪一个更清晰?

这意味着当您在代码中使用数字(而不是-1、0和1)时,您使用常量来“标记”它

Ie而不是:

boolean pass = score >= 50;
使用以下命令:

private static final int MINIMUM_PASS_SCORE = 50;

boolean pass = score >= MINIMUM_PASS_SCORE;

如果我在一个类中使用一个整数50次,这不是一个数值常量吗?或者这些只是指数学常数?@PeterJaloveczki他们指的是每一个常数,数学常数只是一个特例。但是你说的“单个整数50次”是什么意思?好吧,假设我有一个特殊的整数,必须在多个位置进行检查。(可能有某种限制。)我应该每次都使用文字表示吗?使用常数不是更容易吗?如果需要的话,我可以在一个地方更改它,而不是更改它使用了多少次?@PeterJaloveczki当然,如果它是一个常数,应该定义为一个常数。特别是如果你在几个地方使用它,而且将来可能会改变。@BugalugsNash对此没有硬性规定。如果从上下文中很清楚2在这里的意思,并且它不会改变,那么直接写它并不可怕。如果你对每一个数字都设定一个常数,仅仅因为你试图遵守一些“规则”,那就更混乱了。
private static final int MINIMUM_PASS_SCORE = 50;

boolean pass = score >= MINIMUM_PASS_SCORE;