好的模块设计应该尽最大可能封装好自己的内部信息,这样可以把模块之间的耦合程度降到最低。开发得以并行,无疑这将加快开发的速度,便于系统地维护。Java中通过访问控制符来解决这个问题。
public表示这个类在任何范围都可用。
protected表示只有子类和包内的类可以使用
private-package(default)表示在包内可用
private表示只有类内才可以用
在设计的时候应该尽可能的使每一个类或者成员不被外界所访问。在设计一个类的时候应该尽量的按照4321得顺序设计。如果一个类只是被另一个类使用,那么应该考虑把它设计成这个类的内部类。通常 public的类不应该有public得字段,不过我们通常会用一个类来定义所有的常量,这是允许的。不过必须保证这些字段要么是基本数据类型要么引用指向的对象是不可修改的。不然他们将可能被修改。例如下面的定义中data就是不合理的,其他人可以改变数组中的内容,有安全漏洞,后面两个没有问题。
public class Con
{
public static final int[] data = {1,2,3};// it is bad
public static final String hello = "world";
public static final int i = 1;
}
public class Con
{
public static final int[] data = {1,2,3};// it is bad
public static final String hello = "world";
public static final int i = 1;
}
解决data安全隐患的方法有两种:
- 将公有方法替换为一个私有数组,以及一个公有的非可变列表
private static final Type[] PRIVATE_VALUES = {...};
public static final List VALUES = Collections.unmodifiableLis(Arrays.asList(PRIVATE_VALUES));
private static final Type[] PRIVATE_VALUES = {...};
public static final List VALUES = Collections.unmodifiableLis(Arrays.asList(PRIVATE_VALUES));
- 把公有的数组替换为一个公有的方法,它返回私有数组的一份拷贝
private static final Type[] PRIVATE_VALUES = {...};
public static final Type[] values(){
return (Type[])PRIVATE_VALUES.clone();
}
private static final Type[] PRIVATE_VALUES = {...};
public static final Type[] values(){
return (Type[])PRIVATE_VALUES.clone();
}
总之,应该防止把任何杂散的累接口和成员变成API的一部分,除了公有静态final域的特殊情形之外,公有类不应该包含公有域,并且确保有静态final域所引用的对性是不可变的。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ilibaba/archive/2009/01/16/3795124.aspx
分享到:
相关推荐
effective java 读书笔记,第二版自己摘要并翻译,以备速查。
Effective Java读书笔记.pdf
effectiveJava的笔记
Effective-Java读书笔记,别人分享的
Effective Java Effective Java Effective Java
这是对Effective-Robotics-Programming-with-ROS这本书的中文学习笔记
记录了我的effective-Python学习笔记,精简了effective-Python中重要的部分。effective-Python是一本值得多看几遍的书,但是看后面的几遍的时候完全可以直接看自己的学习笔记。此学习笔记侧重与比较实用的部分即前四...
effective-java.pdf
Effective java 3 学习记录
15. 使类和成员的可访问性最小化 16. 在公有类中使用访问方法而非公有域 17.使可变性最小化:不可变类
effective-java 配套代码
Effective Enterprise Java
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...
Effective Objective-C是本学习Objective-C的好书,没有见pdf版,亚马逊上的这儿本书的价格不菲。让我们来看看书里的内容和完整的学习笔记吧。
2021年EFFECTIVEJAVA读书笔记.docx
Effective C++学习笔记 没有时间看Effictive C++书的人可以看看这个笔记 总结出了重点啊 适合有c++基础的人阅读
《Effective Java》第三版中文版目录 第一章 介绍 1 第二章 创建和销毁对象 4 1 考虑用静态工厂方法替换构造器 4 2 当遇到多个构造器参
基于Effective Java第二版的读书笔记,可以帮助你更好的阅读这边Java圣经,更快的理解其思想
Effective Java读书笔记,记载了大部分我觉的有用的东西,前半部分有代码说明,但后半部分的代码,太过琐碎,就没有整理