[Effective Java 读书笔记] 第三章类和接口 第十三 -- 十四条
2024-09-05 03:34:21
第十三条 使类和成员的可访问性最小化
总得来说,我们应该尽量将成员的访问范围限制到最小!有利于解耦,开发、测试和优化都能够更加独立。
对于成员(域,方法,嵌套类和嵌套接口),有四种可能的访问级别,访问范围从小到大:
访问控制符 | 同类 | 同包子类 | 同包其它类 | 不同包子类 | 不同包其它类 |
public | √ | √ | √ | √ | √ |
protected | √ | √ | √ | √ | × |
默认 | √ | √ | √ | × | × |
private | √ | × | × | × | × |
另外,JAVA中的常量是全局访问的,public static final Integer VALUES_INTEGER = new Integer(10);
上面的VALUES_INTEGER是不可更改的,而公有的静态final数组是可以更改的:
public class MainTestJava { public static final Integer MAX_NUM = new Integer(10);
public static final Integer[] MAX_NUM_A = {new Integer(10),new Integer(10),new Integer(10)};
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer ii = new Integer(11);
MAX_NUM_A[1] = ii;//没有错误,可以赋值
MAX_NUM = ii;//有错误,不能赋值 } }
所以可以使用public的static final方法来获取数组的clone,将MAX_NUM_A置为private,不可更改
第十四条 在公有类中使用访问呢方法而非公有域
对于public的类,尽量不要让成员变量为public,而应该使用方法来访问: 如果类可以在包外访问(public),就应该提供访问方法,以保留将来改变该类内部表示法的灵活性。如果暴露了他的数据域,以后想要改变是不可能的。
如果类是包级别私有的(private,default),或者是私有的嵌套类,可以考虑暴露它的数据域,因为这些数据被限制在包中,如果有必要,不改变包外的任何代码而只改变内部数据表示法也是可以的。
最新文章
- .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]
- Oracle 建立索引及SQL优化
- web前端基础篇⑤
- Python:print显示颜色
- delphi数组作为参数传值
- 基于百度定位及天气获取的DEMO
- CMake使用教程
- 树莓PI交叉编译BOOST库(asio网络例子)
- lightoj 1021 - Painful Bases 状态压缩
- linux_shell_拆分文件_多进程脚本
- 你应该知道的jQuery技巧【收藏】
- word在线问题
- Java高级特性 第15节 解析XML文档(3) - JDOM和DOM4J技术
- Pinyin4j实战
- <;HBase>;<;Scan>;
- linux 使用进程管理工具 supervisor
- [leetcode]Permutations @ Python
- java 中 enum 枚举的使用
- 【题解】洛谷P4707重返现世
- python中对list去重的多种方法