Object類、常用API
第一章 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方法返回該物件的字串表示,其實該字串內容就是物件的型別[email protected]+記憶體地址值。
由於toString方法返回的結果是記憶體地址,而在開發中,經常需要按照物件的屬性得到相應的字串表現形式,因此也需要重寫它。
覆蓋重寫
如果不希望使用toString方法的預設行為,則可以對它進行覆蓋重寫。例如自定義的Person類:
public class Person {
private String name;
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}
// 省略構造器與Getter Setter
}
1.3 equals方法
方法摘要
-
public boolean equals(Object obj)
:指示其他某個物件是否與此物件“相等”。
呼叫成員方法equals並指定引數為另一個物件,則可以判斷這兩個物件是否是相同的。這裡的“相同”有預設和自定義兩種方式。
預設地址比較
如果沒有覆蓋重寫equals方法,那麼Object類中預設進行==
運算子的物件地址比較,只要不是同一個物件,結果必然為false。
物件內容比較
如果希望進行物件的內容比較,即所有或指定的部分成員變數相同就判定兩個物件相同,則可以覆蓋重寫equals方法。例如:
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);
}
}
第二章 Date類
java.util.Date
類 表示特定的瞬間,精確到毫秒。
繼續查閱Date類的描述,發現Date擁有多個建構函式,只是部分已經過時,但是其中有未過時的建構函式可以把毫秒值轉成日期物件。
-
public Date()
:從執行程式的此時此刻到時間原點經歷的毫秒值,轉換成Date物件,分配Date物件並初始化此物件,以表示分配它的時間(精確到毫秒)。 -
public Date(long date)
:將指定引數的毫秒值date,轉換成Date物件,分配Date物件並初始化此物件,以表示自從標準基準時間(稱為“曆元(epoch)”,即1970年1月1日00:00:00 GMT)以來的指定毫秒數。
簡單來說:使用無參構造,可以自動設定當前系統時間的毫秒時刻;指定long型別的構造引數,可以自定義毫秒時刻。例如:
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
// 建立日期物件,把當前的時間
System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020
// 建立日期物件,把當前的毫秒值轉成日期物件
System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
}
}
常用方法
Date類中的多數方法已經過時,常用的方法有:
-
public long getTime()
把日期物件轉換成對應的時間毫秒值。 -
public void setTime(long time)
把方法引數給定的毫秒值設定給日期物件
public class DateDemo02 {
public static void main(String[] args) {
//建立日期物件
Date d = new Date();
//public long getTime():獲取的是日期物件從1970年1月1日 00:00:00到現在的毫秒值
//System.out.println(d.getTime());
//System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//public void setTime(long time):設定時間,給的是毫秒值
//long time = 1000*60*60;
long time = System.currentTimeMillis();
d.setTime(time);
System.out.println(d);
}
}
第三章 DateFormat類
java.text.DateFormat
是日期/時間格式化子類的抽象類,我們通過這個類可以幫我們完成日期和文字之間的轉換,也就是可以在Date物件與String物件之間進行來回轉換。
-
格式化:按照指定的格式,把Date物件轉換為String物件。
-
解析:按照指定的格式,把String物件轉換為Date物件。
構造方法
由於DateFormat為抽象類,不能直接使用,所以需要常用的子類java.text.SimpleDateFormat
。這個類需要一個模式(格式)來指定格式化或解析的標準。構造方法為:
-
public SimpleDateFormat(String pattern)
:用給定的模式和預設語言環境的日期格式符號構造SimpleDateFormat。
引數pattern是一個字串,代表日期時間的自定義格式。
格式規則
常用的格式規則為:
常用方法
DateFormat類的常用方法有:
-
public String format(Date date)
:將Date物件格式化為字串。 -
public Date parse(String source)
:將字串解析為Date物件。
//格式化:從 Date 到 String
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
System.out.println("--------");
//從 String 到 Date
String ss = "2048-08-09 11:11:11";
//ParseException
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);
System.out.println(dd);
Math類
概述
java.lang.Math
類包含用於執行基本數學運算的方法,如初等指數、對數、平方根和三角函式。類似這樣的工具類,其所有方法均為靜態方法,並且不會建立物件,呼叫起來非常簡單。
常用方法
System
概述
java.lang.System
類中提供了大量的靜態方法,可以獲取與系統相關的資訊或系統級操作。
常用方法
在控制檯輸出1-10000,計算這段程式碼執行了多少毫秒
public static void main(String[] args) {
//獲取當前時間毫秒值
System.out.println(System.currentTimeMillis());
//計算程式執行時間
long start = System.currentTimeMillis();
for (int i = 1; i <= 10000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("共耗時毫秒:" + (end - start));
}
包裝類
1.1 概述
Java提供了兩個型別系統,基本型別與引用型別,使用基本型別在於效率,然而很多情況,會建立物件使用,因為物件可以做更多的功能,如果想要我們的基本型別像物件一樣操作,就可以使用基本型別對應的包裝類,如下:
1.2 Integer類
-
Integer類概述
包裝一個物件中的原始型別 int 的值
-
Integer類構造方法及靜態方法
public static void main(String[] args) {
//public Integer(int value):根據 int 值建立 Integer 物件(過時)
Integer i1 = new Integer(100);
System.out.println(i1);
//public Integer(String s):根據 String 值建立 Integer 物件(過時)
Integer i2 = new Integer("100");
// Integer i2 = new Integer("abc"); //NumberFormatException
System.out.println(i2);
System.out.println("--------");
//public static Integer valueOf(int i):返回表示指定的 int 值的 Integer 例項
Integer i3 = Integer.valueOf(100);
System.out.println(i3);
//public static Integer valueOf(String s):返回一個儲存指定值的Integer物件 String
Integer i4 = Integer.valueOf("100");
System.out.println(i4);
1.3 裝箱與拆箱
基本型別與對應的包裝類物件之間,來回轉換的過程稱為”裝箱“與”拆箱“:
-
裝箱:從基本型別轉換為對應的包裝類物件。
-
拆箱:從包裝類物件轉換為對應的基本型別。
基本數值---->包裝物件
Integer i = new Integer(4);//使用建構函式函式
Integer iii = Integer.valueOf(4);//使用包裝類中的valueOf方法
包裝物件---->基本數值
int num = i.intValue();
1.4 自動裝箱與自動拆箱
由於我們經常要做基本型別與包裝類之間的轉換,從Java 5(JDK 1.5)開始,基本型別與包裝類的裝箱、拆箱動作可以自動完成。例如:
Integer i = 4;//自動裝箱。相當於Integer i = Integer.valueOf(4);
i = i + 5;//等號右邊:將i物件轉成基本數值(自動拆箱) i.intValue() + 5;
//加法運算完成後,再次裝箱,把基本數值轉成物件。
1.5 基本型別與字串之間的轉換
基本型別轉換為String
-
轉換方式
-
方式一:直接在數字後加一個空字串
-
方式二:通過String類靜態方法valueOf()
-
-
示例程式碼
//int --- String
int number = 100;
//方式1
String s1 = number + "";
System.out.println(s1);
//方式2
//public static String valueOf(int i)
String s2 = String.valueOf(number);
System.out.println(s2);
String轉換成基本型別
除了Character類之外,其他所有包裝類都具有parseXxx靜態方法可以將字串引數轉換為對應的基本型別:
-
public static byte parseByte(String s)
:將字串引數轉換為對應的byte基本型別。 -
public static short parseShort(String s)
:將字串引數轉換為對應的short基本型別。 -
public static int parseInt(String s)
:將字串引數轉換為對應的int基本型別。 -
public static long parseLong(String s)
:將字串引數轉換為對應的long基本型別。 -
public static float parseFloat(String s)
:將字串引數轉換為對應的float基本型別。 -
public static double parseDouble(String s)
:將字串引數轉換為對應的double基本型別。 -
public static boolean parseBoolean(String s)
:將字串引數轉換為對應的boolean基本型別。
程式碼使用(僅以Integer類的靜態方法parseXxx為例)如:
-
轉換方式
-
方式一:先將字串數字轉成Integer,再呼叫valueOf()方法
-
方式二:通過Integer靜態方法parseInt()進行轉換
-
-
示例程式碼
//String --- int
String s = "100";
//方式1:String --- Integer --- int
Integer i = Integer.valueOf(s);
//public int intValue()
int x = i.intValue();
System.out.println(x);
//方式2
//public static int parseInt(String s)
int y = Integer.parseInt(s);
System.out.println(y);