Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java构造函数基础:没有当前值的对象和字段_Java_Object_Constructor_Field - Fatal编程技术网

Java构造函数基础:没有当前值的对象和字段

Java构造函数基础:没有当前值的对象和字段,java,object,constructor,field,Java,Object,Constructor,Field,关于Java中的构造函数,我有几个问题: 您应该如何初始化/创建类所依赖的对象?例如,我的“time”类中有一个DateTime对象。我是否应该有一个private DateTime\u日期字段作为类的一部分,然后粘贴\u date=new DateTime()在构造函数中?还是用相关方法初始化此对象更好 如果在创建其类的新对象时字段被认为是未初始化的(即,稍后在对象上调用该类的方法时设置其值),您会怎么做?在构造函数中,我是否将它们初始化为null或一些无意义的值 谢谢你的帮助。基本上,这两个

关于Java中的构造函数,我有几个问题:

  • 您应该如何初始化/创建类所依赖的对象?例如,我的“time”类中有一个DateTime对象。我是否应该有一个
    private DateTime\u日期字段作为类的一部分,然后粘贴
    \u date=new DateTime()在构造函数中?还是用相关方法初始化此对象更好

  • 如果在创建其类的新对象时字段被认为是未初始化的(即,稍后在对象上调用该类的方法时设置其值),您会怎么做?在构造函数中,我是否将它们初始化为null或一些无意义的值


  • 谢谢你的帮助。

    基本上,这两个问题的答案都是:由你决定

  • 如果您执行
    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约定。)

  • 老实说:我总是以不同的方式处理。有时我在声明中设置变量(如T.J.Crowder),有时在构造函数中设置,很少有构造函数调用的
    initDefaults()
    方法
  • 我建议不要将字段初始化为无意义的值。在读取字段时,您无法确定该字段是无意义的还是故意使用该值。您应该为整个系统定义
    null
    值的含义或(如果无法避免)特殊的“默认”值,以及方法如何返回值,例如,Robert Martin建议,对于空列表,与其返回
    null
    ,不如返回空数组(这样可以避免NPE)
  • 祝你好运:-)

  • 老实说:我总是以不同的方式处理。有时我在声明中设置变量(如T.J.Crowder),有时在构造函数中设置,很少有构造函数调用的
    initDefaults()
    方法
  • 我建议不要将字段初始化为无意义的值。在读取字段时,您无法确定该字段是无意义的还是故意使用该值。您应该为整个系统定义
    null
    值的含义或(如果无法避免)特殊的“默认”值,以及方法如何返回值,例如,Robert Martin建议,对于空列表,与其返回
    null
    ,不如返回空数组(这样可以避免NPE)

  • 祝您好运:-)

    最好在需要时进行初始化。最好在需要时进行初始化。好的,谢谢!不知怎的,我以前从来没有见过这样的事情