Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时使用常数?_Java_Constants - Fatal编程技术网

Java 何时使用常数?

Java 何时使用常数?,java,constants,Java,Constants,下面是ArrayList的代码片段,它接受用户提供的“initialCapacity”或默认值10。我的问题是——为什么10不是一个静态常数?我猜当一个变量在代码中重复多次时,就会使用常量。我说得对吗 public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+

下面是ArrayList的代码片段,它接受用户提供的“initialCapacity”或默认值
10
。我的问题是——为什么10不是一个静态常数?我猜当一个变量在代码中重复多次时,就会使用常量。我说得对吗

public ArrayList(int initialCapacity) {
    super();
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    this.elementData = new Object[initialCapacity];
}

/**
 * Constructs an empty list with an initial capacity of ten.
 */
public ArrayList() {
    this(10);
}
public数组列表(int initialCapacity){
超级();
如果(初始容量<0)
抛出新的IllegalArgumentException(“非法容量:”+
初始容量);
this.elementData=新对象[初始容量];
}
/**
*构造一个初始容量为10的空列表。
*/
公共数组列表(){
这(10);
}

常量用于为变量命名

您可以称之为“
DEFAULT\u INITIAL\u CAPACITY

一个好的程序,是一个你可以像读故事一样阅读的程序

下面是一个代码片段,例如:

char * find_type(char *str,int *type){
    str = trim_leading_space(str);
    if(*str == SLASH_SIGN){
        str++;
    }else{
        display_error(BAD_TYPE_FORMAT, str);
    }
    str = trim_leading_space(str);
    *type = convert_to_zero_or_one(str[0]);
    if(*type == NO){
        display_error(BAD_TYPE_FORMAT, str);
    }else {
        str++;
    }

    return str;
}
代码是用C编写的,但仍然证明了我的观点

以下是“
坏类型格式”
的定义

如果我把它留作
34
,当有人来编辑我的代码时,他不会知道我为什么要在里面写34。
但这只是一长串可能的错误中错误的下一个索引。

从Java7开始,有一个常量

在您发布的代码示例中,该值仅使用一次,并且注释描述了它的用途,因此使用常量没有意义。可以说,没有常数更好,因为阅读时你不必停下来四处寻找常数的定义。使用常量会在读者中产生一种期望,即该值会多次出现,硬编码这会清楚地表明该值不会出现在其他任何地方。出于这些原因,不使用常量可能是提高可读性的一种选择


一旦初始化逻辑更改为惰性,就必须在两个地方引用默认容量值(因为在添加新元素时必须对其进行检查)。引入常数是有意义的;如果类的维护者想要更改初始容量,那么他们只需在一个地方进行更改。

常量是他们的,以使代码更具可读性。对于Java来说,是否将任何事物声明为常量并不重要。一旦代码被编译,每个常量都将被连接(不确定是否可以在这里使用该术语),如果它是一个可以在编译时计算的表达式,那么它将被连接

所以如果你写



    int INITIAL_CAPACITY  = 10;

    public ArrayList() {
        this(INITIAL_CAPACITY);
    }

编译后将始终转换为



    public ArrayList() {
        this(10);
    }

这一切都是为了节省运行时的时间。因此,最好单独声明常量,因为这样可以使它更易于理解,因为它向用户清楚地说明了它的用途。在您的情况下,初始_容量对于不熟悉代码的人来说更有意义,而在调用中仅使用“10”


您不必为这些优化而烦恼,因为JVM将为您完成这些优化。您应该尽量使其更具可读性。

您是对的,当一个变量重复多次时,您应该使用常量。你应该使用声纳来检查这种最佳做法。

在这种情况下,这主要是风格问题。它本可以作为一个静态常量,但作者可能觉得这不会增加可读性。


    public ArrayList() {
        this(10);
    }