ok了家人們前幾天學了一些知識,接下來一起看看吧

一.API
Java 的 API ( API: Application( 應用 ) Programming( 程序 )
? Interface(接口 ) )
Java API 就是 JDK 中提供給我們使用的類,這些類將底層
的代碼實現封裝了起來,我們不需要關心這些類是如何
實現的,只需要學習這些類如何使用即可。
我們在每次查看類中的方法時,都打開源代碼進行查
看,這種方式過于麻煩。其實,我們可以通過查幫助文
檔的方式,來了解 Java 提供的 API 如何使用。
- 打開API幫助文檔。
- 點擊顯示,找到索引,看到輸入框。
- 在輸入框里輸入,然后回車。
- 看包。java.lang下的類不需要導包,其他需要。
- 看類的解釋和說明。
- 看構造方法。
- 看成員方法
二.Object類
2.1 Object類概述
java.lang.Object 類是 Java 語言中的根類,每個類都使用
Object 作為超類。所有對象(包括數組)都實現這個類
的方法。
如果一個類沒有特別指定父類,那么默認則繼承自
Object 類。例如:
public class DemoTest/*extends Object*/{ // ... }
2.2 toString()方法
方法聲明: public String toString() :返回該對象的字符
串表示。
public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this. Age = age;}// 省略 getXXX() 和 setXXX() }
public class DemoTest {public static void main(String[] args) {Person p=new Person("張三",23);// String str = p.toString();// System.out.println(str);System.out.println(p.toString());//源碼中println()方法默認調用了 toString()System.out.println(p); }}
由于 toString 方法返回的結果是內存地址,而在開發中,
內存地址并沒有實際的應用價值,經常需要按照對象的
屬性得到相應的字符串表現形式,因此也需要重寫它。
public class Person {private String name;private int age;public Person() { }public Person(String name, int age) {this.name = name; this. Age = age;}// 省略 getXXX() 和 setXXX()@Overridepublic String toString() { return name+"..."+age; } }
public class DemoTest {public static void main(String[] args) {Person p=new Person("張三",23);System.out.println(p.toString());System.out.println(p);}}
在 IntelliJ IDEA 中,可以點擊 Code 菜單中的
Generate... ,也可以使用快捷鍵 alt+insert ,點擊
toString() 選項。選擇需要包含的成員變量并確定。
public class Person {private String name;private int age;public Person() { }public Person(String name, int age) { this.name = name; this. Age = age; }// 省略 getXXX() 和 setXXX()@Overridepublic String toString() {return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';}}
2.3 equals()方法
方法聲明: public boolean equals(Object obj) :指示其
他某個對象是否與此對象 “ 相等 ” 。
equals 方法默認比較兩個對象的內存地址是否相同,相
同則返回 true 。
Object 類 equals() 方法源碼:
public boolean equals(Object obj) {return (this == obj);}
- this是當前對象,哪個對象調用的equals方法就表示哪個對象
- obj 表述傳遞的參數,參數類型 Object ,可以傳遞任意類型對象。
- this==obj 比較兩個對象的內存地址是否相同
public class Person {private String name;private int age;public Person() { }public Person(String name, int age) { this.name = name;this.age = age; }// 省略 getXXX() 和 setXXX()@Overridepublic String toString() {return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }}
* ==: 既可以比較基本數據類型 , 也可以比較引用數據類型
* 比較基本數據類型 : 比較值是否相等
* 比較引用數據類型 : 比較地址值是否相等
*
* public boolean equals(Object obj) :指示其
他某個對象是否與此對象 “ 相等 ” 。
*/
public class DemoTest {
public static void main ( String [] args ) {
// 比較基本數據類型
int a = 10 ;
int b = 20 ; System . out . println ( a == b ); //false
// 比較引用數據類型
Person p01 = new Person ( " 張三 " , 23 );
Person p02 = new Person ( " 張三 " , 23 );
System . out . println ( p01 == p02 ); //false
//Object 類的 equals() 方法
System . out . println ( p01 . equals ( p02 )); //false
}
}
實際應用中,比較內存地址是否相同并沒有意義,我們
可以定義對象自己的比較方式,比較對象中成員變量的
值是否相同。需要對方法進行重寫。
需求:重寫 equals() 方法,比較兩個對象中姓名和年齡是
否相同,如果姓名和年齡都相同返回 true ,否則返回
false 。
public class Person {
private String name ;
private int age ;
public Person () {
}
public Person ( String name , int age ) {
this . name = name ;
this . age = age ;
}
// 省略 getXXX() 和 setXXX()
@Override
public boolean equals ( Object obj ) {
// 判斷兩個對象地址弱相同,即為同一個對象
if ( this == obj ){
return true ;
}
//obj 對象為空,無需比較,返回 false
if ( obj == null ){
return false ;
}
// 如果 Obj 是 Person 類型 則強制轉換
if ( obj instanceof Person ){
Person person = ( Person ) obj ;
return
this . name . equals ( person . name ) &&
this . age == person . age ;
}
return false ;
}
@Override
public String toString () {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
public class DemoTest {
public static void main ( String [] args ) {
Person p01 = new Person ( " 張三 " , 23 );
Person p02 = new Person ( " 張三 " , 23 );
System . out . println ( p01 . equals ( p02 )); //true
}
}
在 IntelliJ IDEA 中,可以使用 Code 菜單中的 Generate…
選項,也可以使用快捷 alt+insert ,并選擇 equals() and
hashCode() 進行自動代碼生成。
三.String類
3.1 String類概述
String 類代表字符串, Java 程序中的所有字符串文字
(例如 “abc” )都被實現為此類的實例。
Java 程序中所有的雙引號字符串,都是 String 類的對
象。
String 類在 java.lang 包下,所以使用的時候不需要
導包!
3.2 String類的構造方法
public String() 創建一個空字符串對象
public String(String original) 通過給定的內容創建一
個 String 對象
public String(char[] value) 根據 char 數組中的內容 , 來
創建對應的字符串對象
public String(byte[] bytes) 根據 byte 數組中的內容 , 來
創建對應的字符串對象
public String(byte[] bytes, int offset, int length) 指
定 byte 數組的范圍 , 根據指定范圍中的內容 , 來創建對應
的字符串對象
直接寫字符串字面值也是 String 類對象 例如 : String
str = "abc";
public class DemoTest {
public static void main ( String [] args ) {
//public String() :創建一個空白字符串對象,不含有任何內容
String str01 = new String ();
System . out . println ( "str01=" + str01 );
//public String(String original) 通過給定的內容創建一個 String 對象
String str02 = new String ( "abc" );
System . out . println ( "str02=" + str02 );
//public String(char[] value) 根據char數組中的內容 , 來創建對應的字符串對象
char [] cs = { 'a' , 'b' , 'c' , 'd' };
String str03 = new String ( cs );
System . out . println ( "str03=" + str03 );
//public String(byte[] bytes) 根據byte數組中的內容 , 來創建對應的字符串對象
byte [] bs = { 97 , 98 , 99 , 100 , 101 };
String str04 = new String ( bs );
System . out . println ( "str04=" + str04 );
//public String(byte[] bytes, int offset, int length)
// 指定 byte 數組的范圍 , 根據指定范圍中的內容, 來創建對應的字符串對象
String str05 = new String ( bs , 1 , 3 );
System . out . println ( "str05=" + str05 );
// 直接寫字符串字面值也是 String 類對象
String str06 = "hello" ;
System . out . println ( "Str06=" + str06 );
}
}
3.3 兩種方式創建字符串的區別
通過 new 創建的字符串對象,每一次 new 都會申請
一個內存空間,雖然字符串內容相同,但是地址值不
同
public class DemoTest {
public static void main ( String [] args ) {
String str01 = new String ( "hello" );
String str02 = new String ( "hello" );
System . out . println ( str01 == str02 ); //false 地址值不同
}
}
以 “ ” 方式給出的字符串,只要字符序列相同 ( 順序和大
小寫 ) ,無論在程序代碼中出現幾次,都只會建立一個
String 對象
public class DemoTest {
public static void main ( String [] args ) {
String str01 = "hello" ;
String str02 = "hello" ;
System . out . println ( str01 == str02 ); //true
}
}
3.4 字符串常用方法
public int length (): 返回此字符串的長度。
public boolean equals(String s): 比較兩個字符串內容
是否相同、區分大小寫
public boolean equalsIgnoreCase (String
anotherString) :將此字符串與指定對象進行比較,
忽略大小寫。
public String concat (String str): 將指定的字符串連接
到該字符串的末尾。
public char charAt (int index): 返回指定索引處的
char 值。
public int indexOf (String str): 返回指定子字符串第一
次出現在該字符串內的索引。
public String substring (int beginIndex): 返回一個子
字符串,從 beginIndex 開始截取字符串到字符串結
尾。
public String substring (int beginIndex, int
endIndex): 返回一個子字符串 , 從 beginIndex 到
endIndex 截取字符串。含 beginIndex, 不含
endIndex 。
public class DemoTest {
public static void main ( String [] args ) {
String str = "woaijava" ;
//public int length (): 返回此字符串的 長度。
int len = str . length ();
System . out . println ( len ); //8
//public boolean equals(String s): 比較兩個字符串內容是否相同、區分大小寫
boolean lean01 = str . equals ( "woaiJava" ); //false
System . out . println ( lean01 );
//public boolean equalsIgnoreCase(String anotherString)
// 將此字符串與指定對象進行比較,忽略大小寫。
boolean lean02 = str . equalsIgnoreCase ( "woaiJava" );
System . out . println ( lean02 ); //true
//public String concat (String str):
將指定的字符串連接到該字符串的末尾。
String newStr = str . concat ( "haha" );
System . out . println ( newStr ); //woaijavahaha
//public char charAt (int index): 返回指定索引處的 char 值。
char c = str . charAt ( 3 );
System . out . println ( c ); //i
// 遍歷字符串 w o a i j a
v a
for ( int i = 0 ; i < str . length (); i ++ ){
System . out . print ( str . charAt ( i ) + "\t" );
}
System . out . println ();
//public int indexOf (String str):
// 返回指定子字符串第一次出現在該字符串內的
索引。
beginIndex 開始截
取字符串到字符串結尾。
String sub01 = str . substring ( 4 );
System . out . println ( sub01 ); //java
//public String substring (int beginIndex, int endIndex):
// 返回一個子字符串 , 從 beginIndex 到 endIndex截取字符串。
// 含 beginIndex, 不含 endIndex 。
String sub02 = str . substring ( 2 , 6 );
System . out . println ( sub02 ); //aija
}
}
3.5?其他方法
public class DemoTest {
public static void main ( String [] args ) {
//boolean isEmpty() 判斷字符串是否為空(長度為 0 返回 true ,不為 0 返回 false)
String str01 = null ; // 空 表示什么都沒有
String str02 = "" ; // 空字符串對象
String str03 = " " ; // 有一個空格字符的字符 串對象
System . out . println ( "---------------------" );
//System.out.println(str01.isEmpty());//Nul
lPointerException
System . out . println ( str02 . isEmpty ()); //true System . out . println ( str03 . isEmpty ()); //false
System . out . println ( "---------------------" );
//boolean contains(CharSequence s) 判
斷字符串中是否包含 給定的字符串
String str04 = "helloworld" ;
System . out . println ( str04 . contains ( "Hello" ))
; //false
System . out . println ( str04 . contains ( "world" ))
; //true
System . out . println ( "---------------------" );
//boolean startsWith(String prefix) 判斷字符串是否以 給定的字符串開頭
//boolean endsWith(String suffix) 判斷字符串是否以 給定的字符串 結尾。
String str05 = "helloworld.java" ;
System . out . println ( str05 . startsWith ( "world" )); //false
System . out . println ( str05 . startsWith ( "he" )); //true
System . out . println ( str05 . endsWith ( ".java" )) ; //true
System . out . println ( str05 . endsWith ( ".html" )) ; //false
System . out . println ( "---------------------" );
//String toLowerCase() 把字母都轉成其對應的小寫形式
//String toUpperCase() 把字母都轉成其對應的大寫形式
String str06 = "AbCdEf" ;
System . out . println ( str06 . toLowerCase ()); //abcdef
System . out . println ( str06 . toUpperCase ()); //ABCDEF
System . out . println ( "---------------------" );
//String replace(char oldChar, char newChar)用新內容替代舊內容,返回新的字符串
String str07 = " 小學生放假了 , 小學生打游戲 了" ; String str08 = str07 . replace ( " 小學生" , "***" );
System . out . println ( str08 ); //*** 放假了,*** 打游戲了
System . out . println ( "---------------------" );
//char[] toCharArray() 將此字符串轉換為一個新的字符數組
String str09 = "abcd" ;
char [] cs = str09 . toCharArray ();
System . out . println ( Arrays . toString ( cs )); //[ a, b, c, d]
System . out . println ( "---------------------" );
//byte[] getBytes() 把字符串轉換為字節數組
String str10 = "hello" ;
byte [] bs = str10 . getBytes ();
System . out . println ( Arrays . toString ( bs )); //[
104, 101, 108, 108, 111]
System . out . println ( "---------------------" );
// String trim() 移除首尾空格
String str11 = " zhangsan " ;
String str12 = str11 . trim ();
System . out . println ( str12 );
System . out . println ( "---------------------" );
//String[] split(String regex) 根據給定正則表達式的匹配拆分此字符串。
// 傳入一個普通的字符串 , 沒有特殊含義
String str13 = "a,b,c,d,e" ;
String [] sp01 = str13 . split ( "," );
System . out . println ( Arrays . toString ( sp01 )); //[a, b, c, d, e]
// 高級用法 : 傳入有特殊含義的字符串 , 其實就是正則表達式
// 正則表達式 : . 匹配任何單字符
String str14 = "a.b.c.d.e" ;
String [] sp02 = str14 . split ( "\\." );
System . out . println ( Arrays . toString ( sp02 ));
}
}
四.StringBuilder類
4.1 String類字符串拼接問題
public static void main ( String [] args ) {
String str = "hello" ;
str += "world" ;
System . out . println ( str );
}
}
在 API 中對 String 類有這樣的描述:字符串是常量,它們
的值在創建后不能被更改。
根據這句話分析我們的代碼,其實總共產生了三個字符
串 : Hello 、 World 和 HelloWorld 。
String 類的字符串拼接 , 每一次拼接完都會得到一個新的
字符串對象 , 所以比較耗時 , 也浪費空間。
4.2 StringBuilder類概述
StringBuilder 是一個可變的字符串類 ,我們可以把它
看成是一個容器,這里的可變指的是 StringBuilder 對象
中的內容是可變的。
StringBuilder 類和 String 類的區別
String 類:內容是不可變的
StringBuilder 類:內容是可變的
4.3 StringBuilder類的構造方法
public StringBuilder() 創建一個空白可變字符串對
象,不含有任何內容
public StringBuilder(String str) 根據字符串的內容,
來創建可變字符串對象
public class DemoTest {
public static void main ( String [] args ) {
//public StringBuilder() :創建一個空白可變字符串對象,不含有任何內容
StringBuilder sb01 = new StringBuilder ();
System . out . println ( "sb01=" + sb01 );
System . out . println ( " 長度=" + sb01 . length ());
//public StringBuilder(String str) :根據字符串的內容,來創建可變字符串對象
StringBuilder sb02 = new StringBuilder ( "hello" );
System . out . println ( "sb02=" + sb02 );
System . out . println ( " 長度 =" + sb02 . length ());
}
}
4.4 StringBuilder類常用方法
public StringBuilder append( 任意類型 ) 拼接數據,
并返回對象本身
public StringBuilder insert(int offset, 任意類型 ) 在
指定位置插入數據 , 并返回對象本身
public StringBuilder reverse() 反轉字符串 , 并返回對
象本身
public class DemoTest {
public static void main ( String [] args ) {
StringBuilder sb01 = new
StringBuilder ();
//public StringBuilder append( 任意類
型 ) 拼接數據,并返回對象本身
// StringBuilder sb02 = sb01.append("hello");
System.out.println(sb02==sb01);//true
// sb01.append(123);
// System.out.println(sb01);
//public StringBuilder insert(int offset, 任意類型 )
// 在指定位置插入數據 , 并返回對象本身
// sb01.insert(5,"world");
// System.out.println(sb01)
//public StringBuilder reverse() 反轉字符串, 并返回對象本身
// StringBuilder sb03 = sb01.reverse();
// System.out.println(sb01==sb03);
// System.out.println(sb01);
// 鏈式編程
sb01 . append ( "hello" ). append ( 123 ). insert ( 5 , "world" ). reverse ();
System . out . println ( sb01 );
}
}
4.5 StringBuilder和String相互轉換
StringBuilder 轉換為 String
public String toString() :通過 StringBuilder 類中的
toString() 就可以實現把 StringBuilder 轉換為 String
String 轉換為 StringBuilder
public StringBuilder(String s) :通過 StringBuilder 的構
造方法就可以實現把 String 轉換為 StringBuilder
public class DemoTest {
public static void main ( String [] args ) {
//String -->StringBuilder
String str01 = "hello" ;
StringBuilder sb = new StringBuilder ( str01 );
sb . append ( "world" );
//StringBuilder --> String
String s = sb . toString ();
System . out . println ( s );
}
}
ok了家人們睡了明天見
