避免创建重复的对象
来源:互联网 发布:知肤泉水光面膜价格 编辑:程序博客网 时间:2024/06/09 13:59
如果一个类是非可变类 那么它总是可以被重用。
作为一个极端的反面例子,考虑下面的语句;
string s=new string(“silly”); 该语句每次被执行都创建一个String的实例。但是这些创建对象的动作没有一个是必须的。我们可以直接使用string s=“silly”代替;
除了重用非可变的对象之外,对于那些已知不会被修改的可变对象,你也可以重用他们,下面是一个比较微妙,也比较常见的反咧,其中涉及可变对象,它们的值一旦被计算出来之后就不会再有变化。
看看下面的例子说明:
package game.notchange;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Person {
private final Date birthDate;
public Person(Date birthDate){
this.birthDate=birthDate;
}
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对象,一个新的date对象和2个boomstart跟boomend实例。这个是不必要的,那么我们如何避免上面的例子呢。
package game.notchange;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class AnotherPerson {
private final Date birthDate;
public AnotherPerson(Date birthDate){
this.birthDate=birthDate;
}
/**
* the starting and ending dates of the body room
*/
private static Date boom_start=null;
private static Date boom_end=null;
static{
Calendar gmtCal=Calendar.getInstance(TimeZone.getTimeZone("GMT"));
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();
}
public boolean isContaer(){
return birthDate.compareTo(boom_start)>=0 && birthDate.compareTo(boom_end)<0;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
很可能有人会问到 static final到底该怎么用 。
static 故名思议静态的 被static修士的成员变量跟成员方法独立于类的任何对象。也就是说,它不依赖于任何特定的类的实例,被类所有实例共享。只要这个类被加载。java虚拟机就能根据雷鸣在运行时数据区的方法去内找到他们。
static变量节省内存。对于静态变量在内存中只有一个拷贝。
static方法静态方法可以通过雷鸣调用,任何的实例也可以调用。因此静态方法中不能用this跟super关键字。
static代码块 叫做静态代码块 每个代码只会被执行一次。
1fianl变量:一旦定义 或者被初始化变不可改变。在这里的不可改变的意思对于基本类型来说是其值不可变,而对于对象变量来说其引用不可改变。
final 方法 不允许子类覆盖这个方法。
第一 把方法锁定 防止修该
第二 搞笑。编译器在遇到final方法是会转入内嵌机制。
final 类
不能被继承,因此final类的成员方法没有机会覆盖,默认都是final的
- 避免创建重复的对象
- 避免创建重复的对象
- 避免创建重复的对象
- 避免创建重复的对象
- java避免创建重复的对象
- JAVA:避免重复的创建对象
- 第4条:避免创建重复的对象
- 第五条建议:避免重复创建相同数据的对象(相同的对象)。
- 避免创建不必要的对象
- 避免创建不必要的对象
- 避免创建不必要的对象
- 避免创建不必要的对象
- 避免创建不必要的对象
- 避免创建不必要的对象。
- 避免创建不必要的对象
- android 避免线程的重复创建
- effective-java学习笔记(2)避免在程序中创建重复的对象
- Java性能优化(4):避免创建重复对象
- 用Backbone.js写一个增删改查表
- 通过FormsAuthentication类实现自动登录
- java编译的问题
- android 传感器相关文章
- Oracle并发连接数的设置
- 避免创建重复的对象
- 黑苹果 10.8
- 探究网页中检测QQ登录原理
- A. Double Cola
- mysql MYISAM引擎子分区分散IO.sql
- 通过Mysql语句得到mysql安装路径
- C#如何定义数组
- 在线学习技术教程地址汇总
- Windows Phone代码混淆