API-異常,StringBuilder,String,常量池
API:應用程式程式設計介面,即jdk文件手冊,裡面以類的形式提供了
很多常用的功能。
常用的包與類:
java.lang包:因為常用,所以不需要導包
字串,執行緒
java.util包: 陣列工具類,日期,集合等
java.net包: 網路相關的型別
java.io包: 輸入輸出型別
java.math包: 數學應用的相關型別
打包工具:javadoc
(1)使用命令提示符介面:
類資訊中沒有宣告包,即使用預設包
javadoc -d path *.java
path:生成api文件的位置
類資訊中聲明瞭包 如:package com
javadoc -d path nameOfPackage
如:
javadoc -d .\doc com
原始檔在不同包下:
javadoc -d path nameOfPackage1 nameOfPackage2....
如:
javadoc -d .\doc com demo
(2)藉助eclipse
export--java--javadoc-->
選擇javadoc命令的路徑
選中要生成文件的專案
選擇生成文件的位置
===========================================
異常:
在程式開發過程中出現的不正常情況,就是異常。比如,
除數是0,引數為null,呼叫引數的成員變數或者方法,陣列下標越界
異常分為兩大型別:
(1)exception:程式設計師可以解決的:空指標,除數是0,陣列下標越界
(2)Error:程式設計師無法解決的:如記憶體溢位
Throwable是這兩種型別的父類
exception的分類:
按照編譯器是否檢查進行分類:
非檢查性異常:也稱之為執行時異常,即,編譯器在檢查語法期間,不做
異常檢查。
檢查性異常: 也稱之為編譯時異常,此時,編譯器會強制檢查語法中的異常情況
如有異常,在編譯期需要做異常處理
exception的結構:
RuntimeException:
NullPointerException
ArrayIndexOutOfBoundsException
ClassCastException
IllegalArgumentExcetion
NumberFormatException
IOException:
EOFException
FileNotFoundException
異常的處理:
(1)當異常出現時,終止程式
(2)當異常出現時,我們使用處理機制進行處理異常。無序終止程式
體驗度:儘可能的選擇異常處理機制。
異常處理機制:
基本思想:
在可能出現異常的程式碼塊區域,進行嘗試檢查,如果
出現了異常資訊,我們將這些資訊封裝成某一異常型別的物件。
然後進行捕獲與處理
try{
可能出現異常的程式碼塊
/*如果有異常,jvm會將異常資訊,封裝成物件
將地址資訊賦值給catch中的形參
*/
}catch(Exception e){
進行處理e
}
多catch語句塊情況:
當我們在嘗試捕獲異常物件時,想對多種不同的異常物件分別處理時,
需要使用多個catch語句塊
說明: 當在try中出現了異常資訊,那麼就不會再執行try中程式碼塊的
後續部分。進入相應的catch程式碼塊中執行處理。
多catch語句塊情況下,catch處理的異常種類書寫順序:
先寫子類異常型別,再寫父類異常
throw:丟擲關鍵字,在本方法中出現的異常,不做try-catch處理。
而是拋給呼叫者處理。需要使用throw關鍵字。
throws:宣告異常關鍵字,通常用於方法的定義上,用於通知呼叫者
當throw的異常物件為檢查性異常,方法上必須throws此異常型別
如果throw的異常物件為非檢查性異常,方法上不必throws此異常型別
方法重寫時的throws的用法
可行的:
(1)可以相同
(2)可以是部分
(3)異常的子型別可行,可以是多個子型別
不行的:
(1)不同的異常型別,不可以多宣告
(2)異常的父型別不行
finally:
是為try-catch提供了統一的出口。不管try與catch語句塊是否
發生了異常,最終都會執行finally裡的程式碼塊 。
通常用於處理一些資源的關閉等操作:
如讀取檔案時關閉操作,或者是刪除臨時檔案
finally語句塊可選。
StringBuilder:可變字串型別:
(字串:底層是字元陣列,及其對陣列的操作)
特點:
(1)此型別是final修飾的
(2)沒有重寫equals方法
(3)此型別提供的大多數方法都帶有返回值,
即: return this 返回同一個地址
構造器:
StringBuilder()
構造了一個空的StringBuilder物件,初始容量為16。
StringBuilder(String str)
建立一個指定字串的StringBuilder物件
常用方法:
int length():
返回有效字元的長度。
StringBuilder append(Type a):
將引數a追加到StringBuilder物件裡,返回此物件
StringBuilider insert(int index,Type a);
將引數a插入到物件的下標index處
StringBuilder delete(int start,int end);
刪除此物件裡的部分字元,從start開始,到end結束,注意:包前不包後
StringBuilder replace(int start,int end,String str);
使用str替換此物件從start開始到end結束的子串
StringBuilder reverse():
將StringBuilder物件的內容進行翻轉
StringBuffer:此類與StringBuilder用法一模一樣。
但是:
線上程安全上考慮:
StringBuffer執行緒安全
StringBuilder執行緒不安全
在執行效率上:
StringBuffer效率低
StringBuilder效率高
練習:測試兩種型別的效率高低。
================================================
String型別:(底層是字元陣列+對陣列的操作)
特點:
(1)是不可變的字串型別,(不可變:物件的內容不能更改)
(2)final修飾的型別
(3)字元下標(索引/index)從0開頭
(4)重寫了equals方法和toString方法
(5)預設使用的是unicode字符集,任意字元都佔兩個位元組。
構造器:
String():
建立一個空字元序列的字串物件
String(byte[] bs)
建立一個字串物件。使用預設字符集進行解碼的字串。
String(byte[] bs,String charset)
將位元組陣列使用指定字符集進行解碼成相應的字串物件
String(char[] ch)
將字元陣列轉換成字串物件
String(String str)
指定一個字串字面量建立一個字串物件
常用方法:
int length():
返回字串物件的字元個數
char charAt(int index):
返回此字元序列中指定索引處的字元
String concat(String another):
將指定字串another拼接到此字元序列的末尾,返回新物件
boolean stratsWith(String prefix)/endsWith(String suffix)
檢視此字元序列是否以prefix為字首/以suffix為字尾
byte[] getBytes():
將此字串按照預設字符集編碼成位元組序列,返回一個新的位元組陣列
byte[] getBytes(String charset)
將此字串按照指定的字符集編碼成位元組序列,返回新的位元組陣列
查詢字串中的字元/子字串的位置
int indexOf(int ch)
返回字元ch在此字串中第一次出現的下標(索引/位置)
int intexOf(int ch,int fromIndex):
返回字元ch從此字串fromIndex下標開始,往後第一次出現的位置
int indexOf(String str):
int indexOf(String str,int fromIndex):
注意:返回-1,說明要找字元/子字串 不存在查詢序列中
int lastIndexOf(int ch);
int lastIndexOf(String str)
int lastIndexOf(int ch,int endIndex)
int lastIndexOf(String str,int endIndex)
查詢字元/子字串截止到某一下標時,最後一次出現的位置。
上述四個方法:
查詢字元/子字串在此字元序列中最後一次出現的位置,找不到返回-1
擷取子字串的方法:
String substring(int beginIndex)
從此字元序列的beginIndex開始擷取,擷取到最後
String substring(int beginIndex,int endIndex)
從此字元序列的beginInde開始擷取,擷取到endIndex,包前不包後
字串轉成字元陣列的方法:
char[] toCharArray()
將此字元序列變成字元陣列
字串中的字母轉成大寫/小寫
String toUpperCase()
將字串中的字母都變成大寫,返回新字串
String toLowerCase()
將字串中的字母都變成小寫,返回新字串
前後去空格的方法:
String trim()
去掉此字元序列的前與後的空格
將任意引數變成字串物件
static String valueOf(Type v);
將引數v變成字串物件
equals方法與==的區別
==:用來比較是不是同一個物件
equals:用來比較兩個物件的內容是否相同
String型別中重寫了equals方法
常量池:
jvm在使用字串型別時,為了提高記憶體的使用率,當使用字面量(常量)
進行給變數賦值時,在方法區內提供了用於儲存字面量物件的一個常量池。
jdk1.7以後,由於方法區記憶體相對較小,將常量池的物件存在堆中
原理:
當使用字面量賦值時,先去方法區內的常量池中查詢是否有相同字面量的物件,
如果有,就返回常量池中物件的地址,沒有的話,在常量池中建立此字面量的物件
再返回。