java基础进阶(一)——创建和销毁对象

这系列由笔者在读《Effective Java》时做的一些笔记和提醒自己的思考方法(其中有些术语是参照书的):


(一)用静态工厂方法代替构造器:

静态工厂方法是类提供的一个返回类的实例的静态方法。

优势:

1.具有名称,它不像构造器一样用类名,它可以拥有自己的方法签名,这在某些情况下更便于阅读,如类中只能带有一个指定签名的构造器,但当需要多个构造器时,往往会采用改变参数顺序的方式,这不便于阅读,这时就可以用静态工厂方法,如一个类Triangle返回是一个等腰三角形,这是用一个静态工厂方法,Triangle.等腰三角形就更清楚了。


2.不必每次调用都创建一个新对象,用静态工厂方法返回的对象,由始至终只有一个,可以将他重复利用,就可以避免垃圾回收器没有及时回收无用对象时造成性能降低。同时,我们可以采用==代替equals.


3.可以返回原返回类型的子类型,便于多态的实现


4.创建参数化类型的实例(泛型)时,可以使代码简洁,如HashMap.newInstance()就可以得到想要的参数化类型的实例对象。这称为类型推导。


(二)当遇到多个构造参数(必须和可选)时,考虑使用构建器


其他可选方法:

(1)重叠构建器,创建多个构造器,参数依次递增,但当参数非常多时,会使得代码难以阅读,而且可能会强迫用户设置无用参数,如我只想传进第一个参数和最后一个可选参数就变得十分麻烦。


(2)JavaBeans模式,先通过一个无参的构造器创建对象,之后用setter方法设置想要的参数。缺点:这样所创造的类的状态不同步,可能会得到不一致的对象。


通过构建器的方法(builder模式):

在类中创建一个静态成员类,由这个类对象作为外部类的构造器中的参数,而参数的设置都放进这个静态成员类中,静态成员类中包含一个构造器用来初化始必要的参数,然后通过类似setter方法来初始化可选参数,还需要一个build方法来调用外部类的构造器,甚至可以把这个静态成员类提取出来变成接口

如:NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).sodium(35).build();


(三)用单元素的枚举类型来实现Singleton(只会实例化一次的类)


(五)要优先使用基本类型而不是装箱基本类型(会创建实例)


(六)要消除无用的对象

即使有垃圾回收器,例如:当一个栈先增长后收缩,所弹出来的对象不会被立即回收,甚至会导致内存泄漏,所以要手动清除,element[size] = null


(七)避免使用终结方法finalizer(

终结方法的线程无法保证能够及时执行,所以在更新一些持久的画面或者耗时操作,强烈不要使用终结方法,因为进的速度可能远远大于出,还会导致性能缺失。而终结方法的用处可以把终结方法放在一个类中的匿名类中,该匿名类实体作为终结方法守卫者,负责调用终结方法。(当用户忘记手动让子类调用父类的终结方法)


你可能感兴趣的:(java)