Effective Java 学习笔记(13)
影响模块设计好与坏的一个重要因素就是这个模块是否隐藏它的内部数据和其他一些实现细节。
信息隐藏的好处:方便独立开发,测试,优化,使用,理解和修改。能够提高系统开发速(因为各模块可以并行开发),也能易于维护和调试,也能减少系统构建的风险。
要设计良好的模块,规则很简单,就一句话:使每个类或接口尽量不可访问。
1.对于top-level的类和接口(与文件名相同的类或接口),只有两种访问权限:包可访问,公共访问。如果这个类可以设为包可访问,那它就应该是包可访问,这样在将来就可以修改,替换或删除这些类而不影响系统的向上兼容性。
2. 如果一个包可访问的类或接口只是被一个类使用,那么可以考虑把这个类作为nested类。
有时为了测试方面,有可能会提高类或接口的可访问,这种方法可行,但要注意最高只能提到包可访问性,而不能因为测试就把相关类暴露到API中。
字段永远不能为公共的,如果一个字段是non-final,或是其指向的对象是可改变的,将其设计为公共访问,就失去了对其值进行限制的能力。同样,也不能在其值被修改的时候做一些操作。因此,这些也不是线程安全的。
以上原则同样对静态函数适用,但对常量字段例外。
要注意一点,如果一个公共的final字段指向的是可改变的对象,那么就会有潜在的安全漏洞。
如下:
public static final Thing[] VALUES= {...};
有两种解决方式:
一种是使用unmodifiableList,
private static final Thing[] PRIVATE_VALUES = { ... };
public static final List<Thing> VALUES =
Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
另一中是用clone
private static final Thing[] PRIVATE_VALUES = { ... };
public static final Thing[] values() {
return PRIVATE_VALUES.clone();
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mutsinghua/archive/2010/02/05/5290877.aspx
相关文档:
import java.io.InputStream;
import org.apache.lucene.document.Document;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.usermodel.SlideShow;
public Document getDocument(Index index, String ur ......
一、Java程序组成
java程序是由类组成的,文件的类型是*.java。一个java文件的组成如下:
public class MyJava {
}
这就是一个最简单的java类。这句话的作用就是声明一个类,
public 访问修 ......
以下只是个人理解
今天学习spring中的属性注入,在讲原理的时候,提到了java中的内内省机制,在以前只是了解一下反射机制。
反射机制是java中的动态性能,可以以类名得到类对象的技术,实现动态生成对象技术,可以以对象得到此对象的类信息(包括属性,方法),实现此技术的是java中的Class对象,此对象是描 ......
面试时候经常会碰到的一个问题,给你两个继承关系的java类的代码,这两个类中有构造方法和一些变量,然后还有一些方法,方法里通常有将变量输出的语句。这类问题主要考察我们对父类子类初始化顺序的了解情况。
这里我们主要讨论下静态初始化块这种情况。
......
java.lang.Object 提供了一个toString()的方法,但实际上这个方法返回的往往不是我们需要的,它返回的是类名加上“@”加上十六进制的hash值。这显然不是我们想要的,所以必须重载toString函数。
很简单的例子,如下
System.out.println("Failed to connect: " + phoneNumber);
如果不重载,则有
Failed to co ......