Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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_Constructor_Documentation_Comments_Default Constructor - Fatal编程技术网

Java 在编写类时注释默认构造函数

Java 在编写类时注释默认构造函数,java,constructor,documentation,comments,default-constructor,Java,Constructor,Documentation,Comments,Default Constructor,在我的Java基础课上,我的老师让我对我在为一个类编写默认构造函数时所做的任意选择进行注释。她告诉我们,我们必须为我们设计的每个类创建一个默认构造函数,例如,我正在编写一个名为RoomDimension的类,我创建了一个默认构造函数,如下所示: public class RoomDimension { //Fields private double length; //Length of a carpet private double width;

在我的Java基础课上,我的老师让我对我在为一个类编写默认构造函数时所做的任意选择进行注释。她告诉我们,我们必须为我们设计的每个类创建一个默认构造函数,例如,我正在编写一个名为RoomDimension的类,我创建了一个默认构造函数,如下所示:

public class RoomDimension {

    //Fields
    private double length;          //Length of a carpet
    private double width;           //Width of a carpet

/**
*
*/
public RoomDimension(){ 
        length = 0.0; 
        width = 0.0;
    }

我在这里使用0.0作为标志,表示用户没有输入任何内容或输入无效。然后,我是否应该在文档注释/**/中将0.0用作无效输入的指示?我知道,如果我使用-1作为我的标志或默认构造函数中字段的初始化,我肯定会评论说-1表示无效输入,因为我武断地做出了这个决定。我询问是否必须对0进行注释,因为我不知道0是否是任意选择。作为一名程序员,你会费心指出这一点吗?或者,如果我假设用户不告诉他们就知道了,可以吗

我会将这些值设置为可为空

    public class RoomDimension 
{
private double? length;
private double? width;

}

    public RoomDimension()
{  

}
这将允许长度和宽度的值取null值。因此,当您调用默认构造函数时,它们会自动设置为null


这将帮助您开始考虑对象,因为当您有包含其他对象的对象时,您无法将所有包含的对象设置为0.0,您只需创建一个空对象。此外,当您对该对象执行操作时,您只需事先检查其是否为null,这有助于避免null引用异常。

至于是否应注释zero,我认为最好将其指示为一个标志,以便在将来提醒您自己或任何其他查看您的代码的程序员

至于使用零作为标志,我认为在长度和高度小于或等于零时抛出异常是更好的做法。将来阅读起来会更容易,当用户输入非正数时处理起来会更有效

她告诉我们必须为每个类创建一个默认构造函数 我们设计的

我告诉我的老师:谁不知道教什么,谁知道做什么

如果您不创建默认构造函数,编译器会这样做,您知道吗?-你的老师怎么样

许多生成、转换数据的工具如果找不到编译后的默认构造函数,就会哭闹、唠叨、崩溃。但他们将完全忽略这些评论

回到你的课堂上:

public class RoomDimension {

 static {
  System.out.println("I an a static initializer, If the classloader will touch your class, I will be called first! ex. RoomDimension.anyStaticmethod() or before new RoomDimension()");
 }

 {
  System.out.println("I am instance initializer. whenever you call any constructor, I will run before the constructor body, try me with: new RoomDimension()");
 }

 //Fields
 private double length; //Length of a carpet
 private double width; //Width of a carpet

 public RoomDimension() {
  length = 0.0;
  width = 0.0;
 }
}
顺便说一下,在您的代码中:

public RoomDimension() {
  length = 0.0;
   width = 0.0;
 }
它是完全无用的,因为在构造函数之前,它将是一个初始化,并且将执行完全相同的操作,因为您已声明为属性,并且它们将在构造函数之前初始化:

 private double length; //Length of a carpet
 private double width; //Width of a carpet
如果您想知道它是否已初始化,请使用Double而不是Double并检查空值

例:


这不是C问题。对不起,换两倍?她告诉我们,我们必须为我们设计的每个类创建一个默认构造函数,我真不敢相信!您应该知道,编译器会为没有显式编写构造函数的类创建默认构造函数。另外,您的示例本身也说明了为什么仅拥有一个默认构造函数是有害的:您永远不知道属性中的值是否有效。至少你每次访问它们时都要检查一下。谢谢你的回答。我问她是否可以省略默认构造函数,因为我的教科书指出,如果我没有,java编译器会为我提供一个,她说编译器只会在我的类中没有其他构造函数时为我提供。这是真的吗?那么,我是否应该仅仅为了一个习惯而创建一个呢?
private Double length; //Length of a carpet
private Double width; //Width of a carpet