java常用类中的Obje类和日期时间类

Object类

概述

object类是java.lang.object,包下的类,是java语言的根类(最顶层),即所有类的父类。它描述的所有方法子类都可以使用。在实例化对象是最终找到的父类就是object类;

1.object:java.lang.Object
2.类Object是类层次结构的根(最顶层)。每个类都有Object一个超类(父类)。
  所有对象(包括数组)都实现此类的方法。


import com.commonClass.Object.toString.Person;

        import java.util.Random;
        import java.util.Scanner;
        import java.util.stream.DoubleStream;

public class Application {
    public static void main(String[] args) {
        //person类是默认继承Object类的,我们可以使用Object类中的toString方法;
        Person person1 = new Person("浩鑫",13);
        Person person2 = new Person("Andy",13);

toString()方法

  1. 作用:打印对象的信息
  2. 重写前:打印的包名、类名@地址值
package com.commonClass.Object.toString;

import java.util.Random;
import java.util.Scanner;

public class  Person {
    private String name;
    private int age;

    public Person() {
    }
package com.commonClass;

1.object:java.lang.Object
2.类Object是类层次结构的根(最顶层)。每个类都有Object一个超类(父类)。
  所有对象(包括数组)都实现此类的方法。
import com.commonClass.Object.toString.Person;

        import java.util.Random;
        import java.util.Scanner;
        import java.util.stream.DoubleStream;

public class Application {
    public static void main(String[] args) {
        //person类是默认继承Object类的,我们可以使用Object类中的toString方法;
        Person person1 = new Person("浩鑫",13);
        Person person2 = new Person("Andy",13);
        //调用toString方法
        String s1=person1.toString();
        String s2=person2.toString();
        //直接调用打印对象,事实上就是默认调用了toString方法
        System.out.println(s1.toString());//com.commonClass.Object.toString.Person@1b6d3586
        System.out.println(s2);//com.commonClass.Object.toString.Person@4554617c
        //直接调用toString方法,其实就是打印对象的地址和直接打印对象没有区别
        System.out.println(person1);//com.commonClass.Object.toString.Person@1b6d3586
        System.out.println(person2);//com.commonClass.Object.toString.Person@4554617c
  1. 重写后:打印的是对象的属性值
package com.commonClass.Object.toString;

import java.util.Random;
import java.util.Scanner;

public class  Person {
    private String name;
    private int age;

    public Person() {
    }

   //重写toString方法可以使用快捷键:Alt+insert 选中toString 方法
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}
package com.commonClass;

1.object:java.lang.Object
2.类Object是类层次结构的根(最顶层)。每个类都有Object一个超类(父类)。
  所有对象(包括数组)都实现此类的方法。
import com.commonClass.Object.toString.Person;

        import java.util.Random;
        import java.util.Scanner;
        import java.util.stream.DoubleStream;

public class Application {
    public static void main(String[] args) {
                //重写了toString方法后再重新输出
        System.out.println(person1);//person={name=浩鑫,age=13}
        System.out.println(person2);//person={name=Andy,age=13}

        看一个类是否重写了toString方法,就直接打印这个类实例化的对象名字
            如果没有重写,打印出来的就是对象的地址(默认方法)
            如果重写了,那么就是按照重写的方式打印

        System.out.println(new Random().ints());//没有重写toString方法

        System.out.println(new Scanner(System.in));//重写toString方法


    }
}

equals()方法

  1. 作用:比较两个对象
  2. 重写前:比较两个对象的地址值
package com.commonClass.Object.equals;

import java.util.Objects;
import java.util.Random;

public class Person {
    private  String name;
    private  int age;

    public Person() {
    }

    public Person(String name, int age) {
       this.name = name;
        this.age = age;
    }

package com.commonClass;

1.object:java.lang.Object
2.类Object是类层次结构的根(最顶层)。每个类都有Object一个超类(父类)。
  所有对象(包括数组)都实现此类的方法。


import com.commonClass.Object.equals.Person;

        import java.util.Random;

public class Application {
    public static void main(String[] args) {
        /*person类是默认继承Object类的,我们可以使用Object类中的equals方法;
          比较两个对象是否相等
          object类equals方法的源码:
           public boolean equals(Object obj) {
              return (this == obj);
           }
             参数:
                 Object obj: 可以传递任意的对象
             方法体:
                 ==:比较运算符,返回的是一个布尔值,不是true 就是 false
                 基本数据类型:比较的是值
                 引用数据类型:比较的是地址值
*/
        Person person1 = new Person();
        Object person2 = new Person();
        Random r = new Random();
        //通过boolean进行比较,比较的是对象的地址值
        boolean tese=(person1==person2);//false
        System.out.println(tese);
        //通过调用equals方法进行比较
        //直接使用对象进行比较,比较的是对象的地址值,要通过方法重写比较两者的属性值
        person1=person2;
        System.out.println(person1.equals(person2));//true
  1. 重写方法后:比较的是对象的属性值
package com.commonClass.Object.equals;

import java.util.Objects;
import java.util.Random;

public class Person {
    private  String name;
    private  int age;

    public Person() {
    }

    public Person(String name, int age) {
       this.name = name;
        this.age = age;
    }
    /*
    Object类中的equals方法默认比较的是对象的地址值,没有意义
    我们需要重写equals方法,来比较两个对象的属性值
    问题:
       Object类隐含了一个多态。
       多态的弊端:无法使用子类特有的方法和属性
       解决方法:使用向下转型(类型的强制转换)
     */


    @Override

    public boolean equals(Object obj) {
        //增加一个判断,当传递进来的参数为this时,直接返回true
        if(obj==this){
            return true;
        }
        //增加一个判断,当传递进来的参数为null时,直接返回false
        if(obj==null){
            return false;
        }
        //使用instanceof关键字,判断传递进来的参数和本类,是否存在父子类的关系
        if(obj instanceof Person){
            Person person=(Person)obj;
            //使用try-catch,避免当出现当this.name=null是,出现空指针异常
            try {
                return this.age==person.age && this.name.equals(person.name);
            } catch (Exception e) {
                //出现空指针异常时,让person.name与null进行比较
                return this.age==person.age && person.name==null;
            }
        }
        //当传递进来的参数与本类无父子关系,直接防护false
        return false;
    }

//可以使用快捷键Alt+insert 添加equalt方法

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }


}  
public class Application {
    public static void main(String[] args) {
        Person person1 = new Person();
        Object person2 = new Person();
         System.out.println(person1.equals(person2));//false
        }

Objects类中的equals()方法

  • 作用:比较两个对象,家里一些健壮性的判断
package com.commonClass.Object.Objects;

import java.util.Objects;

public class Test {
    //定义一个测试类
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package com.commonClass;
/*
1.object:java.lang.Object
2.类Object是类层次结构的根(最顶层)。每个类都有Object一个超类(父类)。
  所有对象(包括数组)都实现此类的方法。
*/

import com.commonClass.Object.Objects.Test;

        import java.util.Objects;
//objects是JDK7添加的一个工具类,里面的方法都为静态方法,我们可以直接调用

public class Application {
    public static void main(String[] args) {
        Test test1 = new Test();
        Test test2 = new Test();
        test1.setName(null);
        test2.setName("浩鑫");
        /*调用方法的对象为null时,使用Object中的equals方法会出现NullPointerException(空指针异常)
        //所以,我们可以使用Objects中的equals方法来避免出现异常
        //System.out.println(test1.getName().equals(test2.getName()));

        1.Objects类中的equals方法是空指针安全的,是允许空指针的
        2,源码:   public static boolean equals(Object a, Object b) {
                   return (a == b) || (a != null && a.equals(b));
                   }
        3.Objects类中的equals方法是直接传入两个对象进行比较
*/
        System.out.println(Objects.equals(test1.getName(), test2.getName()));

    }
}

日期时间类

Date类

  • java.util.Date 表示特定的瞬间,精确到毫秒。
  • 常用的方法有:
    1. Date() 无参构造方法:获取当前系统的日期和时间
    2. Date(long date) 有参构造方法:将毫秒值转化为日期
    3. getTime() 成员方法:将日期转换为毫秒值
package com.commonClass.Date.date;
/*
1.java.util.Date:表示日期与时间
2.该类Date表示特定的时间瞬间,精度为毫秒。
3.1000毫秒=1秒
4.毫秒值的作用:可以对日期和日期进行计算,例如:从2020-1-1到2025-6-24中间一共有多少天、
5.计算时:可以先把日期转换成毫秒,计算完毕后,再毫秒转换为日期
6.毫秒值是一个long类型的值
7.把日期转换为毫秒:当前日期为 2020-6-24
                 默认的时间原点(0毫秒):1970年1月1日 00;00;00(英国格林威治标准时间)
                 注意点:中国属于东八区:默认的实际原点要增加8小时 1970年1月1日 08;00;00
8.把毫秒转换为日期:1天=24*60*60=86400秒=86400*1000=86400000L毫秒

 */

import javax.xml.soap.DetailEntry;
import java.util.Date;

public class Demo01 {
  public void date1(){
      /*
      Date类的空构造方法
      Date():获取当前系统的日期和时间
       */
      System.out.println(new Date());
  }
  public void date2(){
      /*
      Date类带参数的构造方法
      Date(long date):传递一个毫秒值,把毫秒化为Date日期
       */
      System.out.println(new Date(1592982995640L));
  }
  public void date3(){
      /*
      Date类的成员方法
      long getTime():把日期转换为毫秒值(相当于:System.currntTimeMillis())
       */
      System.out.println(new Date().getTime());
  }

}
import com.commonClass.Date.date.Demo01;

public class Application {
    public static void main(String[] args) {
        //System.out.println(System.currentTimeMillis());//获取当前系统的时间到时间原点的毫秒值
        //获取当前系统的时间
        new Demo01().date1();//Wed Jun 24 14:56:29 GMT+08:00 2020
        //将输入的毫秒值转换为日期
        new Demo01().date2();//Wed Jun 24 15:16:35 GMT+08:00 2020
        //获取当前系统的毫秒值
        new Demo01().date3();//1592982875531

    }
}

DateFormat类

  1. java.text.Format. 它是一个抽象类,是日期/时间格式化的子类
  2. 抽象类不能被实例化,我们需要借助DateFormat的子类:SimpleDateFormat去调用DateFormat中的方法
  3. 常用的方法有:
    • format()方法:将日期(Date对象)格式化为文本(字符串)
    • parse()方法:将文本(字符串)解析为日期(Date对象)

SimpleDateFormat类

SimpleDateFormat:java.text.SimpleDateFormat exdents DateFoemat
构造方法:SimpleDateFormat(String pattern):使用给定的模式和默认Format语言环境的默认日期格式符号构造。
   参数:String pattern
   模式:区分大小写的
        y-->年
        M-->月
        d-->日
        H-->时
        m-->分
        s-->秒
        对应的书写模式:"yyyy-MM-dd HH:mm:ss"  "yyyy年MM月dd日 HH时mm分ss秒"
        注意点:书写的模式中,字母是不能改变的,且区分大小写,连接字母之间的符号是可以改变的
package com.commonClass.Date.dateFormat;
/*
java.text.DateFormat:是日期/时间格式化子类的抽象类
作用:格式化(日期-->文本),解析(文本-->日期)
成员方法:
       String  format(Date date):把传递进来的Date对象格式化,转换成符合文本规范的字符串
       Date    parse(String source):把传递进来的字符串解析,转换成Date对象
DateFormat是一个抽象类,无法直接使用new关键字来实例化使用,可以使用DateFormat的子类 SimpleDateFormat

 */

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

public class Demo01 {
/*
使用DateFormat中的format方法,把日期格式化为文本
使用步骤:
1.实例化SimpleDateFormat,将要实现的文本格式传递进去
2.调用format方法,将传进去的Date对象转换为规范的文本格式
 */
public void dateFormat1(){
        System.out.println(new SimpleDateFormat("yyyy,MM,dd HH:mm:ss").format(new Date()));
    }
/*
使用DateFormat中的parse方法,把文本解析为日期
1.实例化SimpleDateFormat,将要实现的文本格式传递进去
2.调用parse方法,将传进去规范的字符串转换为规范的Date对象
注意:parse方法中声明了一个异常,如果要使用parse方法需要在方法中捕获(try-catch)异常
     或者在方法外throws,继续向外抛出
 */
    public void dateFormat2(){
        try {
            Date parse1 = new SimpleDateFormat("yyyy-MM-dd").parse("2020-01-01");
            Date parse2 = new SimpleDateFormat("yyyy-MM-dd").parse("2025-06-24");
            System.out.println(parse1);
            System.out.println(parse2);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

}
package com.commonClass;

import com.commonClass.Date.dateFormat.Demo01;

public class Application {
    public static void main(String[] args) {
        new Demo01().dateFormat1();//2020,06,24 17:10:31
        new Demo01().dateFormat2();//Wed Jan 01 00:00:00 GMT+08:00 2020
                                   //Tue Jun 24 00:00:00 GMT+08:00 2025


    }
}
package com.commonClass.Date.test;

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

/*
练习题:
请使用日期相关的API计算一个人出生了多少天
 */
public class Demo01 {
    public long date(){
        boolean flag=true;
        long count=0;
        long result=0;
        while (flag) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入出生日期,输入格式为:yyyy-MM-dd");
            flag=false;
            try {
                long parse = new SimpleDateFormat("yyyy-MM-dd").parse(scanner.nextLine()).getTime();
                count=parse;
            } catch (ParseException e) {
                System.out.println("输入格式错误,请重新输入");
                flag=true;
            }

        }
        long time = new Date().getTime();

        if(time-count>0){
            long sun=time-count;
            result=sun/(24*60*60*1000);
        }else{
            return 0;
        }

        return result;
    }
}
package com.commonClass;

import com.commonClass.Date.test.Demo01;


public class Application {
    public static void main(String[] args) {
        System.out.println(new Demo01().date());


    }

}

Calendar类

  1. java.util.Calendar:Calendar类是一个抽象类,是是日历类
  2. 我们通过Calendar的静态方法getInstance()去实例化Calendar
  3. 我们常用的方法有:
    • int get(int field):返回给定日历的值
    • void set(int field int value):将给定的日历字段设置成给定的值
    • void add(int field int amount):给日历字段添加或减去指定的值
    • Date geiTime():将日历对象转换为日期对象
package com.commonClass.Date.calendar;
/*
java.util.calendar
Calendar是一个抽象类,里面提供了很多操作日历字段的方法
Calendar不能实例化对象
getInstance()静态方法,返回值就是一个Calendar
Calendar instance = Calendar.getInstance();
 */
/*
成员方法的参数:
        ins field:日历类的字段,可以使用Calendar的静态成员变量获取
        public static final int YEAR=1; 年
        public static final int MONTH=2;月
        public static final int DATE=5; 月中的某一天
        public static final int DAY_OF_MONTH = 5; 月中的某一天
        public static final int HOUR=10; 时
        public static final int MINUTE=12; 分
        public static final int SECOND=13; 秒
 */

import java.util.Calendar;

public class Demo01 {
    public void calendar1(){
        Calendar instance = Calendar.getInstance();
        System.out.println(instance);
    }
    /*
    成员方法:
    int    get(int field):返回给定日历字段的值。
    参数:通过Calendar的静态成员变量获取
     */
    public void calendar2(){
        Calendar instance = Calendar.getInstance();
        System.out.print(instance.get(Calendar.YEAR)+"年");
        System.out.print(instance.get(Calendar.MONTH)+1+"月");//西方的月份0-11,
        System.out.print(instance.get(Calendar.DATE)+"日");
        //System.out.print(instance.get(Calendar.DAY_OF_MONTH));
        System.out.print("\t"+instance.get(Calendar.HOUR)+"时");
        System.out.print(instance.get(Calendar.MINUTE)+"分");
        System.out.println(instance.get(Calendar.SECOND)+"秒");

    }
    /*
    成员方法
    void   set(int field, int value):将给定的日历字段设置为给定的值。
    参数:int field:通过Calendar的静态成员变量获取
         int value:为给定日历字段设置的值
     */
    public void calendar3(){
        Calendar instance = Calendar.getInstance();
        instance.set(Calendar.YEAR,1994);
        instance.set(Calendar.MONTH,9);
        instance.set(Calendar.DATE,9);
        //可以同时设置YEAR_MONTH_DATE,使用set()重载的方法
        instance.set(2020,6,25);
        System.out.print(instance.get(Calendar.YEAR)+"年");
        System.out.print(instance.get(Calendar.MONTH)+"月");
        System.out.println(instance.get(Calendar.DATE)+"日");
    }
    /*
    成员方法:
    abstract void  add(int field, int amount):给定的日历字段中添加或减去指定的时间量
    参数:int field:通过Calendar的静态成员变量获取
         int amount:要添加到该字段的日期或时间量
         正数:增加值
         负数:减少值
     */
    public void calendar4(){
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.YEAR,5);
        instance.add(Calendar.MONTH,1);
        instance.add(Calendar.DATE,-5);
        System.out.print(instance.get(Calendar.YEAR)+"年");
        System.out.print(instance.get(Calendar.MONTH)+"月");
        System.out.println(instance.get(Calendar.DATE)+"日");
    }
    /*
    成员方法:
    Date   getTime():返回一个Date表示此Calendar时间值的对象
    把日历对象转换为日期对象
     */
    public void calendar5(){
        Calendar instance = Calendar.getInstance();
        System.out.println(instance.getTime());

    }
}
package com.commonClass;

import com.commonClass.Date.calendar.Demo01;


public class Application {
    public static void main(String[] args) {
        new Demo01().calendar1();
        new Demo01().calendar2();//2020年6月25日  1时36分54秒
        new Demo01().calendar3();//2020年6月25日
        new Demo01().calendar4();//2025年6月20日
        new Demo01().calendar5();//Thu Jun 25 03:16:46 GMT+08:00 2020


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值