【Java】Object类、Objects类和日期类

1 Object类

Object类是所有类的父类,每个类都直接或间接的继承自该类

1.1 Object.toString()

作用:打印输出类信息
重写前:打印输出包名类名@地址值
重写后:打印输出属性值

1.2 Object.equals()

作用:比较两个对象
重写前:比较对象的地址值
重写后:比较对象的属性值

package ObjectDate;

import java.util.Objects;

public class ObjectTest {
    
    
    static class MyObject{
    
    
        String name;
        int id;

        public MyObject(String name, int id) {
    
    
            this.name = name;
            this.id = id;
        }

        @Override
        public String toString() {
    
    
            return "MyObject{" +
                    "name='" + name + '\'' +
                    ", id=" + id +
                    '}';
        }

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

    }
    public static void main(String[] args) {
    
    
        //String类
        String a = "abc";
        String b = "abc";
        boolean result = a.equals(b);
        
        System.out.println(result);//true
        System.out.println(a);//abc
        //因为String的源码中已经对equals和toString进行了重写
        
        //自定义类
        MyObject m1 = new MyObject("张三",1);
        MyObject m3 = new MyObject("张三",1);
        boolean result2 = m1.equals(m3);
        
        System.out.println(result2);
        //重写前 false;重写后true

        System.out.println(m1.toString());
        //重写前:ObjectDate.ObjectTest$MyObject@4554617c;
        // 重写后:MyObject{name='张三', id=1}

    }
}

2 Objects类

jdk1.7后出现,提供静态方法操作对象,可以通过类直接调用方法。

public static void main(String[] args) {
    
    
        String a = "123";
        String c = null;
        boolean result = c.equals(a);//空指针异常
        boolean result = Objects.equals(a,c);//false
       
        //为了提高代码的健壮性 Objects提供了equals方法
        //Objects.equals的源码
        public static boolean equals(Object a, Object b) {
    
    
        return (a == b) || (a != null && a.equals(b));
    }
}

3 Date类

Date()空参数构造方法,Date(long L)长整型构造方法,getTime成员方法相当于System.currentTimeMillis()

import java.util.Date;

public class DateTest {
    
    
    public static void main(String[] args) {
    
    
        //空参数构造方法
        Date d = new Date();

        System.out.println(d);//Wed Apr 01 09:32:04 CST 2020

        //Date类的成员方法
        long time = d.getTime();
        System.out.println(time);//毫秒值1585704724114
        System.out.println(System.currentTimeMillis());//同上

        //带Long参数的构造方法
        Date d2 = new Date(0L);
        System.out.println(d2);//Thu Jan 01 08:00:00 CST 1970
    }
}

4 DateFormat类&SimpleDateFormat类

所属java.text包,DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为毫秒数。

4.1 格式转换String format(Date date)

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
  参数: pattern - 描述日期和时间格式的模式
  抛出: NullPointerException - 如果给定的模式为 null
        IllegalArgumentException - 如果给定的模式无效
  模式:
  y 年 M 月 d 日 H 时 m 分 s 秒
  "yyyy-MM-dd HH:mm:ss"
  "yyyy年MM月dd日HH时mm分ss秒"
*/

public class DateTest {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        //构造特定格式 
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = new Date();
        String text = s.format(d);
        System.out.println(d);//Wed Apr 01 09:48:17 CST 2100
        System.out.println(text);//2100-04-01 09:48:17

4.2 格式解析Date parse(String source)

//接上方
        //解析特定格式
        //parse抛出解析异常 字符串和构造方法中的模式不一样就会抛出
        //throw抛出 或者try catch处理
        Date d2 = s.parse("2100-04-01 09:48:17");
        System.out.println(d2);//Wed Apr 01 09:48:17 CST 2100
        }
}

4.3 应用示例

计算一个人出生了多少天:
步骤分析:
1. 获取输入的出生日期
2. 使用DateFormat的parse方法解析为Date格式
3. 调用getTime方法获得毫秒值
4. 获取当前日期的毫秒值
5. 计算两个日期的差值
6. 将毫秒值转化为天数并输出
输入日期格式:yyyy-MM-dd

public class DateTest {
    
    
    public static void main(String[] args) throws ParseException {
    
    
    //1.
        Scanner sc = new Scanner(System.in);
        System.out.println("按格式输入(yyyy-MM-dd):");
        String birthday = sc.next();
    //2.
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(birthday);
    //3.
        long dateMs = date.getTime();
    //4.
        long nowMs = new Date().getTime();//匿名对象
    //5.
        long delta = nowMs - dateMs;
    //6.
        int day = (int) (delta/(1000*86400));
        System.out.println(day);
    }
}

5 Calendar类

Calendar类时抽象类,提供操作日历字段的方法,无法直接创建对象使用
通过调用静态方法getInstance获取Calendar子类对象,获取默认时区和语言环境的日历

5.1 常用方法

  1. int get(int filed):获取给定日历字段的值
  2. void set(int filed):将给定的日历字段设置为给定值
  3. abstract void add(int flied, int amount):根据日历规则,对给定的日历字段增加或减去指定时间量
  4. Date getTime():返回一个表示Calendar时间值的Date对象
/*
1. int get(int filed):获取给定日历字段的值
2. void set(int filed):将给定的日历字段设置为给定值
3. abstract void add(int flied, int amount):根据日历规则,对给定的日历字段增加或减去指定时间量
4. Date getTime():返回一个表示Calendar时间值的Date对象

filed 是日历类的字段 可以使用Calendar的静态成员变量获取
YEAR MONTH DATE DAY_OF_MONTH HOUR MINUTE SECOND
 */
public class DateTest {
    
    
     public static void main(String[] args){
    
    
        //getInstance
        Calendar c = Calendar.getInstance();
        
        //get set add
        int month = c.get(Calendar.MONTH);
        System.out.println(month+1);//西方是0~11 东方+1
        int date = c.get(Calendar.DATE); //每月多少号
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(date);//1
        System.out.println(day);//1
        c.set(Calendar.YEAR,2100);
        c.set(8888,8,8);
        System.out.println(c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH));//8888-8
        c.add(Calendar.YEAR,10);
        System.out.println(c.get(Calendar.YEAR));
        
        //日历转换为日期
        Date time = c.getTime();
        System.out.println(time);
    }
}

猜你喜欢

转载自blog.csdn.net/xd963625627/article/details/105238141