Java中Get方法与Set 方法

有很多细节在学校老师是不会和我们详细讲解的,最近在系统学习Java一些知识,发现了很多自己不会的东西。例如,为什么要写get 与 set 方法呢?下面举个例子:

这是我们正常写的代码:

public class Student {
    //学生属性:姓名、年龄
    String name;
    int ages;
    //学生的行为:学习、做作业
    public void Study(){
        System.out.println("好好学习!");
    }
    public void DoHomework(){
        System.out.println("刷完1000题!");
    }
}

然后我们写一个测试类如下:

public class StudentDemo {
    public static void main(String[] args) {
        //实例化一个学生
        Student s=new Student();
        //给学生设置年龄,姓名
        s.ages=-18;
        s.name="小飞侠";
        //打印学生的年龄
        System.out.println(s.ages);
        //打印学生的姓名
        System.out.println(s.name);
        //学生学习
        s.Study();
        //学生写作业
        s.DoHomework();
    }
}

下面我们来分析一下以上两个代码:

在StudentDemo类中,我们直接可以访问s的ages和name属性,因为在Student中我们没有给这两个属性设置private限制,而是默认protect。但是,但是,但是,这样做问题就来了,我们设置的年龄是-18岁,这是不合法的数据,但是它确可以在别的类中直接访问。这违背了软件设计的初衷。因此我们必须把两个属性设置为private,只给在Student类本类中进行访问,Student类如下代码:

package com.cheney;

public class Student {
    //学生属性:姓名、年龄
    private String name;
    private int ages;
    //学生的行为:学习、做作业
    public void Study(){
        System.out.println("好好学习!");
    }
    public void DoHomework(){
        System.out.println("刷完1000题!");
    }
}

如此一来,我们无法在别的类中访问ages和name,那我们如何在别的类中访问Student类的ages和name呢?这就是Get与Set方法的灵魂,Student类如下代码:

 public class Student {
    //学生属性:姓名、年龄
    private String name;
    private int ages;
    //学生的行为:学习、做作业

    //Set方法
    public void setAges(int ages) {

        if(ages<0 || ages>120){
            System.out.println("输入年龄不合法!");
        }else {
            this.ages = ages;
        }
    }
    //Get方法
    public int getAges() {
        return ages;
    }



    public void Study(){
        System.out.println("好好学习!");
    }
    public void DoHomework(){
        System.out.println("刷完1000题!");
    }
}

   这里以ages属性为例,主要看setAges和getAges方法,其中setAges方法中还有检查数据合法性的操作,这样就能避免其他类随意修改为非法数据,而必须通过以下方法调用与访问:

 s.setAges(-18);//非法数据无法输入
 s.setAges(18); //合法数据可以输入
 int ages=s.getAges(); //获取学生年龄

以上就是Get与Set方法的牛逼之处,一般学校因为课时有限不会讲的如此清晰。不妥之处,欢迎指正!

猜你喜欢

转载自blog.csdn.net/cj151525/article/details/112341478