JAVA学习基础——Java的封装以及getter与setter方法

今天了解了Java三大特性(封装、继承、多态)之一的封装
按书本上所说以及我的理解,封装是将一些数据归在一类并封存,既方便取用,又能够保证内部数据细节方面的正确性与稳定性
例如如下代码

public class Person01 {
     

	public String name;
	public int age;
	public void PrintAge() {
     
		System.out.println(name+"的年龄是"+age);
	}
}
public class Demo01 {
     

	public static void main(String[] args) {
     
		
		Person01 man=new Person01();
		man.age=-18;
		man.name="二豆";
		man.PrintAge();
	}
}

其结果为`

二豆的年龄是-18

以上结果存在明显的错误,年龄不可能存在负数,按实际意义来说这是不合法的。当然,毕竟是我输入的数值错误,程序出现这样的错误当然是我来背锅咯。
但是,是否存在一种能够严格把关错误数据的关口呢?那便是使用封装了。为了防止之前这样的错误,我们可以运用封装性来保证其合理性。

代码如下

public class Person02 {
     
	private String name;
	private int age;
	public void PrintAge() {
     
		System.out.println(name+"的年龄是"+age);
	}
}

public class Demo01 {
     

	public static void main(String[] args) {
     
		
		Person02 man=new Person02();
		man.age=-18;
		man.name="二豆";
		man.PrintAge();
	}
}

其结果为

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	The field Person02.age is not visible
	The field Person02.name is not visible

	at 封装知识.Demo01.main(Demo01.java:8)

实际上就是报错了 (visible明显的
这是因为我将Person类中的public(公众的)关键字改为了private(私有的)关键字
这个关键字将其所修饰的变量设置为私有,访问受到限制这样也就无法简简单单地直接进行访问了。

但是,由于我们的目的,还是要访问其中的值并更改它,这时就提供了2种方法即getter方法与setter方法。
代码如下

public class Person02 {
     
	private String name;
	private int age;
	public void PrintAge() {
     
		System.out.println(name+"的年龄是"+age);
	}

	public void SetAge(int aAge) {
     
		this.age=aAge;
	}
	public int GetAge() {
     
		return this.age;
	}
	public void SetName(String aName) {
     
		this.name=aName;
	}
	public String GetName() {
     
		return this.name;
	}
}
public class Demo0
 {
     

	public static void main(String[] args) {
     
		
		Person02 man=new Person02();
//		man.age=-18;
		man.SetAge(-18);
//		man.name="二豆";
		man.SetName("二豆");
//		man.PrintAge();
		System.out.println(man.GetName()+"的年龄是"+man.GetAge());
		
	}
}

其结果为

二豆的年龄是-18

代码中的Setxxx() 和Getxxx()就是我所说的setter方法与getter方法,即设值与取值,其中setter方法不需要返回值但需要传入参数,getter方法需要返回值但不需要传入参数
这种方法的方法名不一定要这么写,但是这样写绝对是最清楚不过的。

这时要是有人在我边上,肯定会问了:“哎哎哎~,你二豆的年龄还是不对啊!”,依照结果来说的确还是错的,但要知道,我们年龄和岁数的取值方式是通过方法,既然存在方法,我们只要在方法内添加相应的约束条件,就可以保证年龄绝对不会出错。
取Person类来看

public class Person02 {
     
	private String name;
	private int age;
	public void PrintAge() {
     
		System.out.println(name+"的年龄是"+age);
	}

	public void SetAge(int aAge) {
     
	    if(aAge>=0&&aAge<=100)//约束条件在这
		this.age=aAge;
		else
		system.out.println("error!");
	}
	public int GetAge() {
     
		return this.age;
	}
	public void SetName(String aName) {
     
		this.name=aName;
	}
	public String GetName() {
     
		return this.name;
	}
}

其结果如下

error!
二豆的年龄是0

由于没能成功赋值,age仍然是初始值0,并通过方法反馈error
在我的理解里,这样的操作真正的保证了我们输入参数的正确性与合理性

——————————————————————————
新手上路,学习为重,如有错误,恳请斧正

你可能感兴趣的:(java基础)