Java:getter,setter
getter,setter
设置变量的属性时,我们通常会对数据进行封装,这样就可以增加了数据访问限制,增加了程序可维护性。而实现方法就是:用private去修饰一个变量,然后再用setter方法去设置该变量的值,然后在用getter方法去调用该变量的值。
public class Student{
private String number;//学生学号
private String name;//学生姓名
private int grade;//学生成绩
public Student(){
}
public String getNumber(){//用get方法得到学号(下同)
return number;
}
public void setNumber(String number){//用set方法去设置学号(下同)
this.number=number;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getGrade(){
return grade;
}
public void setGrade(int grade){
this.grade=grade;
}
public static void main(String agrs[]){
Student st=new Student();
st.setNumber("010112233");
st.setName("小明");
st.setGrade(100);
System.out.println("学号为:"+st.getNumber()+","
+"姓名为:"+st.getName()+","+"成绩为:"+st.getGrade()+"。");
}
}
getter和setter的优势。
a. 减少代码的重复性:
设想在调用Student的其他几个地方,都要对学生的grade进行加10操作。如果grade是public member,每个类中都要对grade加10。而如果用setter,只在Student类中对grade加10,其他地方只需要调用Student中的setGrade就可以了。
b. 减少异常事件:
假如学生的grade数值范围是0到100,如果将grade设为public,那么Student类以外的用户很可能会输入0-100以外的数字。而如果在setGrade中加以限制,就能减少exception的发生。
public void setGrade(int grade)
{
if(grade>=0 && grade<=100)
this.grade = grade;
else
System.out.println(
"Please type in an integer between 0 and 100");
}
c. 封装:
Java中引入getter和setter的主要目的在于遵循面向对象编程的一大特性——封装。
想来这是合理的,学生的name及grade本来就是学生本身的属性,需要进行什么修改,拥有什么样的逻辑,本来就应该在Student类里进行,而不应该由外界控制。
d. 减少内存占用:
我们都知道,要根据一个变量的作用域设置它的权限修饰符(public, private, protected…)。如果把grade设为public, 它将存在于整个程序运行周期,而设为private,它只在调用Student类时存在。从这点来看,当然是设为private最好

浙公网安备 33010602011771号