Java——Object類(toString和equal)及日期時間類

根據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並指定參數爲另一個對象,則可以判斷這兩個對象是否是相同的。這裏的“相同”有默認和自定義兩種方式。

  1. 如果沒有覆蓋重寫equals方法,那麼Object類中默認進行==運算符的對象地址比較,只要不是同一個對象,結果必然爲false
  2. 如果希望進行對象的內容比較,即所有或指定的部分成員變量相同就判定兩個對象相同,則可以覆蓋重寫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
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章