//测试
Person p1 =newPerson("弟弟",19);
Person p2 =newPerson("哥哥",20);
p1.equals(p2);//false,两个对象在堆内存中的地址值不一样
重写equals方法
比较两个对象的地址值,没有意义,所以需要重写equals方法,比较两个对象的属性
问题:隐含着一个多态,而多态的弊端是:无法使用子类特有的内容(方法和属性)
解决:使用向下转型(强转)把obj类型转换成子类类型
快捷键:Alt+insert
//假设子类为Person//Person类中重写equals方法publicbooleanequals(Object obj){//使用向下转型,将obj转换成Person类型
Person p =(Person) obj;//比较两个对象的属性,一个对象为this(p1),一个对象为p(obj-->p2)boolean b =this.name.equals(p.name);return b;}
//Date类的空参数构造方法//Date()获取当前系统的日期和时间
Date date =newDate();
System.out.println(date);//Thu Jun 06 16:46:36 CST 2088 (打印的不是地址值,说明Date类重写了toString方法)
//Date类的带参构造方法//Date(long date):传递毫秒值,把毫秒值转换成Date日期
Date date1 =newDate(0L);
System.out.println(date1);//Thu Jan 01 08:00:00 CST 1970
//long getTime():把当前时间转换成毫秒值(相当于System.currentTimeMills()方法)//Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
Date date =newDate();long time = date.getTime();//返回毫秒值
DateFormat类
java.text.DateFormat(抽象类)
作用:可以在Date对象和String对象之间进行来回转换
格式化:日期转String 解析:String转日期
成员方法:
String format(Date date) : 按照指定的模式,把Date日期格式化为符合模式的字符串
Date parse(String source) : 把符合模式的字符串,解析为Date日期
DateFormat类是一个抽象类,无法直接创建对象使用,可以使用Dateformat的子类
simpleDateFormat类
继承了Dateformat抽象类
构造方法:
SimpleDateFormat(String pattern) :设定日期模式
模式:区分大小写
y 年
M 月
d 日
H 时
m 分
s 秒
S 毫秒
写对应的模式,会把模式替换为对应的日期和时间 , 如:“yyyy-MM-dd HH:mm:ss”
注意:模式中的字母不能改变,但连接模式的符号可以改变,如:“yyyy年MM月dd日 HH时mm分ss秒”
DateFormat类的format方法和parse方法
//format方法:把日期转化为文本
//步骤:1)创建simpleDateFormat对象,构造方法中传入指定模式
2) 调用simpleDateFormat对象中的方法format
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String d = format.format(date);
System.out.println(d);//2019-06-06 17:18:05
//parse方法:把文本解析为日期
//步骤:1)创建simpleDateFormat对象,构造方法中传入指定模式
2) 调用simpleDateFormat对象中的方法parse
//注意:
public Date parse(String source) throws ParseException
parse方法声明了一个异常叫ParseException,如果字符串和构造方法的模式不一样,那么程序就会抛出此异常;
调用一个抛出了异常的方法,就必须处理这个异常,要么throws继续抛出,要么try..catch处理
public static void demo() throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse("2019-08-09 10:23:33");//要与模式一致
System.out.println(date);
}
public void set(int field,int value);//将给定的日历字段设置为给定值
public abstract void add(int field,int amount);//根据日历的规划,为给定的日历字段添加或减去指定的时间量
public Date getTime();返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象 其中:int field:日历类的字段,可以使用Calendar类的静态成员变量获取
/*
public int get(int field):返回给定日历字段的值
参数:指定的日历字段(YEAR,MONTH,,,,)
返回值:日历字段当前具体的值
*/publicstaticvoiddemo1(){
Calendar calendar = Calendar.getInstance();int year = calendar.get(Calendar.YEAR);
System.out.println(year);//2019int month =calendar.get(Calendar.MONTH);
System.out.println(month);//5(西方的月份0-11,东方1-12)}
/*
public void set(int field,int value):将给定的日历字段设置为给定值
参数:
int field:传递指定的日历字段
int value:给指定字段设置的值
*/publicvoiddemo2(){
Calendar calendar = Calendar.getInstance();//设置年为2020年
calendar.set(Calendar.YEAR,2020);
calendar.set(Calendar.MONTH,5);//还可以使用重载方法同时设置年月日
calendar.set(2020,5,9);}
/*
public abstract void add(int field,int amount);//把指定的字段增加或减少指定的值
参数:
int field:传递指定的日历字段
int amount:增加或减少指定的值
正数增加,负数减少
*/publicvoiddemo3(){
Calendar calendar = Calendar.getInstance();//多态//将年份减少2年
calendar.add(Calendar.YEAR,-2);
System.out.println(calendar.get(Calendar.YEAR));//2017//将月份增加3个月
calendar.add(Calendar.MONTH,3);}
/*
public Date getTime();//把日历对象转换成日期对象
*/publicstaticvoiddemo4(){
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date);}
System类
java.lang.System类,无需导包,可直接使用
public static long currentTimeMillis():返回以毫秒为单位的当前时间
public static void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);//将数组中指定的数据拷贝到另一个数组中
拆箱:从包装类对象转换为对应的基本类型 1)成员方法 int intValue():以int类型返回该Integer的值
自动拆箱与自动装箱
基本类型的数据和包装类之间可以相互转换(JDK1.5之后出现的新特性)
/*
自动装箱:直接把int类型的整数赋给包装类
*/
Integer in = 1;//相当于Integer in = new Integer(1);
/*
自动拆箱:in是包装类,无法直接参与运算,可以自动转换为基本数据类型,在进行计算
in + 2:就相当于in.valueof() + 2 = 3//自动拆箱
in = in +2 ;//再次自动装箱
*/
in = in + 2;
//ArrayList集合无法直接存储整数,可以存储Integer包装类
list.add(1);//自动装箱,list.add(new Integer(1));
int i = list.get(0);//自动拆箱,list.get(0).valueof();