Java:封装(对于含构造器的成员变量的调用和限制)

本文介绍了通过Java实现对象属性的封装与验证的过程,包括如何使用构造器初始化属性并进行合法性检查,例如年龄、姓名及余额的有效性验证。此外,还展示了如何根据不同条件设置默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1)随便查看个人的年纪,工资等隐私,并对设置的年龄进行合理验证,年龄 合理就设置,否则输出error,工资和年龄不能直接查看,name 的长度在2-4之间

要求使用构造器对各属性进行初始化,同时也要对初始化的变量范围进行验证

package ex;
public class ex2 {
	public static void main(String args[]) {
	person t = new person(4,46,"egd");
	System.out.println(t.info());
	}
}
class person{
	private int age;
	private double salary;
	public String name;
	public person(int age,double salary,String name) {
		setage(age);//将Set方法写到构造器中,这样就能验证
		setname(name);
		setsalary(salary);
	}
	public void setage(int age)
	{
		if(age>18&&age<100)
			this.age=age;
		else 
			System.out.println("age is erro");
	}
	public void setname(String name) {
		if(name.length()>2&&name.length()<4)
			this.name=name;
		else 
			System.out.println("name is error");
	}
	public void setsalary(double salary) {
		this.salary=salary;
	}
	public String getname() {
		return name;
	}
	public int getage() {
		return age;
	}
	public double getsalary()
	{
		return salary;
	}
	public String info() {
		return "name="+name+"\t"+"age="+age+"\t"+"salary="+salary;
	}
}

输出结果:age is erro

name=egd        age=0        salary=46.0

 疑惑:这个age既然不符合题意为啥输出还是0,是因为初始化之后赋给它一个默认值吗

2)

package ex;
public class accounttest {
	public static void main(String args[]) {
		account a =new account("1",3,"12345");
		System.out.print(a.info());
	}

}
class account{
	//为了封装,将三个属性均设置为private
	private String name;
	private double balance;
	private String key ;
	//设置两个构造器,一个空一个含参
	//两个构造器都可以用,用空的时候,接收就get方法,用含参的也行
	public account() {
	}//空构造器
	public account(String name,double balance,String key) {
		setname(name);//让方法生效
		setbalance(balance);
		setkey(key);
	}
	public void setname(String name) {
		if(name.length()==2||name.length()==3||name.length()==4) 
			this.name=name;
		else
			this.name="无名";
	}
	public void setbalance(double balance) {
		if(balance > 20)
			this.balance=balance;
		else
			this.balance=-1;
	}
	public void setkey(String key) {
		if(key.length()==6)
			this.key=key;
		else 
			this.key="0000000";
	}
	public String getname() {
		return name;
	}
	public double getbalance() {
		return balance;
	}
	public String getkey() {
		return key;
	}
	public String info() {
		return "name="+name+"\t"+"balance="+balance+"\t"+"key="+key;
	}
}

输出结果:

name=无名    balance=-1.0    key=0000000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值