在我的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是否是任意选择。作为一名程序员,你会费心去表明吗?或者,如果我只是假设用户知道它而不告诉他们,这是否可以?
答案 0 :(得分:0)
至于是否应该评论零,我认为最好指出它是一个标志,以便将来提醒自己,或任何其他程序员查看您的代码。
至于使用零作为标志,我认为当长度和高度小于或等于零时抛出异常会更好。将来读起来会更容易,并且当用户输入非正数时更有效率。
答案 1 :(得分:0)
她告诉我们,我们必须为每个类创建一个默认构造函数 我们设计
我告诉我的老师:谁不知道是在教学,谁知道在做什么!
如果您没有创建默认构造函数,编译器会执行此操作,您知道吗? - 老师怎么样?
生成,转换数据的许多工具如果找不到编译"默认构造函数"就会哭泣,唠叨,崩溃。但他们会完全忽略这些评论。
回到你的班级:
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
并检查null
值。
例如:
private Double length; //Length of a carpet
private Double width; //Width of a carpet
答案 2 :(得分:-1)
我会将那些值设置为可以为空。
public class RoomDimension
{
private double? length;
private double? width;
}
public RoomDimension()
{
}
这对您的作用是允许length和width的值取值null。因此,当您调用默认构造函数时,它们会自动设置为null。
这将帮助您开始考虑对象,因为当您拥有包含其他对象的对象时,您无法将所有包含的对象设置为0.0,您只需创建一个空对象。此外,当您对该对象执行操作时,您只需先检查其是否为null,这有助于避免空引用异常。