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最好

posted @ 2021-11-05 10:15  fristzzz  阅读(217)  评论(0)    收藏  举报