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方法的牛逼之处,一般学校因为课时有限不会讲的如此清晰。不妥之处,欢迎指正!