toString() equals(Object obj) Date类 DateFormat类

Object类

java.lang.Object
类 Object 是类层次结构的根(父)类。
所有对象(包括数组)都实现这个类的方法。

toString()方法

  • 作用: 打印对象信息
  • 重写前:直接打印对象名=调用该方法分的toString类:
  System.out.println(r)==System.out.println(r. toString())

如果没有重写toString()方法,返回的就是地址值。

  • Alt+Insert键选择toString()方法重写
 @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

  • 重写后:返回对象中的属性值

equals(Object obj)方法

  • 作用:比较两个对象是否相同,但是加了一些健壮性的建设
  • 重写前:基本数据类型和String类型比较的是值,引用数据类型比较的是地址值
 /*boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
            equals方法源码:
                public boolean equals(Object obj) {
                    return (this == obj);
                }
                参数:
                    Object obj:可以传递任意的对象
                    == 比较运算符,返回的是一个布尔值 true false
                    基本数据类型:比较的是值
                    引用数据类型:比价的是两个对象的地址值
               this是谁?那个对象调用的方法,方法中的this就是那个对象;p1调用的equals方法所以this就是p1
               obj是谁?传递过来的参数p2
               this==obj -->p1==p2
 */              
import java.util.Objects;

public class Equals {
    public static void main(String[] args) {
        String a1="hello";
        String a2="hello";
        String a3=null;
        Person p1=new Person("zy",15);
        Person p2=new Person("ly",20);
        boolean b = p1.equals(p2);
        System.out.println(b);//false,比较的是地址值

        boolean c = a1.equals(a2);//String 重写了equals方法,比较的是值
        System.out.println(c);//true

        // boolean d = a3.equals(a2);//
        //System.out.println(d);//错误 NullPointerException  不能调用方法,会抛出空指针异常。

        boolean e = Objects.equals(a3,a2);//
        System.out.println(e);//false
        // 原因:
        // public static boolean equals(Object a, Object b) {
        //        return (a == b) || (a != null && a.equals(b));
        //    }


    }
}

  • Alt+Insert键选择equals()andhashCode()方法重写(选java7那个比较好)
 @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        //getClass() != o.getClass() 使用反射技术,判断o是否是Person类型  等效于 obj instanceof Person
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }
    public static void main(String[] args) {

    }
  • 重写后:比较两个对象属性值是否相同

Date类

java.util.Date是一个表示日期和时间的类,可以精确到毫秒(1000毫秒=1秒)。
时间原点(0毫秒):1970 年 1 月 1 日 00:00:00(英国格林威治)
注意:

  • 中国属于东八区,会把时间增加8个小时(1970 年 1 月 1 日 08:00:00)

利用Date类可以计算一时间到另一时间过了多少天

import java.util.Date;

public class Demo02Date {
    public static void main(String[] args) {
        demo01();
        demo02();
        demo03();
    }

    /*
        long getTime() 把日期转换为毫秒值(相当于System.currentTimeMillis()方法)
          返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
     */
    private static void demo03() {
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);//1617524371529
    }

    /*
        Date类的带参数构造方法
        Date(long date) :传递毫秒值,把毫秒值转换为Date日期
     */
    private static void demo02() {
        Date date = new Date(0L);//0l表示时间原点
        System.out.println(date);// Thu Jan 01 08:00:00 CST 1970

        date = new Date(3742767540068L);
        System.out.println(date);// Sun Aug 08 09:39:00 CST 2088
    }

    /*
        Date类的空参数构造方法
        Date() 获取当前系统的日期和时间
     */
    private static void demo01() {
        Date date = new Date();
        System.out.println(date);//Sun Apr 04 16:19:31 CST 2021
    }
}

DateFormat类

它是Format类的子类,是一个格式化日期、时间的抽象类
功能:

  1. 格式化 : 日期–>文本 String Format(Data date);
  2. 解析: 文本–>日期 Date parse (String sourse);
    因为DateFormat类是抽象类,因此,我们使用它的子类:java.text.SimpleDateFormat,它的构造方法-------SimpleDateFormat(String pattern)
    pattern:字符串,代表日期、时间的自定义格式。
    pattern常用格式(区分大小写):
    年 y
    月M
    日d
    时H
    分m
    秒s
    举例:
    yyyy-MM-dd HH:mm:ss
    yyyy年MM月dd日 HH时mm分ss秒
    (字母不能改,链接符号可以改!)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFomat {
    public static void main(String[] args) throws ParseException {
       demo01();
        demo02();
    }

    private static void demo02() throws ParseException {
        //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
        SimpleDateFormat s2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        //2.调用SimpleDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为Date日期
        //Date parse(String source)  把符合模式的字符串,解析为Date日期
        Date d1 = s2.parse("2007年01月08日 15时00分59秒");
        System.out.println(d1);//Mon Jan 08 15:00:59 CST 2007
    }


    private static void demo01() {
        //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        //2.调用SimpleDateFormat对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
        //String format(Date date)  按照指定的模式,把Date日期,格式化为符合模式的字符串
        Date d1 = new Date();
        String text = sdf.format(d1);
        System.out.println(d1);//Sun Apr 04 16:02:49 CST 2021
        System.out.println(text);//2021-04-04 04:02:49
    }
}

利用Format类、Date类计算一个人出生了多少天

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class DateTest {
    public static void main(String[] args) throws ParseException {
        //1.使用Scanner类中的方法next,获得出生日期
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你的出生日期,格式为:yyyy-MM-dd" );
        String birthday= sc.next();
        //使用DateFormat类中的方法parse,把字符串类型的出生日期解析为Date格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birth = sdf.parse(birthday);
        //把Date格式的日期转换为毫秒值
        long  birthTime = birth.getTime();
        //获取当前日期的毫秒值,转换为毫秒值
        long todayTime=new Date().getTime();
        //当前-出生,得到毫秒值差
        long time=todayTime-birthTime;
        //把毫秒值转换为天
        System.out.println(time/1000/60/60/24);
        
    }
}

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值