一挚躯、常用的API
1.object類
java.lang.Object 類是Java語(yǔ)言中的根類,即所有類的父類擦秽。它中描述的所有方法子類都可以使用码荔。在對(duì)象實(shí)例 化的時(shí)候,最終找的父類就是Object感挥。 如果一個(gè)類沒有特別指定父類缩搅, 那么默認(rèn)則繼承自O(shè)bject類。例如:
public class MyClass /*extends Object*/ {
// ...
}
- public String toString() :返回該對(duì)象的字符串表示触幼。
toString方法返回該對(duì)象的字符串表示硼瓣,其實(shí)該字符串內(nèi)容就是對(duì)象的類型+@+內(nèi)存地址值。 由于toString方法返回的結(jié)果是內(nèi)存地址置谦,而在開發(fā)中堂鲤,經(jīng)常需要按照對(duì)象的屬性得到相應(yīng)的字符串表現(xiàn)形式,因此也需要重寫它霉祸。
覆蓋重寫:
如果不希望使用toString方法的默認(rèn)行為筑累,則可以對(duì)它進(jìn)行覆蓋重寫。例如:
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}
小提示:
在我們直接使用輸出語(yǔ)句輸出對(duì)象名的時(shí)候,其實(shí)通過(guò)該對(duì)象調(diào)用了其toString()方法丝蹭。
- public boolean equals(Object obj) :指示其他某個(gè)對(duì)象是否與此對(duì)象“相等”慢宗。
調(diào)用成員方法equals并指定參數(shù)為另一個(gè)對(duì)象,則可以判斷這兩個(gè)對(duì)象是否是相同的奔穿。這里的“相同”有默認(rèn)和自定 義兩種方式镜沽。
1.默認(rèn)地址比較
如果沒有覆蓋重寫equals方法,那么Object類中默認(rèn)進(jìn)行 == 運(yùn)算符的對(duì)象地址比較贱田,只要不是同一個(gè)對(duì)象缅茉,結(jié)果必然為false。
2.對(duì)象內(nèi)容比較
如果希望進(jìn)行對(duì)象的內(nèi)容比較男摧,即所有或指定的部分成員變量相同就判定兩個(gè)對(duì)象相同蔬墩,則可以覆蓋重寫equals方 法。例如:
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return getAge() == person.getAge() &&
Objects.equals(getName(), person.getName());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getAge());
}
測(cè)試:
Person person1 = new Person();
person1.setName("1111");
Person person2 = new Person();
person2.setName("1111");
System.out.println("person1的地址值為:"+person1);
System.out.println("person2的地址值為:"+person2);
boolean equals = person1.equals(person2);
System.out.println(equals);
結(jié)果:
當(dāng)重寫了equals方法以后,輸出結(jié)果為ture,
沒有重寫equals時(shí),輸出結(jié)果為false
結(jié)論:
== 比較的是變量(棧)內(nèi)存中存放的對(duì)象的(堆)內(nèi)存地址耗拓,用來(lái)判斷兩個(gè)對(duì)象的地址是否相同拇颅,即是否是指相同一個(gè)對(duì)象。比較的是真正意義上的指針操作乔询。equals用來(lái)比較的是兩個(gè)對(duì)象的內(nèi)容是否相等樟插,由于所有的類都是繼承自java.lang.Object類的,所以適用于所有對(duì)象,如果沒有對(duì)該方法進(jìn)行覆蓋的話黄锤,調(diào)用的仍然是Object類中的方法搪缨,而Object中的equals方法返回的卻是==的判斷,如果覆蓋以后那么比較的是內(nèi)容是否相等。
2.Date類
java.util.Date 類 表示特定的瞬間鸵熟,精確到毫秒副编。
- public Date() :分配Date對(duì)象并初始化此對(duì)象,以表示分配它的時(shí)間(精確到毫秒)旅赢。
System.out.println(new Date());
結(jié)果:
Fri Jul 03 05:01:41 CST 2020
提示:
在使用println方法時(shí)齿桃,會(huì)自動(dòng)調(diào)用Date類中的toString方法。Date類對(duì)Object類中的toString方法進(jìn)行 了覆蓋重寫煮盼,所以結(jié)果為指定格式的字符串。
DateFormat類
java.text.DateFormat 是日期/時(shí)間格式化子類的抽象類带污,我們通過(guò)這個(gè)類可以幫我們完成日期和文本之間的轉(zhuǎn) 換,也就是可以在Date對(duì)象與String對(duì)象之間進(jìn)行來(lái)回轉(zhuǎn)換僵控。
- 格式化:按照指定的格式,從Date對(duì)象轉(zhuǎn)換為String對(duì)象鱼冀。
- 解析:按照指定的格式报破,從String對(duì)象轉(zhuǎn)換為Date對(duì)象。
構(gòu)造方法:
由于DateFormat為抽象類千绪,不能直接使用充易,所以需要常用的子類 java.text.SimpleDateFormat 。這個(gè)類需要一個(gè) 模式(格式)來(lái)指定格式化或解析的標(biāo)準(zhǔn)荸型。構(gòu)造方法為: -
public SimpleDateFormat(String pattern) :用給定的模式和默認(rèn)語(yǔ)言環(huán)境的日期格式符號(hào)構(gòu)造 SimpleDateFormat盹靴。
參數(shù)pattern是一個(gè)字符串,代表日期時(shí)間的自定義格式瑞妇。
日期.PNG
創(chuàng)建SimpleDateFormat對(duì)象的代碼如:
//多態(tài)
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = dateFormat.format(new Date());
System.out.println(format);
結(jié)果:
2020-07-03 05:07:32
- public String format(Date date) :將Date對(duì)象格式化為字符串稿静。 - public Date parse(String source) :將字符串解析為Date對(duì)象。
//1
try {
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = "2020年7月3日";
Date date = null;
date = df.parse(str);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
結(jié)果:
Fri Jul 03 00:00:00 CST 2020