- 在字段声明中同时赋值给字段
- 在构造函数中为字段赋值?
回答
什么是这两种方法来初始化Java字段之间的区别?
不多!主要的区别是,如果你在声明中对分配给它,它适用于所有构造。也就是说,你不可能忘记将初始化添加到任何未来的构造函数中。
看一看官方Initializing Fields踪迹。
可能值得注意的是,如果您在声明中初始化字段,则在构造函数开始执行之前发生之前。
作为一个经验法则,我通常在声明初始化“死简单的”字段(当这是毫无疑问的初始值应该是多少)。这虽然好像有,我可以在不同的构造需要不同的行为丝毫的机会,我把它留给构造“清理”例如
class SomeClass {
List<Integer> currentNumbers = new ArrayList<Integer>();
int counter = 0;
// ...
}
。
在这两种情况下,只有在超类构造函数执行之后才会赋值。
对于第一种选择,你必须要能够确定不参考任何构造函数的参数值。
对于第二个选项,您需要为每个构造函数重载分配中的值。
基本上,我倾向于当值取决于构造函数的参数第二个选项(通常这就是我希望它依赖)和当值将是任何新初始化的情况下是相同的第一个选项。我倾向于不要混搭单个字段,使用的声明和也在一些构造函数重载分配给它的初始化,但即使这可能是有用的偶然。 (想象一下,这对于大多数构造一个大小为0的集合,而是有一个构造函数接受一个初始值集合。)
虽然你可以参考其他实例成员变量声明,我不喜欢 - 调用实例方法时,你的目标只是部分初始化是脆的,并参考其他变量依赖于变量排序,这感觉丑陋的我。
你的第二个陈述是错误的。我可以做'int i = 1; int j = i;'。 – aioobe 2011-03-17 07:49:49
@aioobe:Ick。谢谢,会改正。 (你不能在C#中,这使我困惑。) – 2011-03-17 07:51:13
(1)是一个语法糖(2)(与静态字段除外)
它确实完全一样,只是在对象的实例化的生命周期不同的时间。看看here了解更多信息。
在第一种情况下,当类被初始化的字段将被创建和分配直接与你脑水肿宣布了它的价值,而在第二种情况下,现场将被创建并分配一个默认值(NULL,如果它是一个对象,如果它是一个int等,则为0),然后在执行构造函数时分配正确的值。当然,实际上对于你来说通常没有太大的区别,因为在这两种情况下的结果是相同的:当你在构造函数返回后创建这个类的实例时,字段被正确初始化。我猜如果你有多个构造函数和一个字段应该有相同的值,而不管哪个构造函数被调用,第一种方法会更有用。
- 1. 这两种初始化PHP类的方法有什么区别?
- 2. 这两种类初始化方法有什么区别?
- 3. 这两种类型的片段初始化有什么区别
- 4. 类初始化的两种方式有什么区别?
- 5. 这两种初始化数组的方式有什么区别?
- 6. 这两种初始化字符串的方式有什么区别?
- 7. 这两种初始化方式之间有什么区别字符串
- 8. 这两种方法有什么区别
- 9. 以下两种初始化用户变量的方式有什么区别?
- 10. Java中静态初始化和动态初始化有什么区别?
- 11. 这两个对象在java中的初始化有什么区别?
- 12. Android发送套接字:这两种方法初始化套接字有什么区别?
- 13. 这个初始化方法有什么区别?
- 14. 用=初始化和用{}初始化有什么区别?
- 15. 初始化字典和在Swift中声明有什么区别?
- 16. 这两种方法有什么区别? JAVA
- 17. 在Java中初始化ASCII和Hex形式的字节有什么区别吗?
- 18. 在下一步中声明和初始化的初始化有什么区别?
- 19. 这两种初始化成员变量的方法有区别吗?
- 20. 调用javascript方法的两种方法有什么区别
- 21. 这两种做TypeScript方法的方法有什么区别?
- 22. C++中字符串初始化有什么区别?
- 23. 初始化前端控制器,这两个有什么区别
- 24. 这两个初始化有什么区别?
- 25. 这两个Ruby类初始化定义有什么区别?
- 26. 这两种语法有什么区别?
- 27. 两种EL语法有什么区别?
- 28. 这三种初始化静态变量的方式有什么区别?
- 29. Swing窗口可以初始化的方式有什么区别?
- 30. 这两种初始化模式有区别吗?
另一个区别可能是字段初始化的顺序。 – 2011-03-17 07:48:57
@Grzegorz,你是什么意思? – aioobe 2011-03-17 07:52:08
请注意,它发生在构造函数的真实主体开始执行之前,但*在任何对“super(...)'的调用之后。 – 2011-03-17 07:55:11