18-Object类 -tostring equals 方法

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 可以相减了

猜你喜欢

转载自blog.csdn.net/shwjakak/article/details/120556759