1. 程式人生 > 實用技巧 >Object類、常用API

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;

private int age;

@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);