Java构造函数基础:没有当前值的对象和字段
关于Java中的构造函数,我有几个问题:Java构造函数基础:没有当前值的对象和字段,java,object,constructor,field,Java,Object,Constructor,Field,关于Java中的构造函数,我有几个问题: 您应该如何初始化/创建类所依赖的对象?例如,我的“time”类中有一个DateTime对象。我是否应该有一个private DateTime\u日期字段作为类的一部分,然后粘贴\u date=new DateTime()在构造函数中?还是用相关方法初始化此对象更好 如果在创建其类的新对象时字段被认为是未初始化的(即,稍后在对象上调用该类的方法时设置其值),您会怎么做?在构造函数中,我是否将它们初始化为null或一些无意义的值 谢谢你的帮助。基本上,这两个
private DateTime\u日期代码>字段作为类的一部分,然后粘贴\u date=new DateTime()代码>在构造函数中?还是用相关方法初始化此对象更好
谢谢你的帮助。基本上,这两个问题的答案都是:由你决定
private DateTime _date=new DateTime()代码>,它将作为实例构造的一部分发生,就像它在构造函数中一样(它将在构造函数中的分步代码运行之前发生)。我在JLS中找不到赤裸裸地说的话(这并不意味着它不存在),但它将是和/或。因此,无论是在声明中还是在构造函数中,都是您的调用。它的优点是,如果您有多个构造函数,那么无论调用哪个构造函数,都会发生这种情况;它的缺点是在多个地方有施工规范
null
、0
、false
等(它们的“”),这取决于它们是什么类型,作为Java语言定义的一部分。因此,您可以显式地将它们初始化为null
,如果您想要清楚、强调、可读性等,但这不是必需的基本上,这两个问题的答案都是:由你决定
private DateTime _date=new DateTime()代码>,它将作为实例构造的一部分发生,就像它在构造函数中一样(它将在构造函数中的分步代码运行之前发生)。我在JLS中找不到赤裸裸地说的话(这并不意味着它不存在),但它将是和/或。因此,无论是在声明中还是在构造函数中,都是您的调用。它的优点是,如果您有多个构造函数,那么无论调用哪个构造函数,都会发生这种情况;它的缺点是在多个地方有施工规范
null
、0
、false
等(它们的“”),这取决于它们是什么类型,作为Java语言定义的一部分。因此,您可以显式地将它们初始化为null
,如果您想要清楚、强调、可读性等,但这不是必需的在回答第二个问题时,可以在构造函数中将作为对象的字段显式设置为
null
。但是,这不是必需的,因为如果不构造或创建对象,它将自动设置为null
。比如说,
Public class MyClass {
private User user;
public MyClass(){
this.user;
}
}
上面的构造函数与:
public MyClass(){
this.user = null;
}
在回答第二个问题时,可以在构造函数中将作为对象的字段显式设置为
null
。但是,这不是必需的,因为如果不构造或创建对象,它将自动设置为null
。比如说,
Public class MyClass {
private User user;
public MyClass(){
this.user;
}
}
上面的构造函数与:
public MyClass(){
this.user = null;
}
构造函数的主要职责是确保实例的设置遵循类不变量(除非它引发异常)。如果要求字段为非null,则不变量可能会更简单。通常,您希望避免使用
null
。NPE非常普遍,不应该如此
(我还强烈建议遵守标准Java约定。)构造函数的主要职责是确保实例的设置遵循类不变量(除非它引发异常)。如果要求字段为非null,则不变量可能会更简单。通常,您希望避免使用
null
。NPE非常普遍,不应该如此
(我还强烈建议遵守标准Java约定。)
initDefaults()
方法
null
值的含义或(如果无法避免)特殊的“默认”值,以及方法如何返回值,例如,Robert Martin建议,对于空列表,与其返回null
,不如返回空数组(这样可以避免NPE)initDefaults()
方法
null
值的含义或(如果无法避免)特殊的“默认”值,以及方法如何返回值,例如,Robert Martin建议,对于空列表,与其返回null
,不如返回空数组(这样可以避免NPE)祝您好运:-)最好在需要时进行初始化。最好在需要时进行初始化。好的,谢谢!不知怎的,我以前从来没有见过这样的事情