2010-01-28 74 views
1

一个实例变量在Java中,不像C++初始值,我们可以在其声明中的字段提供初始值:在Java

public class BedAndBreakfast { 

    public int capacity = 10; //initialize to 10 

    private boolean full = false; //initialize to false 
} 

为什么有必要让这虽然可能在构造函数中做得更清楚了吗?

+2

如何在构造函数中完成“更清晰”? – 2010-01-28 12:16:22

回答

6

如果您使用属性定义默认值,则会更清楚。如果你有多个构造函数,你将不得不在每个构造函数中定义这个丑陋的值。

最终,编译器将这些值放在每个构造函数中,所以最终结果是相同的。这种方式更具可读性且易于支持。

更新:由于BalusC在他的评论中指出的那样,你可以使用一个初始化块,它是由编译器再次追加到每个构造函数:

{ 
    var1 = 10; 
    var2 = false; 
} 
+1

或者,您可以使用初始化块来做到这一点,以便您不需要在所有构造函数中复制它。 – BalusC 2010-01-28 12:04:43

7

为什么有必要让这同时可以在构造函数中更清晰地完成?

这是一个非常主观的陈述。 Java开发人员显然感觉不同(就像我一样)。

1

许多人认为这种方式更清晰,价值与声明一起。

另外,顺序也不同,因为这些赋值将在构造函数开始之前进行(除了特殊的第一个构造函数行,当然)。

1

要添加什么其他张贴写了...... 考虑到C++也允许指定某些变量的值在线:

const unsigned MAX_SPEED = 85; 

在Java中,并行是一个静态最终变量:

static final int MAX_SPEED = 85; 

当然,即使是static final变量的值可以被分配单独的从他们的声明:

static final int MAX_SPEED; 

static { 
    MAX_SPEED = 85; 
} 

但是我的观点是,一旦声明中允许某些类型的变量赋值,为什么不允许所有(从语言设计的角度来看)?