JAVA基礎(30)---API之Object
API
Java語言中,已經提供了大量的類庫供程式開發者使用,這些類庫是Java語言提供的、已經寫好的、用來實現常見的和通用的功能的類的集合,我們稱之為“應用程式介面(API-Application Program Interface)”
這些API根據實現的功能不同,劃分為不同的集合,每個集合組成以個包,稱為類庫。
在我們下載和安裝的JDK中,已經包含了這些基礎的API類庫。在程式設計時,如果要實現一些特定的功能,最好的辦法是首先找一找JDK中有沒有提供相應的API類。如果有,首先使用類庫中的這些API類。只有JDK沒有提供我們需要的API類時,才需要我們自己來編寫類。因此,瞭解JDK所提供的API類可以幫助開發者節省大量的程式設計時間,而且能夠使編寫的程式更簡單更實用。
從某些方面來說,對JDK所提供的API瞭解的程度,決定了開發者程式設計的能力。
面向物件的和核心思想:“找合適的物件,做適合的事情”。JavaSE中已經描述了很多常用的類,可以使用這些類常見物件。這些常用的類一般位於 java.lang 包下,不需要導包。
在不同場合,這個程式設計介面的含義不同:
1、java api是指標準類庫提供的函式
2、android 開發的api是指android sdk函式庫
3、網站api一般是指一個網站提供的介面,比如登陸驗證、資訊查詢、通知、支付等
4、windows api是指windows作業系統提供的api
Object類
Object類是所有類的基類(父類/超類),因此任何類的物件都可以使用Object中提供的方法。也可以根據需要重寫其中的方法。Object的構造是無參構造。
常用方法:
1、equals()方法
原型是:public boolean equals(Object obj)
這個方法用於比較兩個物件是否相等,預設相當於 “ == ” 的功能。對於值型別,比較他們的值是否相等;對於引用型別,比較他們的記憶體地址是否相等;我們也可以在自定義中重寫equals方法來比較兩個物件是否相等。
public boolean equals(Object obj) {
return (this == obj);//this代表當前呼叫此方法物件
}
2、hashCode()方法
方法原型:public int hashCode();
作用:返回該物件的雜湊碼值,這個預設值是由物件的記憶體地址計算出來的,每次執行程式返回結果可能不一樣。
提供此方法是為了提高雜湊表的效能,一般是重寫 equals 方法的同時重寫 hashCode方法,讓“相同”的物件返回相同的 hash 碼,讓不相同的物件儘量返回不相同的雜湊碼,這樣有利於提高雜湊表效能。
3、toString()方法
方法原型:public String toString();
作用:返回該物件的字串表示。自定義類可重寫此方法以方便利用toString()直接輸出物件的一些資訊。檢視JDK原始碼,發現toString()預設返回的是:
public String toString(){
return getClass.getName() + "@" + Interger.toHexString(hashCode());
}
就是:“類名 + @ + hashCode值的十六進位制形式”。
當用System.out.println(物件)輸出物件時,顯示的就是toString()返回的值、String類已經重寫了toString()方法,所以直接輸出看到的是字串。
4、finalize()
Java允許在類中定義一個名為finalize()的方法。它的工作原理是:一旦垃圾回收器準備好釋放物件佔用的儲存空間,將首先呼叫finalize()方法,並且在下一次垃圾回收動作發生時,才會真正回收物件佔用的記憶體。
關於垃圾回收,有三點需要記住:
- 物件的 finalize 方法不一定會被呼叫,即使是程序退出前。
- 發生 GC 時一個物件的記憶體是否釋放取決於是否存在該物件的引用,如果該物件包含物件成員,那物件成員也遵循本條。
- 物件裡包含的物件成員按宣告順序進行釋放。
注意:在實際開發中,不要去重寫finalize()方法;也不要主動的去使用System.gc();
public class ObejctDemo{
public static void main(String[] args){
Student stu1 = new Student();
Student stu2 = new Student();
System.out.println(stu1 == stu2);
System.out.println(stu1.equals( stu2));
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);
System.out.println(str1.equals( str2));
System.out.println("---------------------------");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println("---------------------------");
Integer a = 12;//int a = 12
Object obj = a.toString() + 1;
System.out.println(obj);
//stu1 = null;
System.out.println("---------------------------");
System.gc();//就是人為的呼叫垃圾回收器
}
}
class Student{
protected void finalize() throws Throwable{
System.out.println("被回收了....");
}
}