
Java的API(Application Programming Interface)也叫應用程序接口,是JDK中提供給我們使用的類,這些類將底層代碼封裝起來
Object類
Object類的概述
Object類是Java語言中的根類,是所有類的父類,它描述的所有子類方法都可以使用,所有類在創(chuàng)建對象時,最終找到的父類就是Object
equals 方法
equals方法用于比較兩個對象是否相同,其實就是比較兩給對象的內存地址是否相同,Object類中的equals方法內部就是使用==比較符
在Object類中原代碼為
public boolean equals(Object obj){
return this == obj;
}
在開發(fā)中比較兩個對象是否相等意義不大,通常會根據(jù)對象中的屬性值進行比較,也就是在開發(fā)中需要從寫equals方法的屬性進行比較
下面描述一個人的類,并定義功能判斷是否為同齡人
public class Person extends Object{
private String name;
private int age;
// 無參數(shù)構造方法
public Person(){
}
// 有參數(shù)構造方法
public Person(String name, int age){
this.name = name;
this.age = age;
}
// 重寫父類的equals方法
public boolean equals(Object obj){
// 判斷是當前調用的equals方法的對象和傳遞進來的對象是否是同一個
if(this == obj){
return true;
}
// 判斷是否傳遞進來的對象是否是Person類型
// 對obj參數(shù)進行向下轉型,把obj轉成Person類型
if(obj instanceof Person){
Person p = (Person)obj;
return this.age == p.age;
}
return false;
}
// getters和setters
...
}
注意:在重寫Object中的equals方法時,public boolean equals(Object obj)的參數(shù)是Object類型,在調用屬性時,一定要進行類型轉換,在轉換之前必須對類型進行判斷
toString方法
toString方法返回該對象的字符串表示,一般默認返回的該字符串的內容是【對象類型@內存地址】
由于toString方法返回的結果是內存地址,而在實際的開發(fā)中,經常需要按照對象的屬性得到相應的字符串的表達形式,因此也需要重寫,比如Person類返回name
class Person extends Object{
...
// 根據(jù)Person類的屬性重寫toString方法
public String toString(){
return name
}
}
String類
String類的概述
查閱API中的String類的描述,發(fā)現(xiàn)String類代表的字符串,Java中的所有字符串(如“abc”)都作為此類的實例實現(xiàn)的
繼續(xù)查閱API發(fā)現(xiàn)說字符串是常量,它們在的值在創(chuàng)建后就不能更改,這是什么意思呢?其實就是說一旦這個字符串一旦確定了,那么就會在內存區(qū)域生成這個字符串,字符本生不能改變,但str變量中的記錄的地址可以改變
在String源碼中private final char value[]定義為不可改變的數(shù)組

符串有大量的重載的構造方法。通過
String類的構造方法可以完成字符串對象的創(chuàng)建,那么,通過使用雙引號的方式創(chuàng)建對象與new的方式創(chuàng)建對象,有什么不同呢?看如下程序:
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1==str2); //false
System.out.println(str1.equals(str2)); //true
因為String重寫了equals方法,建立了字符串自己的判斷相同的依據(jù)(通過字符串對象中的字符來判斷)
str1和str2的創(chuàng)建方式有什么不同呢?
- str1創(chuàng)建,在內存中只有一個對象,這個對象在字符串常量池中
- str2創(chuàng)建,在內存中有兩個對象,一個
new的對象在堆中,一個字符串本身對象,在字符串常量池中
String的構造方法
構造方法是用來完成String對象的創(chuàng)建,下面給出了一部分構造方法需要在API中找到,并能夠使用下列構造方法創(chuàng)建對象
String類中的構造函數(shù)
-
String()構造一個空字符串對象 -
String(byte[] bytes)通過byte數(shù)組構造字符串對象 -
String(byte[] bytes,int offset,int length)通過byte數(shù)組,從offset開始,總共length長的字節(jié)構造字符串對象 -
String(char[] value)通過char數(shù)組構造字符串對象 -
String(byte[] char,int offset,int length)通過char數(shù)組,從offset開始,總共length長的字節(jié)構造字符串對象 -
String(String original)構造一個original的副本,拷貝一個original -
String(StringBuffer buffer)通過StringBuffer數(shù)組構造字符串對象
String類的常用方法
-
length( )查看字符串長度 -
charAt(int index)獲取字符串中的某個值 -
contains(String str)判斷一個字符串是否包含另一個字符串 -
getBytes( )將字符串轉換為字節(jié)數(shù)組 -
toCharArray( )將字符串轉換為字符數(shù)組 -
compareTo( )比較兩個字符串的大小,相等返回0,大于返回正數(shù),小于返回負數(shù) -
compareToIgnoreCase( )比較兩個字符串的大小,不考慮大小寫 -
toUpperCase( )、toLowerCase( )大、小寫轉換 -
indexOf( )字符串位置查找。indexOf(int ch):在此對象表示的字符序列中第一次出現(xiàn)該字符的索引;如果未出現(xiàn)該字符,則返回 -1。indexOf(int ch,int fromIndex): 在此對象表示的字符序列中第一次出現(xiàn)的大于或等于fromIndex的字符的索引;如果未出現(xiàn)該字符,則返回 -1。 -
lastIndexOf( )字符串位置查找,與indexOf()查找順序相反 -
startsWith(String str)測試字符串以指定的前綴開始,后面還可以添加指定的索引,表示從指定的索引開始的字符串是否以指定的前綴開始 -
endsWith(String str )測試字符串以指定的后綴結束 -
substring( ):substring(int beginIndex)返回一個新的字符串,它是此字符串的一個子字符串。substring(int beginIndex, int endIndex)返回一個新字符串,它是此字符串的一個子字符串。(左包含右不包含) -
split(String regex )根據(jù)給定正則表達式的匹配拆分此字符串。 -
trim( )用戶數(shù)據(jù)后臺校驗前的過濾,返回字符串的副本,忽略前導空白和尾部空白
StringBuffer類
查閱StringBuffer的API,StringBuffer又稱為可變字符序列,它是一個類似于 String的字符串緩沖區(qū),通過某些方法調用可以改變該序列的長度和內容。
原來StringBuffer是個字符串的緩沖區(qū),即就是它是一個容器,容器中可以裝很多字符串。并且能夠對其中的字符串進行各種操作。
StringBuffer的方法使用
-
append(String str)將指定字符串追加到此字符序列 -
delete(int start, int end)移除此序列的字符串中的字符 -
insert(int offset, String str)將字符串插入到此字符串序列中 -
replace(int start, int end, String str)替換相應位子的字符串 -
reverse()反轉字符串 -
toString()反回序列中數(shù)據(jù)的字符串(是String類型)
StringBuilder類
查閱API發(fā)現(xiàn)還有一個StringBuilder類,它也是字符串緩沖區(qū),StringBuilder與它和StringBuffer的有什么不同呢?
我們閱讀StringBuilder的API說明發(fā)現(xiàn),它也是一個可變的字符序列。此類提供一個與 StringBuffer兼容的 API,但不保證同步。該類被設計用作 StringBuffer的一個簡易替換,用在字符串緩沖區(qū)被單個線程使用的時候(這種情況很普遍)。如果可能,建議優(yōu)先采用該類,因為在大多數(shù)實現(xiàn)中,它比 StringBuffer 要快