1.灵活性
比如我们有一个Person类,我们给它设置一个属性name,但是我们希望在取名字的时候,不是只显示名字,
而是把名字按我们的要求输出,比如”我的名字叫XX”,代码如下:
public class Person {
private String
name;
public String getName()
{
return "我的名字叫" + name;
}
public void
setName(String name) {
this.name = name;
}
}
如上代码,以后我们只要定义一个person对象,并给他setName(xx),
再getName的时候,就会显示我的名字叫XX。在实际业务中还可以有更灵活的运用,
2.安全性
规定只读或只写,或写读
比如我们的操作系统在新建用户或在共享文件的时候,经常会提示对针对某个用户的权限是什么,是只读还是只写还是可读写,这里的读写就好比get/set。
对于类来说,如果不使用set/get方法,直接用public定义某个属性,那么这个属性是可读可写的,如果你希望一个类的某个属性是只能读取,不能写入的时候,上面用public定义某个属性就不能满足了,但是我们可以使用private定义属性,再定义一个get方法,但是不定义set方法来实现。反之,只定义set,不定义get则表示该属性是只写不能读的。
举个简单的例子,如下代码
public class Circle {
private double radius;
private double pai =
3.14;
public double getPai()
{
return pai;
}
public void
setRadius(double radius) {
this.radius = radius;
}
public double getC()
{
return 2*pai*radius;
}
}
我们定义了一个圆类,定义了属性半径和pai,半径我只提供写的方法,但是不提供读,而pai只提供读,但不能写,并提供了一个计算周长的方法getC。在实际项目中,对一些类的设计时,严谨的设计是要考虑哪些类是只读或是只写的。
set/get的方法作用当然不只这些,实际项目中的用法有很多,比如对某个类升级,有一个属性的Type变化了,只要set/get的Type不变就不会影响到以前的代码。更多的用法只能在使用中多体会了
3、类似第一条说的,用get()与set()可以控制变量。
如果get()和set()方法里面只放一个赋值语句的话,和public变量应该没什么区别
但是设想,如果你的变量score代表的是一个学生的数学成绩,理论上,分数只可能是0-100的整数,
如果你把将score设为public,不用get()和set(),那么用户很可能会输入1-100以外的数字,如果你把将score设为privata,再用setScore()来设置分数,你就完全可以控制这种行为了。用某个同学的说法就是:get
和 set 可以在方法内部对参数进行校验,做安全检查后再进行赋值
public class Person {
private String name;
private int age;
public static void main(String[] args) {
Person p = new Person();
//p.setName("帅哥");
p.setAge(-100);
System.out.println("*********" + p.getName());
System.out.println("****分割线***************");
System.out.println("*********" +p.age);
}
public String getName() {
return "我的名字叫" + name;
}
// public void setName(String name)
{//我把name属性的写入setName方法去掉,那么p.setName("ZHANGZHEN");
// this.name = name; //p.setName("ZHANGZHEN")这条语句就会报错,因为name属性无该接口
// }
public int getAge() {
return age;
}
public void setAge(int age) {
if(age <0 ){//控制set写入的变量范围等等作用
this.age=age*(-1);
}else{
this.age = age;
}
}
}