第五条建议:避免重复创建相同数据的对象(相同的对象)。
来源:互联网 发布:excel编程vba视频教程 编辑:程序博客网 时间:2024/06/13 01:48
一、这是什么意思
就是说,我们没必要多次创建数据值不改变的对象。
二、举例
需求:判断孩子是否在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-15
Date (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) 取代。
已过时。 从 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)
使用指定时区和语言环境获得一个日历。
使用默认时区和语言环境获得一个日历。
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 的值。
设置日历字段 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——星期几
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");
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;}}
总结:当类中存在重复创建该类但其的值不变的对象,说明应该设置成静态的常量
0 0
- 第五条建议:避免重复创建相同数据的对象(相同的对象)。
- 第五条:避免创建不必要的对象
- Effective Java第五条:避免创建不必要的对象
- Effective Java 学习 第五条 避免创建不必要的对象
- Effective Java 第五条:避免创建不必要的对象
- 避免创建重复的对象
- 避免创建重复的对象
- 避免创建重复的对象
- 避免创建重复的对象
- 第4条:避免创建重复的对象
- 相同对象的复制
- java避免创建重复的对象
- JAVA:避免重复的创建对象
- list集合移除某个属性相同的重复对象
- 去除相同对象的集合
- Effective java第五条:避免创造不必要的对象
- CBitmap拷贝函数(根据一个CBitmap对象创建另一个相同的CBitmap对象)
- 第四条-避免使用重复的对象
- mysql创建外键约束报错【Bug Fix】Error : Can't create table '#sql-534_185' (errno: 150)
- 如何对指定区域进行坡度统计分析
- iOS OC NSData基本用法
- LightOJ 1104 Birthday Paradox【数学概率】
- leetcode-java-94. Binary Tree Inorder Traversal
- 第五条建议:避免重复创建相同数据的对象(相同的对象)。
- 欢迎使用CSDN-markdown编辑器
- C#调用默认浏览器打开网页的几种方法
- Kafka启动脚本
- Java类集框架——List接口
- 海量数据处理问题
- 在xcode模拟器上运行3Dtouch
- java 加解密工具类
- 设计模式6大原则---1