前言:
腳下的路,沒人替你決定方向,心中的夢,沒人替你去完成,風吹雨打知生活,苦盡甘來懂人生!
人生就是一種感受,一種曆練,一次懂得!告訴自己,人一定要靠自己,沒有等來的輝煌,隻有拼來的精彩 !
我們上一篇聊到了包類庫,這一片我們聊一下API的概念和用法,針對于以下的概念,都會有實體例子配合着,給大家示範,希望給大家帶來一些幫助 !
一.介紹
API(Application Programming Interface,應用程式程式設計接口)是一些預先定義的函數,目的是提供應用程式與開發人員基于某軟體或硬體得以通路一組例程的能力,而又無需通路源碼,或了解内部工作機制的細節。
Java API指的就是JDK中提供的各種功能的Java類 。
Java API-JavaAPI就是sun公司提供給我們使用的類,這些類将底層的實作封裝了起來,我們不需要關心這些類是如何實作的,隻需要學習這些類如何使用 。
源代碼-在JDK中有src.zip檔案,這個檔案夾是所有Java類的源檔案。可以在其中檢視相對應的類的源碼。
我們可以通過查幫助文檔來了解Java提供的API如何使用。
二.知識點介紹
1、概述
2、Object類
三.知識點詳解
舉例:
String
Scanner
Random
java.lang.Object //不需要引入,根類
toString 顯示字元串
equals 比較對象
==在引用資料類型時,比較的是位址。
equals比較的是對象裡面的值
getClass 傳回對象資料類型
hashCode 傳回對象哈希值(位址值)
finalize GC,手動清除資源
wait(),notify(),notifyAll()
1、API概述
API(ApplicationProgramming Interface):應用程式程式設計接口
編寫一個機器人程式去控制機器人踢足球,程式就需要向機器人發出向前跑、向後跑、射門、搶球等各種指令,沒有編過程式的人很難想象這樣的程式如何編寫。但是對于有經驗的開發人員來說,知道機器人廠商一定會提供一些用于控制機器人的Java類,這些類中定義好了操作機器人各種動作的方法。其實,這些Java類就是機器人廠商提供給應用程式程式設計的接口,大家把這些類稱為API。
1.1、使用步驟
API文檔在網上有很多,大家根據自己的實際需求選擇下載下傳,且實際的操作也是大同小異,界面也會有些不同,但是操作邏輯都是差不多的,裡面詳細介紹了java一些類庫的介紹,用法,含義,多元度的分析,建議初學者的兄弟們花些時間,研究一下,對自己的了解會很有幫助的。
(1)打開幫助文檔,左邊是目錄,右邊是解釋:
(2)點選顯示,找到索引,看到輸入框
(3)輸入要搜尋的API内容,在輸入框裡輸入,然後回車
(4)看包:java.lang下的類不需要導包,其他需要
(5)看類的解釋和說明,學習構造方法,使用成員方法
2、Object類
Object類是Java語言中的根類,即所有類的父類。其所有方法子類都可以使用。其中的toString、equals是非常常用的方法。
代碼示範:
package Test2;
class Person extends Object{
private String name;
private int age;
public Person(){
super();
//TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
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;
}
//Person類重寫了Object類的equals方法 不比較位址值 比較對象屬性内容
@Override
public boolean equals(Object obj) {
//向下轉型 将obj轉換為Person類型
Person other = (Person)obj;
//this與other的比較 屬性的比較
//如果this和other的年齡不相等 直接傳回false
if(this.age!=other.age){
return false;
}
//如果繼續往下走代表年齡相等 那麼比較姓名
//因為String類重寫了equals 比較的不是位址值比較的是兩個字元串的内容是否相等
//索引調用equals比較兩個對象的姓名
if(!this.name.equals(other.name)){
return false;
}
return true;
}
// @Override
// publicint hashCode() {
//
// return0x35d;
// }
// Person類重寫了Object類的toString方法 不列印位址值 列印對象屬性内容
@Override
public String toString() {
String info = "name:"+name+" age:"+age;
return info;
}
}
主方法調用:
package Test2;
import com.Test.person;
public class Tested {
private final static String name = "磊哥的java曆險記-@51部落格";
public static void main(String[] args) {
person p = new person();
p.toString();
System.out.println(p.toString());
System.out.println("============="+name+"=============");
}
}
2.1、toString()方法
當調用System.out.println()方法時,實際上是調用被列印者的toString方法,傳回字元串,再将字元串列印的過程。
但是Object類的toString方法傳回的為對象位址值,即對象的類型+@+哈希值(位址值)。是以我們需要重寫User類的該方法,讓該方法傳回的是一個User 對象的具體資訊,而不是其位址值。
代碼示範:
package Test2;
import com.Test.person;
public class Tested {
private final static String name = "磊哥的java曆險記-@51部落格";
public static void main(String[] args) {
/*
*Object類 是所有類的根類
*
* 前提是在Object類中:
*public String toString() 對象的類型+@+哈希值(位址值)
*
* 調用toString方法列印的是位址值,但是通常我們不希望列印位址值,我們希望能夠看到對象的屬性值
*
*
*
*/
Object obj = new Object();
System.out.println(obj.toString());
System.out.println(obj);
Person p = new Person("磊哥的java曆險記",4);
System.out.println(p.toString());
System.out.println(p);
System.out.println("============="+name+"=============");
//
// Scannersc = new Scanner(System.in);
// System.out.println(sc);
}
}
2.2、equals()方法
由于引用類型不能像基本類型一樣使用==運算符來進行運算判斷,是以判斷兩個對象是否”相同”使用的是equals方法。
Object類的equals方法比較的為對象位址值,是以我們需要重新定義兩個對象的比較規則,比如字元串就是重寫了equals方法才比較的為内容,否則比較的也為位址值。再比如本例中,我們可以将姓名相同的User判斷為相同的User。這時根據規則重寫equals方法即可。(如果有别的需求則按照别的需求來重寫equals方法!)
注意:在複寫Object中的equals方法時,一定要注意public boolean equals(Object obj)的參數是Object類型,在調用對象特有資料時,一定要進行類型轉換,在轉換之前必須進行類型判斷。
代碼示例:
package Test2;
import com.Test.person;
public class Tested {
private final static String name = "磊哥的java曆險記-@51部落格";
/*
* 類似*号這種運算符是不能操作引用資料類型的
*
* ==比較的是對象的位址值
* 前提:Object的equals方法
* public boolean equals(Object obj) 和==一樣都是比較兩個引用資料類型的位址值,
* 隻有兩個對象的引用是同一個時傳回true
* 調用equals方法比較的是位址值,但是通常我們不希望比較位址值,我們希望能夠比較對象的屬性值
*
*/
public static void main(String[] args) {
Person p = new Person("磊哥",25); //0x1111
Person p2 = new Person("java",31); //0x2222
Person p3 = new Person("曆險記",4);//0x3333
//使用==比較引用資料類型 ,比較的是對象的位址值
System.out.println(p==p2);//false
System.out.println(p2==p3);//false
System.out.println("============="+name+"=============");
System.out.println(p.equals(p2));
System.out.println(p2.equals(p3));
System.out.println(p.equals(p));
}
}
2.3、其他方法
(1)public final Class getClass() //傳回對象資料類型
(2)public int hashCode() //傳回對象哈希值(位址值)(常作為識别不同對象的依據)
(3)protected void finalize() throws Throwable //垃圾回收器調用,執行清除資源
代碼示範:
package Test2;
import com.Test.person;
public class Tested {
private final static String name = "磊哥的java曆險記-@51部落格";
/*
* Object類的其他方法
*
* public final ClassgetClass() //傳回對象資料類型
* public int hashCode() //傳回對象哈希值(位址值)(常作為識别不同對象的依據)
*/
public static void main(String[] args) {
Person p = new Person();
//傳回對象資料類型
Class x = p.getClass();
System.out.println(x);
System.out.println(p.toString());
System.out.println(p.hashCode());
System.out.println("============="+name+"=============");
}
}
結語:
我從不知道順其自然有多自然,但我知道現實有多現實。
我從未感受過雪中送炭,隻見過錦上添花~