java类的声明字段_在构造函数或声明中初始化类字段?

问题

我最近一直在用C#和Java编程,我很好奇最好的地方是初始化我的类字段。

我应该在申报时做到吗?:

public class Dice

{

private int topFace = 1;

private Random myRand = new Random();

public void Roll()

{

// ......

}

}

或者在构造函数中?:

public class Dice

{

private int topFace;

private Random myRand;

public Dice()

{

topFace = 1;

myRand = new Random();

}

public void Roll()

{

// .....

}

}

我真的很好奇你们有些人认为最好的做法。我想保持一致并坚持一种方法。

#1 热门回答(242 赞)

我的规则:

不要使用声明中的默认值进行初始化(null,false,0,0.0 ...)。

如果你没有更改字段值的构造函数参数,则首选声明中的初始化。

如果由于构造函数参数而改变字段的值,则将初始化放在构造函数中。

在练习中保持一致(最重要的规则)。

#2 热门回答(133 赞)

在C#中没关系。你提供的两个代码示例完全相同。在第一个例子中,C#编译器(或它是CLR?)将构造一个空构造函数并初始化变量,就像它们在构造函数中一样。如果已经有一个构造函数,那么任何初始化"上面"将被移动到它的顶部。

就最佳实践而言,前者比后者更不容易出错,因为有人可能很容易添加另一个构造函数而忘记链接它。

#3 热门回答(13 赞)

C#的语义与Java略有不同。在C#中,声明中的赋值是在调用超类构造函数之前执行的。在Java中,它立即完成,允许使用'this'(对于匿名内部类特别有用),并且意味着两个表单的语义确实匹配。

如果可以,请将字段设为最终字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值