Object类、常用API
主要内容
Object类
Date类
DateFormat类
Calendar类
System类
StringBuilder类
包装类
计划任务
能够说出Object类的特点
能够重写Object类的toString方法
能够重写Object类的equals方法
能够使用日期类输出当前日期
能够使用将日期格式化为字符串的方法
能够使用将字符串转换成日期的方法
能够使用System类的数组复制方法
能够使用System类获取当前毫秒时刻值
能够说出使用StringBuilder类可以解决的问题
能够使用StringBuilder进行字符串拼接操作
能够说出8种基本类型对应的包装类名称
能够说出自动装箱、自动拆箱的概念
能够将字符串转换为对应的基本类型
能够将基本类型转换为对应的字符串
第一章 Object类
1.1 概述
java.lang.Object 类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例
化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类, 那么默认则继承自Object类。例如:
public class MyClass /*extends Object*/ {
// ...
}
根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。今天我们主要学习其中的2个:
public String toString() :返回该对象的字符串表示。
public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。
1.2 toString方法
方法摘要
public String toString() :
返回该对象的字符串表示。
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因
此也需要重写它。
覆盖重写
如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。例如自定义的Person类:
在IntelliJ IDEA中,可以点击 Code 菜单中的 Generate… ,也可以使用快捷键 alt+insert ,点击 toString() 选
项。选择需要包含的成员变量并确定。如下图所示:
public class MyClass /*extends Object*/ {
// ...
}
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}
// 省略构造器与Getter Setter
}
小贴士: 在我们直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。
1.3 equals方法
方法摘要
public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。
调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定
义两种方式。
默认地址比较
如果没有覆盖重写equals方法,那么Object类中默认进行 == 运算符的对象地址比较,只要不是同一个对象,结果
必然为false。
对象内容比较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方
法。例如:
import java.util.Objects;
public class Person {
private String name;
private int age;
@Override
这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数IDE都可以自动生成equals方法的
代码内容。在IntelliJ IDEA中,可以使用 Code 菜单中的 Generate… 选项,也可以使用快捷键 alt+insert ,并选
择 equals() and hashCode() 进行自动代码生成。
1.4 Objects类
在刚才IDEA自动重写equals代码中,使用到了 java.util.Objects 类,那么这个类是什么呢?
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是
null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表
示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问
题。方法如下:
public static boolean equals(Object a, Object b) :判断两个对象是否相等。
我们可以查看一下源码,学习一下:
第二章 日期时间类
2.1 Date类
概述
java.util.Date
类` 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把
毫秒值转成日期对象。
public Date() :分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date) :分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元
(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
tips: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时
刻。例如:
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行
了覆盖重写,所以结果为指定格式的字符串。
常用方法
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}