从我接触面向对象开始就一直遇到getter和setter,我只知道这两个方法封装了数据,访问或者修改数据必须通过这两个方法。实际开发中追求开发速度,把成员变量定义为public,使用的时候直接Object.member。一开始确实很好用,极大的提高了开发速度,随后问题就出现了,有时返回数据前需要先进行处理,这个时候就傻眼了——这么干净,让我把处理的逻辑加在哪里?如果这个时候有getter或者setter情况就完全不一样了,我们可以在set的时候对数据进行处理,也可以在get的时候对数据进行处理,可以在不改变原有代码的基础上修改逻辑。所以经过以上的实际经验,现在就老老实实写oo!
开发的过程中我们经常把用户的信息缓存在内存当中,像这样:
public static UserInfo userInfo;
实用的时候像这个样子:
App.userInfo.userId
这样做除了我们上面说的的问题之外,还存在一个隐患:如果应用内存被回收,static内存区可能会被清空,或者系统意外崩溃,重新进入之后userInfo也是为null的。