根據JDK源代碼及Object類的API文檔,Object類當中包含的方法有11個。這次我們主要學習其中的2個:
public String toString()
:返回該對象的字符串表示。public boolean equals(Object obj)
:指示其他某個對象是否與此對象“相等”。
toString方法
public String toString()
:返回該對象的字符串表示。
toString方法返回該對象的字符串表示,其實該字符串內容就是對象的類型+@+內存地址值。
由於toString方法返回的結果是內存地址,而在開發中,經常需要按照對象的屬性得到相應的字符串表現形式,因此也需要重寫它。
例如對類的toString方法重寫:
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}
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
public boolean equals(Object o) {
// 如果對象地址一樣,則認爲相同
if (this == o)
return true;
// 如果參數爲空,或者類型信息不一樣,則認爲不同
if (o == null || getClass() != o.getClass())
return false;
// 轉換爲當前類型
Person person = (Person) o;
// 要求基本類型相等,並且將引用類型交給java.util.Objects類的equals靜態方法取用結果
return age == person.age && Objects.equals(name, person.name);
}
}
java.util.Objects類中,有個重寫equals代碼
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
日期時間類
1. Date
java.util.Date
類 表示特定的瞬間,精確到毫秒。其構造函數中:
public Date()
:分配Date對象並初始化此對象,以表示分配它的時間(精確到毫秒)// 創建日期對象,取當前的時間。public Date(long num)
:分配Date對象並初始化此對象, // 創建日期對象,把當前的num(毫秒)值轉成日期對象(自1970年1月1日8:00計時開始)。num值後帶個L或者l
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
// 創建日期對象,把當前的時間
System.out.println(new Date()); // Mon Dec 02 22:53:35 CST 2019
// 創建日期對象,把當前的毫秒值轉成日期對象
System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
}
}
其方法主要重要的是:
public long getTime()
把日期對象轉換成對應的時間毫秒值。public String toLocaleString()
把格式轉換爲本地格式
2. DateFormat類
由於DateFormat爲抽象類,不能直接使用,故用java.text.SimpleDateFormat
。
java.text.DateFormat
是日期/時間格式化子類的抽象類,我們通過這個類可以幫我們完成日期和文本之間的轉換,也就是可以在Date對象與String對象之間進行來回轉換。
其構造方法爲:
public SimpleDateFormat(String pattern)
:用給定的模式和默認語言環境的日期格式符號構造SimpleDateFormat。參數pattern是一個字符串,代表日期時間的自定義格式。
| y | 年 |
| M | 月 |
| d | 日 |
| H | 時 |
| m | 分 |
| s | 秒 |
常用方法有:
public String format(Date date)
:將Date對象格式化爲字符串。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
把Date對象轉換成String
*/
public class Demo03DateFormatMethod {
public static void main(String[] args) {
Date date = new Date();
// 創建日期格式化對象,在獲取格式化對象時可以指定風格
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = df.format(date);
System.out.println(str); // 2019年12月2日
}
}
public Date parse(String source)
:將字符串解析爲Date對象。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
把String轉換成Date對象
*/
public class Demo04DateFormatMethod {
public static void main(String[] args) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = "2018年12月11日";
Date date = df.parse(str);
System.out.println(date); // Tue Dec 11 00:00:00 CST 2018
}
}
練習
請使用日期時間相關的API,計算出一個人已經出生了多少天。
import java.text.ParseException;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) throws ParseException {
Scanner input = new Scanner(System.in);
System.out.print("請輸入你的出生日期:");
// 獲取出生日期,鍵盤輸入
String birthdaystring = input.nextLine();
// 創建SimpleDateFormat對象,寫日期模式
SimpleDateFormat date = new SimpleDateFormat("yyyy年MM月dd日");
// 將字符串日期,轉成Date對象
Date birthday = date.parse(birthdaystring);
// 獲取今天的日期對象
Date today = new Date();
// 將Date對象,轉成字符串日期
String todays = date.format(today);
System.out.println("今天是"+todays+"!");
// 將兩個日期轉成毫秒值,Date類的方法getTime
long birthdaySecond = birthday.getTime();
long todaySecond = today.getTime();
System.out.println("你出生了"+(todaySecond-birthdaySecond)/1000/60/60/24+"天");
}
}
5. Calendar類
其也爲抽象類
java.util.Calendar
是日曆類,在Date後出現,替換掉了許多Date的方法。該類將所有可能用到的時間信息封裝爲靜態成員變量,方便獲取。日曆類就是方便獲取各個時間屬性的。
字段值 | 含義 |
---|---|
YEAR | 年 |
MONTH | 月(從0開始,可以+1使用) |
DAY_OF_MONTH | 月中的天(幾號) |
HOUR | 時(12小時制) |
HOUR_OF_DAY | 時(24小時制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 週中的天(周幾,週日爲1,可以-1使用) |
其靜態方法
public static Calendar getInstance()
:使用默認時區和語言環境獲得一個日曆
其常用方法有:
public int get(int field)
:返回給定日曆字段的值。
import java.util.Calendar;
public class CalendarUtil {
public static void main(String[] args) {
// 創建Calendar對象
Calendar cal = Calendar.getInstance();
// 設置年
int year = cal.get(Calendar.YEAR);
// 設置月
int month = cal.get(Calendar.MONTH) + 1;
// 設置日
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
}
}
public void set(int field, int value)
:將給定的日曆字段設置爲給定值。
import java.util.Calendar;
public class Demo07CalendarMethod {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2020);
System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2020年12月3日
}
}
public abstract void add(int field, int amount)
:根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量。
import java.util.Calendar;
public class Demo08CalendarMethod {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2019年12月3日
// 使用add方法
cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
cal.add(Calendar.YEAR, -3); // 減3年
System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2016年12月5日;
}
}
public Date getTime()
:返回一個表示此Calendar時間值(從曆元到現在的毫秒偏移量)的Date對象。
import java.util.Calendar;
import java.util.Date;
public class Demo09CalendarMethod {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
System.out.println(date); // Tue Jan 16 16:03:09 CST 2018
}
}