这个是一个系列阅读,关于为什么重新学习,我在文章 重新学 Java 系列:新系列、新开始(https://wxnacy.com/2018/12/29/java-renew-why/) 中有提到,这个系列是在有 Java 基础的情况下,重新学习讨论一下以前可能忽略掉,或者没理解的知识细节,我想要永远在学习的路上。
set, get
方法,是 Java 开发者最常见的两个方法,从初学的手敲,到各种 IED 的自动生成,说它是一个项目里最多的方法名也不为过。
还记得几年前,一位开发 IOS 的同事问我,为什么你们 Java 非要用 set, get
方法操作变量,难道就不直接对变量进行赋值吗,就算不能赋值,还不能直接读取吗?我赶紧写了个类试了一下,哎,可以啊,那为啥呢,想了半天,不知道该怎么回答,憋了一句,这是规范。同事“哦”了一声,“好可怜的规范”。
大家都很忙的,晚上还要加班呢,谁有空在去深究为什么,大家都这么写嘛,规范嘛。
既然要重新学习,那自然要搞明白为什么。
首先我们先来弄清楚变量的作用域,详情可以看我的这篇文章重新学 Java 系列:public private protected friendly 的区别(https://wxnacy.com/2018/12/30/java-renew-modification/)
我们用到最多的两个修饰符为 public, private
,它们的区别在于
public
: 所有地方都可以调用。private
: 只有当前类可以调用。
通常当修饰符为 private
时才需要用到 set, get
方法,因为该修饰符不能像 public
一样被外部方法和修改,那为什么我们不直接用 public
修饰呢。
真正的原因在于,作为一个类,我的变量想让你访问和修改,但我不希望你随便修改,而是按照我的方式来访问修改。
比如
1 | public void setName(String name) { |
两个方法都不是将原数据传入和传出,都经过了类的独特修改才进行的相应操作。
所以平常我们觉得它们多余,只是很多时候用不到这个特点而已。