JavaSE学习笔记 - Object类、日期类

Object

  • Object 类是 Java 中所有类的超类,Java 中每个类都是由 Object 这个类拓展而来的。可以使用 Object 类型的变量引用任何类型的对象。
  • Object是类层次结构的根类,每个类都是使用 Object 类作为超类。Object 可以对 toString() 和 equals() 方法。我们在打印对象的时候打印是对象调用 toString() 的结果。

toString() 的重写:toString() 源码 :toString() 方法默认返回结果是地址值,但是在开发中,我们常常需要查看对象属性的字符串形式,所以我们可以重写 toString() 以字符串的形式来输出对象的属性。

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
//hashCode,这个方法针对不同的对象返回不同的对象,每一个对象都有一个唯一的哈希值
//Integer.toHexString,获取哈希值的16进制
//getClass().getName,获取类名
//getClass(),获得一个类的类对象
}

package cn.edu.zut;

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

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
package cn.edu.zut;

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setAge(18);
        person.setName("aaa");
        System.out.println(person.toString());//未重写toString:cn.edu.zut.Person@1b6d3586
        System.out.println(person.toString());//重写toString:Person{name='aaa', age=18}
    }
}

finalize(): 用于垃圾回收,不需要手动调用,要有 JVM 来调用,垃圾回收器确定不存在这个对象的引用的时候,对象的垃圾回收期调用这个方法。Java 中的垃圾回收器不是轻易启动的,垃圾太少或者时间没有到,有可能启动,有可能不启动。垃圾回收器在回收某一个对象的时候就会调用这个对象的 finalize 方法。\(System.gc\) 可以告知 JVM 尽量回收资源,但是也不一定启动。
equals(): 在Object 中是用于检测一个对象是否等于另外一个对象。Object 类中实现的 equals 方法是比较两个对象的引用是否相同,如果我们重写 equals 方法,就可以对对象的属性进行比较。
==: 基本数据类型比较的是值,引用类型比较的是地址。基本数据类型是在栈中,直接比较值,基本数据类型有自己的默认值;引用类型变量空间存储的是一个地址,在进行比较的时候比较的就是地址,引用数据类型默认值是 null。

public boolean equals(Object obj) {
    return (this == obj);
}
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    //判断传过来的是否是Person类型,相当于o instanceof Person
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;//如果是,则转换成真身
    return age == person.age && Objects.equals(name, person.name);
}

Objects 类

  • 在 JDK 7 中,新添加了一个工具类 Objects 类,通过 equals 方法可以解决 Object 类中的空指针异常。
public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

Date

package untitled;

import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);//Thu Jul 23 18:22:54 CST 2020
        long time = System.currentTimeMillis();
        Date date1 = new Date(time);
        System.out.println(date1.getTime());//1595499774478
        System.out.println(time);//1595499774478
        System.out.println(date1);//Thu Jul 23 18:22:54 CST 2020
        Date date2 = new Date(time - 24 * 60 * 60 * 1000);
        System.out.println(date2);//Thu Jul 23 18:22:54 CST 2020
    }
}

SimpleDateFormat

package untitled;

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

public class Main {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = sdf.format(date);
        System.out.println(str);//2020-07-23 18:25:07
        Date date1 = sdf.parse(str);
        System.out.println(date1);//Thu Jul 23 18:25:07 CST 2020
    }
}

Calendar

package untitled;

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

public class Main {
    public static void main(String[] args) throws ParseException {
        //Calendar calendar = new GregorianCalendar(2020, 7, 23);
        //Calendar calendar = new GregorianCalendar();
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + " " + month + " " + day);//2020 6 23
        calendar.set(Calendar.MONTH, 7);
        System.out.println(calendar);
        calendar.add(Calendar.DAY_OF_MONTH, 1);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//1
        Date date = calendar.getTime();
        System.out.println(date);//Mon Aug 24 18:35:51 CST 2020
        calendar.setTime(new Date());
        System.out.println(calendar);//2020.6.23
    }
}

LocalDate

import java.time.DayOfWeek;
import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println(date);//2020-07-30
        date = LocalDate.of(2020, 1, 1);
        int year = date.getYear();
        int month = date.getMonthValue();
        int day = date.getDayOfMonth();
        DayOfWeek week = date.getDayOfWeek();
        System.out.println(year + "-" + month + "-" + day + " 星期" + week.getValue());//2020-1-1 星期3
        //在date基础上增加30天
        LocalDate date1 = date.plusDays(31);
        LocalDate date2 = date1.minusDays(31);//
        System.out.println(date1);//2020-02-01 之后的31天
        System.out.println(date2);//2020-01-01 之前的31天
    }
}
posted @ 2020-08-27 12:49  菜鸭丶  阅读(115)  评论(0编辑  收藏  举报