第五条建议:避免重复创建相同数据的对象(相同的对象)。
2016-08-15 15:51
357 查看
一、这是什么意思
就是说,我们没必要多次创建数据值不改变的对象。二、举例需求:判断孩子是否在1900-2000年出生的。示例:①、首先了解一下Date、Calender、TimeZone、SimpleFormat类三、日期类的简单使用①、Date类作用:Java的日期类,不过已经过时,被Calender所取代。但是两个大致的方法是差不多的。1、创建构造方法:Date():获取电脑当前默认的时间Date (int year, int month, int date) :设定年月日。注:year:必须是当前年份 - 1900 才是正确的时间 month:是从0开始计算的,所以一月应该是0所以正常的示范是:Date date = new Date(2016 - 1900,8 - 1,15);//表示2016-8-15Date (int year, int month, int date, int hrs, int min);:增加了小时和分钟
Date(long date)//从元年(1970 年 1 月 1 日 00:00:00 GMT)开始计算的毫秒数
GMT:格林威治时间(等到TimeZone时候再分析)2、设定日期、修改日期 void setDate(int date) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.DAY_OF_MONTH, int date) 取代。 void setHours(int hours) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.HOUR_OF_DAY, int hours) 取代。 void setMinutes(int minutes) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MINUTE, int minutes) 取代。 void setMonth(int month) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MONTH, int month) 取代。 void setSeconds(int seconds) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.SECOND, int seconds) 取代。 3、获取指定日期将上面的set改成get就可以了4、比较日期Date继承了Comparable接口,所以可以执行两个Date之间的比较。date.compareTo(Date newDate);②、Calender作用:最新式的日期类1、创建static Calendar getInstance() 使用默认时区和语言环境获得一个日历。 static Calendar getInstance(Locale aLocale) 使用默认时区和指定语言环境获得一个日历。 static Calendar getInstance(TimeZone zone) 使用指定时区和默认语言环境获得一个日历。 static Calendar getInstance(TimeZone zone, Locale aLocale) 使用指定时区和语言环境获得一个日历。 分析:Calender无法使用构造器创建类,只能使用getInstance()方法创建。TimeZone:我们知道每个国家在不同的时区上,我们之间的时间也是不相同的。所以不同的时区时间不一样。Locale:语言环境。这两个类稍后讲解。如果不指定的话,获得的是电脑上的默认时间和时区。2、设定、修改日期 void set(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 void set(int year, int month, int date, int hourOfDay, int minute) 设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。 void set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 这几个方法都一目了然了。 注:Calender中设置了月份的常量 Calender.JANUARY ...还有一个特殊的方法: void set(int field, int value) 将给定的日历字段设置为给定值。 field指的是日期的类型。类型如下:在该方法中,参数field代表要设置的字段的类型,常见类型如下:Calendar.YEAR——年份Calendar.MONTH——月份Calendar.DATE——日期Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同Calendar.HOUR——12小时制的小时数Calendar.HOUR_OF_DAY——24小时制的小时数Calendar.MINUTE——分钟Calendar.SECOND——秒Calendar.DAY_OF_WEEK——星期几value指的是相对应的值。3、获取日期: int get(int field) 返回给定日历字段的值。 4、接收与返回Date类void setTime(Date date);Date getTime(Date date);5、比较Calendar的大小。Calendar也继承了comparable接口③、TimeZone作用:改变时区。将默认时区的改变为指定时区的时间。(不展开)④、SimpleDateFormat作用:将文本改变为日期①、创建构造方法:SimpleDateFormat(String strFormat);常用格式:SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm"); SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");②、Date与文本的互相转化Date date = myFmt.parse(String source) //将文本转化为日期String str = myFmt.format(Date date) //将日期转化为文本。四、继续制作示例①、错误示例:
public class BobyBirthday {private final Date birthday;public BobyBirthday(Date birthday){this.birthday = birthday;}//判断这个婴儿是否在1900-2000之间出生public boolean isBobyBoomer(){//创建开始日期和结束日期。Calendar start = Calendar.getInstance();Calendar end = Calendar.getInstance();start.set(1900, Calendar.JANUARY,1);end.set(2000, Calendar.JANUARY,1);Date startDate = start.getTime();Date endDate = end.getTime();return startDate.compareTo(birthday) <0 &&endDate.compareTo(birthday)>0;}}问题在于;start和end两个日期类,不管创建多少个boby对象。这两个日期类值是不变的,所以就没必要调用一次boby对象就创建一次。这样只是浪费资源所以Calender应该是一个静态的常量正确示例:
public class BobyBirthday {private final Date birthday;//设置唯一且静态的日期private static final Date START_DATE;private static final Date END_DATE;//第一次创建的时候,创建成员变量static{Calendar start = Calendar.getInstance();Calendar end = Calendar.getInstance();start.set(1900, Calendar.JANUARY,1);end.set(2000, Calendar.JANUARY,1);START_DATE = start.getTime();END_DATE = end.getTime();}public BobyBirthday(Date birthday){this.birthday = birthday;}//判断这个婴儿是否在1900-2000之间出生public boolean isBobyBoomer(){//创建开始日期和结束日期。return START_DATE.compareTo(birthday) <0 &&END_DATE.compareTo(birthday)>0;}}总结:当类中存在重复创建该类但其的值不变的对象,说明应该设置成静态的常量
相关文章推荐
- 避免创建重复的对象
- 第五条——避免创建不必要的对象
- 第五条 避免创建不必要的对象。
- 第4条:避免创建重复的对象
- 避免创建重复的对象
- JAVA:避免重复的创建对象
- mysql中避免重复插入相同数据(insert if not exists)
- Effective Java 第五条:避免创建不必要的对象
- 第五条:避免创建不必要的对象
- java避免创建重复的对象
- (effective java) 避免重复创建对象——创建String
- Effective Java 学习 第五条 避免创建不必要的对象
- 使用静态代码块解决避免创建多个相同功能对象
- 第五条:避免创建不必要的对象
- Java性能优化(4):避免创建重复对象
- 上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中
- 避免创建重复的对象
- effective-java学习笔记(2)避免在程序中创建重复的对象
- 避免创建重复的对象
- Item 4:避免创建重复的对象