Effective Java 学习笔记(3)
在实现singleton模式时,我们有以下几种方法。 1. public static final 字段加上private 的构造函数。 public class Singleton{
public static final Singleton INSTANCE = new Singleton();
private Singleton() { ... }
} 这种方法简单,其中的字段让人一目了然就知道这个类是Singleton模式,用final关键字确保这个变量在初始化后就不会再被更改,但要注意的是小心防止少数别有用心的程序使用AccessibleObject.setAccessible来访问私有构造函数,这时可以在私有构造函数中判断当创建第二个实例的时候抛出一个异常。 2. private static final 字段加上private 的构造函数再加上public 静态工厂函数 public class Singleton{
private static final Singleton INSTANCE = new Singleton();
private Singleton() { ... }
public static Singleton getInstance{}{return INSTANCE;} } 这种方式不用担心性能问题,因为现在的JVM会把绝大多数的静态工厂函数改为内联。此外,这种方法还可以在不改变API的情况下对返回值进行改变,即在以后根据需要是否返回第二个实例,或是每个线程一个实例。 对于以上两种方法在串行化的时候要注意,不能仅仅只加上implements Serializable接口,这样会导致每次反序列化的时候创建一个新对象,这样就不是真正的singleton了,解决这个问题的方法是在声明的时候对每一个final字段加上transient关键字,然后再实现一个readResolve方法。 private Object readResolve() {
return INSTANCE;
} 对于java 1.5后的版本,实现singleton模式最好的方法是用枚举。
public enum Singleton {
INSTANCE; } 这种方法没有上面说的缺点,是最优的方法。
相关文档:
1首先添加修改图片宽度和高度的方法
public static void reduceImg(String imgsrc, int widthdist, int heightdist) {
try {
File srcfile = new File(imgsrc);
if (!srcfile.exists()) {
return;
}
......
《Java程序通过weka调用libsvm的方法》一文阐述了调用LibSVM的简单方法,这里主要补充四点:
1. LibSVM在weka3.5版以后都集成了包装,无须再使用WLSVM,所以上文中的WLSVM相关的内容可以去除,而类型WLSVM可以换成LibSVM,需要添加包
import weka.classifiers.functions.LibSVM;
无 ......
通过java.awt.Robot的createScreenCapture截屏。
public static void captureScreen(String fileName) throws Exception {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screenRectangle = new Rectangle(screenSize);
& ......
JAVA关键字详解
1 final数据:
1>对于基本类型前加以final修饰,表示被修饰的变量为常数,不可以修改。一个既是static有是final的字段表示只占据一段不能改变的存储空间。
2>final用于对象应用时,final使应用恒定不变。一旦引用被初始化指向一个对象,就无法再把它指向另一个对象。
& ......
Java常用字符集编码详解
Web开发的时候经常会遇到一些字符编码的错误,如页面乱码等问题,所以有必要需对字符编码有所了解,以下是Ricki收集的一些资料(可能不是很全,但希望对你有所帮助)
Java标准字符集:所谓Java标准字符集,就是Java平台支持的字符 ......