Java本科學習 0x08 常用API
題記
一定是練功的時候總是差不多差不多,到關鍵時候總是差一點。 ——二郎神臺詞《寶蓮燈》
1.API
1.1API概述
-
什麼是API
API (Application Programming Interface) :應用程式程式設計介面
-
java中的API
指的就是 JDK 中提供的各種功能的 Java類,這些類將底層的實現封裝了起來,我們不需要關心這些類是如何實現的,只需要學習這些類如何使用即可,我們可以通過幫助文件來學習這些API如何使用。
1.2如何使用API幫助文件
- 開啟幫助文件
- 找到索引選項卡中的輸入框
- 在輸入框中輸入Random
- 看類在哪個包下
- 看類的描述
- 看構造方法
- 看成員方法
2.String類
2.1String類概述
String 類代表字串,Java 程式中的所有字串文字(例如“abc”)都被實現為此類的例項。也就是說,Java 程式中所有的雙引號字串,都是 String 類的物件。String 類在 java.lang 包下,所以使用的時候不需要導包!
2.2String類的特點
- 字串不可變,它們的值在建立後不能被更改
- 雖然 String 的值是不可變的,但是它們可以被共享
- 字串效果上相當於字元陣列( char[] ),但是底層原理是位元組陣列( byte[] )
2.3String類的構造方法
-
常用的構造方法
方法名 說明 public String() 建立一個空白字串物件,不含有任何內容 public String(char[] chs) 根據字元陣列的內容,來建立字串物件 public String(byte[] bys) 根據位元組陣列的內容,來建立字串物件 String s = “abc”; 直接賦值的方式建立字串物件,內容就是abc -
示例程式碼
public class StringDemo01 { public static void main(String[] args) { //public String():建立一個空白字串物件,不含有任何內容 String s1 = new String(); System.out.println("s1:" + s1); //public String(char[] chs):根據字元陣列的內容,來建立字串物件 char[] chs = {'a', 'b', 'c'}; String s2 = new String(chs); System.out.println("s2:" + s2); //public String(byte[] bys):根據位元組陣列的內容,來建立字串物件 byte[] bys = {97, 98, 99}; String s3 = new String(bys); System.out.println("s3:" + s3); //String s = “abc”; 直接賦值的方式建立字串物件,內容就是abc String s4 = "abc"; System.out.println("s4:" + s4); } }
2.4建立字串物件兩種方式的區別
-
通過構造方法建立
通過 new 建立的字串物件,每一次 new 都會申請一個記憶體空間,雖然內容相同,但是地址值不同
-
直接賦值方式建立
以“”方式給出的字串,只要字元序列相同(順序和大小寫),無論在程式程式碼中出現幾次,JVM 都只會建立一個 String 物件,並在字串池中維護
2.5字串的比較
2.5.1==號的作用
- 比較基本資料型別:比較的是具體的值
- 比較引用資料型別:比較的是物件地址值
2.5.2equals方法的作用
-
方法介紹
public boolean equals(String s) 比較兩個字串內容是否相同、區分大小寫
-
示例程式碼
public class StringDemo02 { public static void main(String[] args) { //構造方法的方式得到物件 char[] chs = {'a', 'b', 'c'}; String s1 = new String(chs); String s2 = new String(chs); //直接賦值的方式得到物件 String s3 = "abc"; String s4 = "abc"; //比較字串物件地址是否相同 System.out.println(s1 == s2); System.out.println(s1 == s3); System.out.println(s3 == s4); System.out.println("--------"); //比較字串內容是否相同 System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s3.equals(s4)); } }
2.6使用者登入案例
2.6.1案例需求
已知使用者名稱和密碼,請用程式實現模擬使用者登入。總共給三次機會,登入之後,給出相應的提示
2.6.2程式碼實現
/*
思路:
1:已知使用者名稱和密碼,定義兩個字串表示即可
2:鍵盤錄入要登入的使用者名稱和密碼,用 Scanner 實現
3:拿鍵盤錄入的使用者名稱、密碼和已知的使用者名稱、密碼進行比較,給出相應的提示。字串的內容比較,用equals() 方法實現
4:用迴圈實現多次機會,這裡的次數明確,採用for迴圈實現,並在登入成功的時候,使用break結束迴圈
*/
public class StringTest01 {
public static void main(String[] args) {
//已知使用者名稱和密碼,定義兩個字串表示即可
String username = "itheima";
String password = "czbk";
//用迴圈實現多次機會,這裡的次數明確,採用for迴圈實現,並在登入成功的時候,使用break結束迴圈
for(int i=0; i<3; i++) {
//鍵盤錄入要登入的使用者名稱和密碼,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入使用者名稱:");
String name = sc.nextLine();
System.out.println("請輸入密碼:");
String pwd = sc.nextLine();
//拿鍵盤錄入的使用者名稱、密碼和已知的使用者名稱、密碼進行比較,給出相應的提示。字串的內容比較,用equals() 方法實現
if (name.equals(username) && pwd.equals(password)) {
System.out.println("登入成功");
break;
} else {
if(2-i == 0) {
System.out.println("你的賬戶被鎖定,請與管理員聯絡");
} else {
//2,1,0
//i,0,1,2
System.out.println("登入失敗,你還有" + (2 - i) + "次機會");
}
}
}
}
}
2.7遍歷字串案例
2.7.1案例需求
鍵盤錄入一個字串,使用程式實現在控制檯遍歷該字串
2.7.2程式碼實現
/*
思路:
1:鍵盤錄入一個字串,用 Scanner 實現
2:遍歷字串,首先要能夠獲取到字串中的每一個字元
public char charAt(int index):返回指定索引處的char值,字串的索引也是從0開始的
3:遍歷字串,其次要能夠獲取到字串的長度
public int length():返回此字串的長度
陣列的長度:陣列名.length
字串的長度:字串物件.length()
4:遍歷字串的通用格式
*/
public class StringTest02 {
public static void main(String[] args) {
//鍵盤錄入一個字串,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字串:");
String line = sc.nextLine();
for(int i=0; i<line.length(); i++) {
System.out.println(line.charAt(i));
}
}
}
2.8統計字元次數案例
2.8.1案例需求
鍵盤錄入一個字串,統計該字串中大寫字母字元,小寫字母字元,數字字元出現的次數(不考慮其他字元)
2.8.2程式碼實現
/*
思路:
1:鍵盤錄入一個字串,用 Scanner 實現
2:要統計三種類型的字元個數,需定義三個統計變數,初始值都為0
3:遍歷字串,得到每一個字元
4:判斷該字元屬於哪種型別,然後對應型別的統計變數+1
假如ch是一個字元,我要判斷它屬於大寫字母,小寫字母,還是數字,直接判斷該字元是否在對應的範圍即可
大寫字母:ch>='A' && ch<='Z'
小寫字母: ch>='a' && ch<='z'
數字: ch>='0' && ch<='9'
5:輸出三種類型的字元個數
*/
public class StringTest03 {
public static void main(String[] args) {
//鍵盤錄入一個字串,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字串:");
String line = sc.nextLine();
//要統計三種類型的字元個數,需定義三個統計變數,初始值都為0
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
//遍歷字串,得到每一個字元
for(int i=0; i<line.length(); i++) {
char ch = line.charAt(i);
//判斷該字元屬於哪種型別,然後對應型別的統計變數+1
if(ch>='A' && ch<='Z') {
bigCount++;
} else if(ch>='a' && ch<='z') {
smallCount++;
} else if(ch>='0' && ch<='9') {
numberCount++;
}
}
//輸出三種類型的字元個數
System.out.println("大寫字母:" + bigCount + "個");
System.out.println("小寫字母:" + smallCount + "個");
System.out.println("數字:" + numberCount + "個");
}
}
2.9字串拼接案例
2.9.1案例需求
定義一個方法,把 int 陣列中的資料按照指定的格式拼接成一個字串返回,呼叫該方法,
並在控制檯輸出結果。例如,陣列為 int[] arr = {1,2,3}; ,執行方法後的輸出結果為:[1, 2, 3]
2.9.2程式碼實現
/*
思路:
1:定義一個 int 型別的陣列,用靜態初始化完成陣列元素的初始化
2:定義一個方法,用於把 int 陣列中的資料按照指定格式拼接成一個字串返回。
返回值型別 String,引數列表 int[] arr
3:在方法中遍歷陣列,按照要求進行拼接
4:呼叫方法,用一個變數接收結果
5:輸出結果
*/
public class StringTest04 {
public static void main(String[] args) {
//定義一個 int 型別的陣列,用靜態初始化完成陣列元素的初始化
int[] arr = {1, 2, 3};
//呼叫方法,用一個變數接收結果
String s = arrayToString(arr);
//輸出結果
System.out.println("s:" + s);
}
//定義一個方法,用於把 int 陣列中的資料按照指定格式拼接成一個字串返回
/*
兩個明確:
返回值型別:String
引數:int[] arr
*/
public static String arrayToString(int[] arr) {
//在方法中遍歷陣列,按照要求進行拼接
String s = "";
s += "[";
for(int i=0; i<arr.length; i++) {
if(i==arr.length-1) {
s += arr[i];
} else {
s += arr[i];
s += ", ";
}
}
s += "]";
return s;
}
}
2.10字串反轉案例
2.10.1案例需求
定義一個方法,實現字串反轉。鍵盤錄入一個字串,呼叫該方法後,在控制檯輸出結果
例如,鍵盤錄入 abc,輸出結果 cba
2.10.2程式碼實現
/*
思路:
1:鍵盤錄入一個字串,用 Scanner 實現
2:定義一個方法,實現字串反轉。返回值型別 String,引數 String s
3:在方法中把字串倒著遍歷,然後把每一個得到的字元拼接成一個字串並返回
4:呼叫方法,用一個變數接收結果
5:輸出結果
*/
public class StringTest05 {
public static void main(String[] args) {
//鍵盤錄入一個字串,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字串:");
String line = sc.nextLine();
//呼叫方法,用一個變數接收結果
String s = reverse(line);
//輸出結果
System.out.println("s:" + s);
}
//定義一個方法,實現字串反轉
/*
兩個明確:
返回值型別:String
引數:String s
*/
public static String reverse(String s) {
//在方法中把字串倒著遍歷,然後把每一個得到的字元拼接成一個字串並返回
String ss = "";
for(int i=s.length()-1; i>=0; i--) {
ss += s.charAt(i);
}
return ss;
}
}
2.11幫助文件檢視String常用方法
方法名 | 說明 |
---|---|
public boolean equals(Object anObject) | 比較字串的內容,嚴格區分大小寫(使用者名稱和密碼) |
public char charAt(int index) | 返回指定索引處的 char 值 |
public int length() | 返回此字串的長度 |
3.ArrayList
3.1ArrayList類概述
-
什麼是集合
提供一種儲存空間可變的儲存模型,儲存的資料容量可以發生改變
-
ArrayList集合的特點
底層是陣列實現的,長度可以變化
-
泛型的使用
用於約束集合中儲存元素的資料型別
3.2ArrayList類常用方法
3.2.1構造方法
方法名 | 說明 |
---|---|
public ArrayList() | 建立一個空的集合物件 |
3.2.2成員方法
方法名 | 說明 |
---|---|
public boolean remove(Object o) | 刪除指定的元素,返回刪除是否成功 |
public E remove(int index) | 刪除指定索引處的元素,返回被刪除的元素 |
public E set(int index,E element) | 修改指定索引處的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引處的元素 |
public int size() | 返回集合中的元素的個數 |
public boolean add(E e) | 將指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
3.2.3示例程式碼
public class ArrayListDemo02 {
public static void main(String[] args) {
//建立集合
ArrayList<String> array = new ArrayList<String>();
//新增元素
array.add("hello");
array.add("world");
array.add("java");
//public boolean remove(Object o):刪除指定的元素,返回刪除是否成功
// System.out.println(array.remove("world"));
// System.out.println(array.remove("javaee"));
//public E remove(int index):刪除指定索引處的元素,返回被刪除的元素
// System.out.println(array.remove(1));
//IndexOutOfBoundsException
// System.out.println(array.remove(3));
//public E set(int index,E element):修改指定索引處的元素,返回被修改的元素
// System.out.println(array.set(1,"javaee"));
//IndexOutOfBoundsException
// System.out.println(array.set(3,"javaee"));
//public E get(int index):返回指定索引處的元素
// System.out.println(array.get(0));
// System.out.println(array.get(1));
// System.out.println(array.get(2));
//System.out.println(array.get(3)); //?????? 自己測試
//public int size():返回集合中的元素的個數
System.out.println(array.size());
//輸出集合
System.out.println("array:" + array);
}
}
3.3ArrayList儲存字串並遍歷
3.3.1案例需求
建立一個儲存字串的集合,儲存3個字串元素,使用程式實現在控制檯遍歷該集合
3.3.2程式碼實現
/*
思路:
1:建立集合物件
2:往集合中新增字串物件
3:遍歷集合,首先要能夠獲取到集合中的每一個元素,這個通過get(int index)方法實現
4:遍歷集合,其次要能夠獲取到集合的長度,這個通過size()方法實現
5:遍歷集合的通用格式
*/
public class ArrayListTest01 {
public static void main(String[] args) {
//建立集合物件
ArrayList<String> array = new ArrayList<String>();
//往集合中新增字串物件
array.add("劉正風");
array.add("左冷禪");
array.add("風清揚");
//遍歷集合,其次要能夠獲取到集合的長度,這個通過size()方法實現
// System.out.println(array.size());
//遍歷集合的通用格式
for(int i=0; i<array.size(); i++) {
String s = array.get(i);
System.out.println(s);
}
}
}
3.4ArrayList儲存學生物件並遍歷
3.4.1案例需求
建立一個儲存學生物件的集合,儲存3個學生物件,使用程式實現在控制檯遍歷該集合
3.4.2程式碼實現
/*
思路:
1:定義學生類
2:建立集合物件
3:建立學生物件
4:新增學生物件到集合中
5:遍歷集合,採用通用遍歷格式實現
*/
public class ArrayListTest02 {
public static void main(String[] args) {
//建立集合物件
ArrayList<Student> array = new ArrayList<>();
//建立學生物件
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("風清揚", 33);
Student s3 = new Student("張曼玉", 18);
//新增學生物件到集合中
array.add(s1);
array.add(s2);
array.add(s3);
//遍歷集合,採用通用遍歷格式實現
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
}
3.5ArrayList儲存學生物件並遍歷升級版
3.5.1案例需求
建立一個儲存學生物件的集合,儲存3個學生物件,使用程式實現在控制檯遍歷該集合
學生的姓名和年齡來自於鍵盤錄入
3.5.2程式碼實現
/*
思路:
1:定義學生類,為了鍵盤錄入資料方便,把學生類中的成員變數都定義為String型別
2:建立集合物件
3:鍵盤錄入學生物件所需要的資料
4:建立學生物件,把鍵盤錄入的資料賦值給學生物件的成員變數
5:往集合中新增學生物件
6:遍歷集合,採用通用遍歷格式實現
*/
public class ArrayListTest {
public static void main(String[] args) {
//建立集合物件
ArrayList<Student> array = new ArrayList<Student>();
//為了提高程式碼的複用性,我們用方法來改程序序
addStudent(array);
addStudent(array);
addStudent(array);
//遍歷集合,採用通用遍歷格式實現
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
/*
兩個明確:
返回值型別:void
引數:ArrayList<Student> array
*/
public static void addStudent(ArrayList<Student> array) {
//鍵盤錄入學生物件所需要的資料
Scanner sc = new Scanner(System.in);
System.out.println("請輸入學生姓名:");
String name = sc.nextLine();
System.out.println("請輸入學生年齡:");
String age = sc.nextLine();
//建立學生物件,把鍵盤錄入的資料賦值給學生物件的成員變數
Student s = new Student();
s.setName(name);
s.setAge(age);
//往集合中新增學生物件
array.add(s);
}
}