3.get和set方法(是一种实例方法)语法格式
/*Person表示人类:每一个人都有年龄这样的属性。年龄age,int类型。我这里先不使用封装机制,分析程序存在什么缺点?Person类的age属性对外暴露,可以在外部程序中随意访问,导致了不安全。怎么解决这个问题?封装。*/// 这是没有封装的Person。/*public class Person{// 实例变量(属性)int age; //age属性是暴露的,在外部程序中可以随意访问。导致了不安全。}*/// 尝试封装一下// 不再对外暴露复杂的数据,封装起来// 对外只提供简单的操作入口。// 优点:第一数据安全了。第二调用者也方便了。public class Person{// private 表示私有的,被这个关键字修饰之后,该数据只能在本类中访问。// 出了这个类,age属性就无法访问了。私有的。private int age; // 每一个人年龄值不同,对象级别的属性。// 对外提供简单的访问入口(电视机的遥控器就相当于是电视机的访问入口,简单明了。)// 外部程序只能通过调用以下的代码来完成访问// 思考:你应该对外提供几个访问入口?// 思考:这些操作入口是否应该是方法呢?// 写一个方法专门来完成读。(get)// 写一个方法专门来完成写。(set)// get和set方法应该带有static,还是不应该有static,get和set方法应该定义为实例方法吗?// get读年龄,set改年龄,这个读和改都是操作的一个对象的年龄。(没有对象何来年龄)// 封装的第二步:对外提供公开的set方法和get方法作为操作入口。并且都不带static。都是实例方法。/*[修饰符列表] 返回值类型 方法名(形式参数列表){}注意:java开发规范中有要求,set方法和get方法要满足以下格式。get方法的要求:public 返回值类型 get+属性名首字母大写(无参){return xxx;}set方法的要求:public void set+属性名首字母大写(有1个参数){xxx = 参数;}大家尽量按照java规范中要求的格式提供set和get方法。如果不按照这个规范格式来,那么你的程序将不是一个通用的程序。*/// get方法public int getAge(){return age;}// set方法public void setAge(int nianLing){// 能不能在这个位置上设置关卡!!!!if(nianLing < 0 || nianLing > 150){System.out.println("对不起,年龄值不合法,请重新赋值!");return; //直接终止程序的执行。}//程序能够执行到这里,说明年龄一定是合法的。age = nianLing;}}
// 在外部程序中访问Person这个类型中的数据。public class PersonTest{public static void main(String[] args){// 创建Person对象Person p1 = new Person();// 访问人的年龄// 访问一个对象的属性,通常包括两种操作,一种是读数据,一种是改数据。// 读数据System.out.println(p1.age); //读(get表示获取)// 修改数据(set表示修改/设置)p1.age = 50;//再次读取System.out.println(p1.age);// 在PersonTest这个外部程序中目前是可以随意对age属性进行操作的。// 一个人的年龄值不应该为负数。// 程序中给年龄赋值了一个负数,按说是不符合业务要求的,但是程序目前还是让它通过了。// 其实这就是一个程序的bug。p1.age = -100; //改(随意在这里对Person内部的数据进行访问,导致了不安全。)System.out.println("您的年龄值是:" + p1.age); //读}}
public class PersonTest02{public static void main(String[] args){// 创建对象Person p1 = new Person();// Person的age,彻底在外部不能访问了。但是这难免有点太安全了。// age不能访问,这个程序就意义不大了。/*// 读age属性的值System.out.println(p1.age);// 修改age属性的值p1.age = 20;// 读ageSystem.out.println(p1.age);*/// 通过“类名.”可以调用set和get方法吗?不行。// 只有方法修饰符列表中有static的时候,才能使用“类名.”的方式访问// 错误的。//Person.getAge();//读调用getAge()方法//int nianLing = p1.getAge();//System.out.println(nianLing); //0//以上代码联合System.out.println(p1.getAge()); //0//改调用setAge()方法p1.setAge(20);System.out.println(p1.getAge()); //20// 你折腾半天了,这不是结果还是没控制住吗??????p1.setAge(-100);//System.out.println(p1.getAge()); // -100System.out.println(p1.getAge()); // 20}}
文章转载自哈特费尔德的思考,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




