1.Object类的tostring方法
2.Object类的equals方法
Person默认继承了Object类,所有可以使用object类的equals方法 boolean equals (Object obj); Object中的成员方方法 指示其他某个对象是否与此对象相等 Object类中equals方法的源码 public boolean equals(Object obj){ return (this==obj); == 本来就是一个比较运算符返回的就是一个boolean值 true or false } 参数:Object obj;可以传递任意的对象 方法体: == 本来就是一个比较运算符返回的就是一个boolean值 true or false 基本数据类型:比较的是值 引用数据类型:比较的是两个对象的地址值 this:哪个对象调用的方法,方法中的this就是哪个对象 这里是person调用的equals方法,所以this就是person boolean equals (Object obj); 中的obj是:传递过来的参数person1 this == obj 比较的是 person == person1 又因为引用数据类型比较的是地址值所以地址值不相等
3.重写equals方法
用Objects类中的equals方法比较地址值也是没有意义的,因为new两个对地址值肯定不一样,所以重写equals方法用来比较对象的属性值(name 和 age)一样true 不一样 false
用Objects类中的equals方法比较地址值也是没有意义的,因为new两个对地址值肯定不一样,所以重写equals方法 用来比较对象的属性值(name 和 age) 问题:隐含着一个多态 Object obj = person1 = new Person("古力娜扎",20); Object(父) obj=new Person(子)("古力娜扎",20);这个相当于是多态 多态弊端:无法使用子类特有的内容(属性方法) //成员变量 编译看左运行看左 成员方法 编译看左运行看右 解决 可以使用[向下转型] 把Object-->person类型
@Override public boolean equals(Object o) { if (this == o) return true; 内存地址值相同 直接true if (o == null || getClass() != o.getClass()) return false; 若果某个对象为空或者类型不一样 返回false Student student = (Student) o; 向下转型 return age == student.age && 比较两个对象年龄 Objects.equals(name, student.name); 比较姓名 注意这里是Objects类 注意
Person类
psvm
加instanceof判断
优化1 ; 输入 随机数或者null
优化2 null
优化3. person.equals(person) 自己跟自己比较
直接快捷键重写equals
4.细说Objects类
Objects类是一个工具类(不是Object祖类),提供了一些方法来操作对象,注意:他是由一些静态的实用方法组成,这些方法是空指针安全或容忍空指针的方法,用于计算对象的hashcode,返回对象的字符串表示形式,比较两个对象。
5.object 和 objects类
Object类
1)object类是所有类的父类,每一个类都会直接或者间接的继承自该类.
该类中提供了一些常用方法
2)tostring
作用: 用来打印对象的信息 重写前打印的是包名+类名+@+地址值、
重写后:打印的是对象中的属性值
3).equals()方法
作用:比较两个对象
重写前 比较的是对象的地址值
重写后 比较的是两个对象的属性
4)Objects类
objects是对象的工具类
有个equal方法 注意这里Objects.equals 调用和直接对象名.equals调用是不同的
public static boolean equals(Object a, Object b) {
return a == b || a != null && a.equals(b);
解释: a==b 或者 a不等于空而且&&他俩的属性值完全一样则返回true 相当于加了一个条件判断是否为空
Objects.equals()方法作用
比较两个对象是否相同,但是增加了一些健壮性的判断。
tostring
equals
Objects.equals
6.日期时间类 Date类
Java.util.Date类表示特定的瞬间,精确到毫秒
Java.util.Date类是表示时间和日期的类 类Date表示特定的瞬间,精确到毫秒 毫秒:千分之一秒 1000毫秒 = 1秒 特定的瞬间:一个时间点,一刹那时间 2088-08-08 09:55:33:333瞬间 2088-08-08 09:55:33:334瞬间 2088-08-08 09:55:33:335瞬间 毫秒值的作用,可以对时间和日期进行计算 2009-01-03到2088-01-01中间有多少天 可以日期转换为毫秒进行计算,计算完毕之后再把毫秒转化为日期 如何把日期转换为毫秒: 当前的日期2088-01-01 时间原点(0毫秒) 1970 年 1 月 1 日 00:00:00 就是计算当前日期到时间原点之间一共经历了多少毫秒(1633275691977L) 把毫秒转化为日期:一天=24*60*60=84000秒=86400000毫秒 注意:中国属于东八区。会把时间增加八小时 因为时间原点为英国格林威治 有方法System.currentTimeMillis() //获取当前系统时间一共到 1970 年 1 月 1 日 00:00:00经历了多少毫秒
7.Date类的构造方法和成员方法
date是一个类,这些方法是类中的构造方法和成员方法,所以可以直接调用
date空参获取的是系统当前的时间
Date带参数的构造方法:其实就是传递毫秒值,把毫秒转换为date日期
Date类的一个成员方法:Long getTime(); 把当前时间日期转换为毫秒 相当于System.currentTimeMillis() 一样的
8.DateFormat类 和SimpleDateForma类介绍
1)DateFormat类 Format是格式化的意思 DateFormat是继承(extends) Format类,是Format类的子类而且还是一个抽象类
来自Java.text.DateFormat是日期时间格式化子类的抽象类,我们通过这个类可以帮助我们完成日期和文本之间的转换,也就是可以在Date对象和String字符串之间来回转换。但是由于DateFormat类是一个抽象类abstract 不能直接使用所以我们用子类SimpleDateForma类来用
格式化:按照指定的格式,从Date转为字符串String对象(日期--》文本)
解析:按照指定的格式从String对象转换为Date对象。(文本--》日期)
java.text.DateFormat是日期时间格式化子类的抽象类 作用: 格式化:按照指定的格式,从Date转为字符串String对象(日期--》文本) 解析:按照指定的格式从String对象转换为Date对象。(文本--》日期) 怎么用 simopleDateForma两个成员方法 String format(Date date); :按照指定的模式把Date日期格式化为符合模式的字符串 Date parse(String source):把符合模式的字符串解析为date日期 DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat的子类simpleDateFormat来创建对象使用 SimpleDateFormat的构造方法 SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat的构造方法 (String pattern) 参数是pattern pattern是模式 所以是传递指定的模式 模式不区分大小写 模式 y M d 年月日 H小时 m分钟 s秒数 S毫秒数 写对应的模式,会把模式替换为对应的日期和时间 "yyyy-MM-dd HH:mm:ss"或 ”yyyy年MM月dd日 HH时mm分钟ss秒 注意:模式当中的字母不能更改的但连接模式的符号可以改变
9. simpledateformat类中两个format 和 parse成员方法
public class Demo03DateFormat { public static void main(String[] args) throws ParseException { method01(); } /* 使用 DateFormat类中的format,把日期转化为文本 String format(Date date); :按照指定的模式把Date日期格式化为符合模式的字符串 步骤:1.创建simpledateformat对象,构造方法中要传递指定的格式 2.调用simpledateformat对象中的方法format,按照构造方法中的指定格式,把date转化为字符串文本格式 */ private static void method01() throws ParseException { //1.创建simpledateformat对象,构造方法中要传递指定的格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //传模式 //2.调用simpledateformat对象中的方法format,按照构造方法中的指定格式,把date转化为字符串文本格式 Date date = new Date(); //date空参数构造方法 date是当前日期时间 System.out.println(date); //Mon Oct 04 10:44:30 GMT+08:00 2021 System.out.println(sdf.format(date)); //调用String format(Date date);方法得到 2021-10-04 10:43:42 //使用parse方法把文本解析为日期date Date parse(String source):把符合模式的字符串解析为date日期 //1.创建simpledateformat对象,构造方法中要传递指定的格式 SimpleDateFormat sdf01 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //2.调用simpledateformat对象中的方法parse,按照构造方法中的指定格式,把字符串文本格式解析为date Date date1=sdf01.parse(" 2021-10-04 10:43:42"); // Date parse(String source):把符合模式的字符串解析为date日期 括号里传一个字符串source //注意:parse方法声明了一个异常 parseException解析异常 如果字符串和构造方法中的模式不一样程序会抛出此异常(模式不匹配) //调用了一个抛出了异常的方法就必须处理这个异常,要么throws继续声明这个异常,要么try...catch 自己处理这个异常 System.out.println(date1); } }
10.练习:使用日期时间相关API,计算一个人出生了多少天
练习:请使用日期时间相关的API,计算出一个人已经出生了多少天 分析:1.获取出生日期 使用Scanner类中的next,获取出生日期 2.将字符串出生日期解析为为date格式 用SimpleDateFormat类中的parse方法 3.把date转化为毫秒值 用Date类中的getTime()方法 Date-->long 可以相减了