我是java的初学者,我想以简单的方式知道为什么你应该使用参数化构造函数而不是编译器提供的默认构造函数。
由于
答案 0 :(得分:2)
您需要在任何时候将任何类型的配置传递到对象中时使用参数化对象。您可以使用setter稍后传递该信息,但不仅在构造时传递该信息更短更清洁,它与创建不可变对象的良好实践排列在一起,这不是施工后修改,没有制定者。例如,
class Student {
private final String name;
private final Date birthday;
public Student(String name, Date birthday) {
this.name = name;
this.birthday = birthday;
}
}
答案 1 :(得分:0)
与任何面向对象语言一样,构造函数方法用于为对象分配和初始化内存。考虑到这一点,参数化构造函数方法用于将对象的属性设置为特定值,而默认值不会将任何值设置为任何属性。
答案 2 :(得分:0)
除了Louis Wasserman所说的,在许多情况下,从逻辑的角度来看,参数化构造函数是有意义的。假设您要创建一个Employee对象。员工必须具备某些属性甚至被视为员工,如姓名,社会安全号码,公司和当然是工资(奴隶制是非法的)。因此,使参数化构造函数需要上述4个变量是合乎逻辑的。
答案 3 :(得分:0)
通过默认构造函数,您的对象可能具有的任何属性都设置为0,false等等。如果要立即设置属性,可以使用参数化构造函数。当然,使用自己的构造函数也可以在创建对象(技术上为while)之前执行代码。
顺便说一句:“默认不会为属性设置任何值”的答案是错误的。例如这段代码:
public class Test {
private int test;
private boolean test2;
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.test);
System.out.println(test.test2);
}
}
将打印出“0”和“false”。
答案 4 :(得分:0)
构造函数帮助类初始化并将值设置为传递给它的一些属性。这可能适用于类的当前对象。 对于Ex。
private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
try {
return HttpHandler.HttpPost("https:myip",params );
} catch (IOException e) {
return "Unable to retrieve web page. URL may be invalid.";
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
Log.i("dbgmsg", result);
}
}
希望这有帮助。
答案 5 :(得分:0)
在Java中,构造函数是在使用new
运算符创建对象期间由Java运行时调用的方法。创建构造函数的原因可能是:
答案 6 :(得分:0)
我很惊讶没有人在这个帖子中带来超载。参数化构造函数还使用户能够根据创建时的信息设置不同程度的对象。您可以使用方法重载来执行此操作。
例如:
public Car(long vin){
this.vin = vin;
}
会设置一个只有vin编号的汽车对象,而这个:
public Car(long vin, String make){
this.vin = vin;
this.make = make;
}
会创建一个包含附加信息的类似Car对象。除了重载之外,你还应该考虑复制构造函数,以便了解“浅层”。 vs.&#39; deep&#39;对象副本。以下链接有一个很好的例子:http://www.geeksforgeeks.org/copy-constructor-in-java/