Java 什么是;这个();你在构造函数中做什么?
关于下面的代码,我有两个问题。 1.如何在不使用setter的情况下构造第三个构造函数? 2.这个()在最后一个构造函数中做什么 public class Person { private String name; private String address; Person(){} Person(String name){ this.name = name; } Person(String address){ //Person(java.lang.String) is already defined. } Person(String name,String address){ this(); this.name = name; this.address = address; } } 公共阶层人士{ 私有字符串名称; 私有字符串地址; Person(){} Person(字符串名称){ this.name=名称; } 人员(字符串地址){ //Person(java.lang.String)已定义。 } 人员(字符串名称、字符串地址){ 这个(); this.name=名称; this.address=地址; } } 我对这个问题的解决办法是 人员(对象地址){ this.address=(字符串)地址; } 不过,我对此并不确定 我认为这是一个问题;在上一个构造函数中,调用构造函数Person(){},但如果是,是否意味着在调用时创建了两个Person对象 Person p = new Person("myName","myAddress"); 人员p=新人员(“我的姓名”、“我的地址”);Java 什么是;这个();你在构造函数中做什么?,java,constructor,Java,Constructor,关于下面的代码,我有两个问题。 1.如何在不使用setter的情况下构造第三个构造函数? 2.这个()在最后一个构造函数中做什么 public class Person { private String name; private String address; Person(){} Person(String name){ this.name = name; } Person(String address){
谢谢 关于上一条语句,您是对的,但是没有创建两个人对象。在内部,这就像一个方法调用。我不明白你想用这段代码实现什么。要调用上一个构造函数,
newperson(“1”、“2”)
,或在构造函数中调用内部的this(“1”、“2”)
。这里也没有二传手。setter是像setName(String)
,setAddress(String)
等方法。getter是类似于stringgetname()
,stringgetaddress()
的方法
正如另一个答案所说,您也不能有两个具有相同参数类型的构造函数。只需创建一个包含所有需要设置的构造函数
Person(字符串名称)
和Person(字符串地址)
的问题在于不能有两个具有相同参数的构造函数。当您想调用类似这样的东西时,编译器将不知道要调用哪一个:newperson(“joeblow”)代码>
您可以这样做:
Person(String name)
{
this.name = name;
}
Person(String name, String address)
{
this(name);
this.address = address;
}
上一个构造函数中的“this()
”只是告诉该构造函数在构造对象的过程中调用默认构造函数。它不创建两个对象,只运行def中的代码。构造函数,在您的情况下,它什么也不做。但是需要考虑的是,您是否希望创建一个没有名称或地址的Person对象?如果你没有,为什么要提供这些构造函数(无论如何你也不能——它们有相同的参数,所以编译器不能区分它们)?我想每个人都会有一个名字。也许有人没有地址
在创建构造函数之前,请考虑对象
另一种可能性是:
public class Person {
private String name;
private String address;
Person(String name) {
this(name, "");
}
Person(String name, String address) {
this.name = name;
this.address = address;
// TODO - Other initializations.
}
}
这将调用Person(),但未创建两个对象 使用工厂方法构造此对象
public class Person {
private String name;
private String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public static Person createHomelessPerson ( String name )
{
return new Person( name, null );
}
public static Person createNamelessPerson ( String address )
{
return new Person( null, address );
}
}
回答得好。但是,为什么不用这个(字符串“”)(见我的答案)反其道而行之呢?是的,你的答案是+1。让更一般的构造函数调用更具体的构造函数。感谢您的快速回复。我实际上在读另一篇文章,只是提出了这两个不确定的问题,所以编了这个例子。不过,现在问题已经清楚了,再次感谢。