Java构造器初始化问题。
Person类有两个重载的构造器,同样封装了该类的Field,但是我初始化实例的时候,把name设置为“A”,年龄设置为102岁,这就存在初始化的时候有问题而是没有控制的...
Person类有两个重载的构造器,同样封装了该类的Field,但是我初始化实例的时候,把name设置为“A”,年龄设置为102岁,这就存在初始化的时候有问题而是没有控制的了,怎么解决这个问题?
public class Person
{
//将Field使用private修饰,将这些Field隐藏起来
private String name;
private int age;
//提供两个重载的构造器来初始化Field
public Person(){}
public Person(String name , int age)
{
this.name = name;
this.age = age;
}
//提供方法来操作name Field
public void setName(String name)
{
//执行合理性校验,要求用户名必须在2~6位之间
if (name.length() > 6 || name.length() < 2)
{
System.out.println("您设置的人名不符合要求");
return;
}
else
{
this.name = name;
}
}
public String getName()
{
return this.name;
}
//提供方法来操作age Field
public void setAge(int age)
{
//执行合理性校验,要求用户年龄必须在0~100之间
if (age > 100 || age < 0)
{
System.out.println("您设置的年龄不合法");
return;
}
else
{
this.age = age;
}
}
public int getAge()
{
return this.age;
}
public static void main(String[] args)
{
Person p1 = new Person("A" ,"102")
} 展开
public class Person
{
//将Field使用private修饰,将这些Field隐藏起来
private String name;
private int age;
//提供两个重载的构造器来初始化Field
public Person(){}
public Person(String name , int age)
{
this.name = name;
this.age = age;
}
//提供方法来操作name Field
public void setName(String name)
{
//执行合理性校验,要求用户名必须在2~6位之间
if (name.length() > 6 || name.length() < 2)
{
System.out.println("您设置的人名不符合要求");
return;
}
else
{
this.name = name;
}
}
public String getName()
{
return this.name;
}
//提供方法来操作age Field
public void setAge(int age)
{
//执行合理性校验,要求用户年龄必须在0~100之间
if (age > 100 || age < 0)
{
System.out.println("您设置的年龄不合法");
return;
}
else
{
this.age = age;
}
}
public int getAge()
{
return this.age;
}
public static void main(String[] args)
{
Person p1 = new Person("A" ,"102")
} 展开
展开全部
追问
嗯,感觉是对的,谢了啊,还有一般从程序健壮性来说,构造器中会不会写上setName(name)进行判断的?
追答
可以的,这个看个人的习惯,一般很少有人在构造方法里再调用方法,因为,函数的调用会有压栈和出栈的开销。像你现在写的程序是直接手动的new出来一个person对象,一般像网站那种注册的输入姓名和年龄都是在后台先获得你所输入的值,先对这个值进行判断,符合你定义的标准,才会进行赋值
展开全部
首先Person p1 = new Person("A" ,"102")你的这行代码,的102是int类型的,应该不用加“”。
你先试试,不行再说。
追问
这个102确实不用加,这是手误,但是你发现102岁显然不符合后面setter方法的(age > 100)就不合法的范围啊,我要的是在初始化的时候就判断是不是合法的。
追答
因为初始化的时候,程序最快运行的就是构造器,而不是set/get,就像那位朋友说的一样。
你应该在构造器中写 setName(name); setAge(age); 来自蹂紫回答。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以在constructor中call两个setter。
追问
constructor中call两个setter???这是什么意思,真的不懂,望解答,我的意思是不仅是在用setter和getter再对象初始化后来控制对象的Field范围,而且要在对象初始化的时候给Field设定范围。
追答
见 蹂紫 的回答。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询