Java set和get方法的认识:为什么用set和get 而不用public字段的理解

参考CSDN博客:

1.关于面向对象编程中很多人用get()和set()方法,而不用public的一点总结
2.java里为什么要set/get方法?

为什么我们不用student.name,而是用student.getName()?
set方法和get方法的意义在哪里?
常常使用set get,从不问及原因,突然思考起来,才发现自始至终都没明白。
其实看了这两篇博客也不一定会知道,最初使用set get的那个程序员是一个什么想法,但一定会通过思考,得到一个合理的解释,让下次使用set get时,不止是因为在项目开发的规范和框架的约束。

1. 从面向对象角度思考,设计类时需要考虑封装性

        使用get()和set()而不使用public的成员变量,是因为我们设计类的时候要遵循这样的原则:提供类的人要尽量将类中有什么隐藏起来,只告诉使用者你能做什么。使用类的人不关心你的类中有什么,只关心类提供了什么功能。所以设计类的时候要尽量不提供public的成员变量,最好一个都没有。
        举个例子,你有一块橡皮,你需要为这块橡皮提供一个方法叫做“得到橡皮()”,一个方法“使用橡皮()”,然后你才能在需要的时候“得到橡皮”、以及“使用橡皮”,否则,橡皮就只是橡皮,而不是工具。
        只提供接口这条原则,其实不仅是代码规范的问题,放到工作中,这就是多项目组或多部门之间合作的准则,这条原则也绝对不是某个独自编码的程序猿一拍脑袋就想出来的,这是经历过有组织开发工作的程序猿才能设计出来的。

2. 从对变量的可控性角度思考,方便增加变量取得和设定时的特定条件

        在为Student类设定name时,可能考虑项目开发时的业务要求,会像下面代码一样避免name为空的情况出现。这时,如果使用student.name来设定name的值,就会在每一次设定前都添加相应的判定处理,显然那样做会产生大量冗余代码,是不正确的做法

public void setName(String name) {
    if (name == null || "".equals(name)) {
        throw new IllegalArgumentException();
    }
    this.name = name;
}

        以此类推,get时也是一样,如果遇到项目有共通的值编辑内容,有可能会出现下面的情况,这样也是要避免每一次编辑处理,所产生的不必要的代码,尽量精简的做法就是写在get方法中。

public String getName() {
    if ("A".equals(loginusername) || "B".equals(loginusername))) {
        return "优秀学生 "+name;
    }
    return name;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值