第一章 Object类
1.1 概述
java.lang.object
类是JAVA语言中的根类,即所有类的父类。
若某个类未特别指定父类,则默认继承自Object类。
java.lang包在使用时不需要导入,但其他包在使用前需要人工导入。
1.2 toString方法
Obeject类中的toString方法源码:
String toString(); // 返回对象的字符串表示形式
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
注意点:
- 若类未继承其他类,而是默认继承了Object类,则toString方法返回类对象的地址。
- 自定义类必须重写toString函数。
- 打印对象的值 与 打印对象调用toString函数后的值相同。若类未重写toString函数,则直接打印对象的地址,否则打印toString函数体实现的内容。
public static void main(String[] args) {
Person p1 = new Person("WCW", 18);
// 类Person未重写toString函数,则如下打印的值相同
System.out.println(p1); // BlackHorse.Person@16d3586
System.out.println(p1.toString()); // BlackHorse.Person@16d3586
}
1.3 equals方法
Object类中的equals方法:
public boolean equals(Object obj) { return (this == obj); }
1.Object中equals函数比较两个Object实例的地址是否相同,相同返回true,否则返回false。
2.定义类时可重写equals方法。
1.4 Objects工具类
在JDK7添加了一个Objects工具类(java.util.Objects),它提供了一些静态方法来操作对象。
在比较两个对象是否相等时,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法则优化了这个问题:
// Objects工具类中equals方法的源码
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
public class Application {
public static void main(String[] args) {
Person p1 = null;
Person p2 = new Person("WCW", 18);
// 报异常:NullPointerException
// null不能调用方法,会抛出NullPointerException
boolean b = p1.equals(p2);
}
}
第二章 日期时间类
2.1 Date类
java.util.Date类:表示日期和时间的类。该类不是java.lang,需要在使用时导入。
类Date表示特定的瞬间,精确到毫秒。
Java中时间原点也是从1970年01月01日 00:00:00开始计算(英国格林威治)。
通过计算两个日期间的毫秒数差值,可计算两个日期间相差的天数。
注意:中国属于东八区,会在上述英国格林威治时间的基础上加上8小时。
2.1.1 Date() 及 Date(long date)构造函数
Date()无参构造用于返回系统当前的日期和时间。
Date(long date)有参构造:在1970-01-01 00:00:00的基础上迭加上参数所代表的毫秒值,然后返回迭加后的日期和时间。
2.1.2 long getTime()成员函数
long getTime()把日期转换为1毫秒,相当于System.currentTimeMillis()函数。
其返回自1970-01-01 00:00:00 GMT 以来此Date对象表示的毫秒数。
// 注意:中国东8区
public class Application {
public static void main(String[] args) {
demo01();
demo02();
demo03();
}
// Date类的空参数构造方法:获取当前系统的日期和时间
private static void demo01() {
Date date = new Date();
// Wed Aug 31 20:03:59 GMT+08:00 2022
System.out.println(date);
}
// Date类的带参数构造方法:Date(long date)传递毫秒值,将毫秒值在1970-01-01 00:00:00基础上迭加
// 并计算出迭加后的日期
private static void demo02() {
Date d2 = new Date(0L);
// Thu Jan 01 08:00:00 GMT+08:00 1970