构造函数(Java)

Reg*_*ser 2 java methodology

当我在类级别定义变量而不是使用构造函数时,我想知道这是一个很大的错误(在小型Java程序中)?我们可以这样做吗?

在两种情况下,方法体都是相同的.

非常感谢!

例如.

public class test{

    static int column1 = 0;
    static int column2 = 1;

    public static void main(String[] args){
    // do something with variables, no return
    }

    /...../

}
Run Code Online (Sandbox Code Playgroud)

Jim*_*ner 5

你的意思是

public class Foo {
    private String test = "Hello";
    ...
}
Run Code Online (Sandbox Code Playgroud)

代替

public class Foo {
    private String test;

    public Foo() {
        test = "Hello";
    }
}
Run Code Online (Sandbox Code Playgroud)

我其实更喜欢第一种方法,它更清洁.如果您提前知道该值并且它是常量,则应在定义时设置该值.没有理由不从技术的角度来看,它看起来更清洁.

更新

鉴于您添加的代码示例,您正在做的事情很好.要考虑的一件事是你的常数应该是final.在你的情况下,他们应该是private static final int.

  • @Esko:标记一个字段最终不会使它变得不可变 - 除此之外还有更多内容.例如`private final HashMap = ...`不会使封闭类不可变.可能你正在混淆条款.如果它没有改变,你是正确的,如果只是从设计文档的角度来看它是正确的. (2认同)