Effective Java Reading Notes - 1
Effective Java Reading Notes - 1 最近感觉自己对于Java越来越陌生了,遂看EffectiveJava来温习一下。这本书就是一个清单,分为90个item。 Introduction 简介里面就简单说明了一下本书的重点,重点不在于如何写出高性能的Java代码,而是写出clear,correct,usable,robust,flexible,maintainable的代码。 Creating and Destroying Objects Item 1: Consider static factory methods instead of constructors 获取一个类的实例的传统方式是提供构造方法。另外一种方式是创建静态工厂方法,这里的工厂并不是设计模式中的工厂。之前有个同事喜欢使用静态工厂方法来创建类(Luzihao5),具体看到他的代码就可以知道。 1 2 3 4 // 书中的样例使用了基本类型转换包装类的例子 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 下面列举一下静态工厂方法获取类实例的优点和缺点: advantages: 自定义方法名称:构造方法只能是类名称,而静态工厂方法可以取具体含义的名称。这点确实,如果有多个构造函数的话,往往需要去找到底使用哪个构造函数来创建实例。 不需要每次都创建一个新的对象:如上面的例子,每次只需要返回定义好的常量即可。 静态方法返回的类型可以是定义返回类型的子类 Item 6: Avoid creating unnecessary objects 如题名,避免创建不必要的对象。 以String作为例子: 1 2 String s = new String("bikini"); // 创建一个新的实例 String s = "bikini"; // 从String池创建 以后无论创建多少个 bikini 都会指向第一次创建的地址 以正则表达式的匹配为例: 1 2 3 4 5 6 7 8 9 10 11 12 // Performance can be greatly inproved static boolean isRomanNumberal(String s) { return s.matches("^(?=.)") } // Reusing expensive object for improved performence public class RomanNumberals { private static final Pattern ROMAN = Pattern.compile("^(?=.)"); static boolean isRomanNumeral(String s) { return ROMAN.matchers(s).matches(); } } 使用基础类型而不是包装类