我是靠谱客的博主 含蓄冥王星,最近开发中收集的这篇文章主要介绍第五条:避免创建不必要的对象,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一般来说,尽可能的重用对象,如果对象是不可变的(immutable),它就始终可以被重用。

String s = new String("stringette"); //DON'T DO THIS!
该语句每次执行都会创建一个新的String实例,而这都是不必要的。

String s = "stringtte";

这样就只用了一个String实例。

对于同时提供了静态工厂方法和构造器的不可变类,通常可以使用静态工厂方法而不是构造器,以避免创建不必要的对象。

除了重用不可变的对象之外,也可以重用那些已知不会被修改的可变对象。例如:

public class Person {
private final Date birthDate;
// other fields, methods, and constructor omitted
// DON'T DO THIS!
public boolean isBabyBoomer() {
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0);
Date boomStart = gmtCal.getTime();
gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0);
Date boomEnd = gmtCal.getTime();
return birthDate.compareTo(boomStart) >= 0 && birthDate.compareTo(boomEnd) < 0;
}
}

isBabyBoomer每次调用的时候,都会新建一个Calendar、一个TimeZone和两个Date实例,这是不必要的。

可以使用一个静态的初始化器(initializer),避免这种效率低下的情况:

public class Person {
private final Date birthDate;
// other fields, methods, and constructor omitted
/**
* The starting and ending dates of the baby boom
*/
private static final Date BOOM_START;
private static final Date BOOM_END;
static{
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GTM"));
gmtCal.set(1946, Calendar.JANUARY,1,0,0,0);
BOOM_START = gmtCal.getTime();
gmtCal.set(1965, Calendar.JANUARY,1,0,0,0);
BOOM_END = gmtCal.getTime();
}
<p class="p1"><span class="s1"><span style="white-space:pre">	</span>public</span> <span class="s1">boolean</span> isBabyBoomer(){</p><p class="p1"><span>	</span><span>	</span><span class="s1">return</span> <span class="s2">birthDate</span>.compareTo(<span class="s2">BOOM_START</span>) >= 0 && <span class="s2">birthDate</span>.compareTo(<span class="s2">BOOM_END</span>) < 0;</p><p class="p1"><span>	</span>}</p>}
改进后的Person类只在初始化的时候创建Calendar、TimeZone和Date实例一次,而不是在每次调用isBabyBoomer的时候都创建这些实例。这又有个问题,如果isBabyBoomer方法永远不会调用,就没有必要初始化BOOM_START和BOOM_END域,可以通过延迟初始化,将这些初始化延迟到isBabyBoomer第一次调用时候进行(有点像单例模式的延时加载)。


最后

以上就是含蓄冥王星为你收集整理的第五条:避免创建不必要的对象的全部内容,希望文章能够帮你解决第五条:避免创建不必要的对象所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部