1異常處理
1.1Exception的兩種處理方式概述
【捕獲】有能力處理你就捕獲铝穷,自己的問題你就捕獲
【拋出】沒有辦法處理鹦马,或者不是自己的問題忙干,和自己無關(guān)辕翰,因別人導(dǎo)致的錯(cuò)誤藐守,拋出
1.2捕獲異常
1.2.1基本格式
格式:
try {
//有可能出現(xiàn)問題的代碼挪丢,存在一定隱患的代碼
} catch (異常類型){
//對(duì)應(yīng)當(dāng)前異常類型的處理方式
//【因?yàn)榧夹g(shù)有限,只用sout 或者printStacTrace 后期我們會(huì)使用日志 log】
}
1.2.2細(xì)節(jié)問題和注意事項(xiàng)
1代碼中出現(xiàn)異常卢厂,JVM會(huì)終止代碼運(yùn)行乾蓬,若使用 try catch 捕獲異常,JVM會(huì)認(rèn)為代碼中不存在異常慎恒,繼續(xù)運(yùn)行
2try 和 catch 中的都是局部變量任内,處理操作數(shù)據(jù)時(shí)小心
3try - catch 捕獲處理異常∏珊牛可以處理多種異常情況W迳荨!1建議分門別類對(duì)癥下藥
4代碼中存在多中隱患丹鸿,多個(gè)異常情況越走,try -? catch 只能處理第一個(gè)出現(xiàn)異常的代碼。因?yàn)镴VM從異常代碼開始直接進(jìn)入異常捕獲階段
5Exception作為Java中所有異常的超類靠欢,在捕獲異常處理時(shí)如果直接使用Exception進(jìn)行捕獲處理廊敌,無法做到對(duì)癥下藥
6Exception 可以作為try - catch 最后一個(gè),用于處理其他異常捕獲之后沒有對(duì)癥方式遺留問題
1.3拋出異常
1.3.1基本格式
關(guān)鍵字:
? ? ·throw
? ? ? ? 在方法內(nèi)特定條件下拋出指定異常
? ? throws?
? ? ? ?在【方法聲明】位置门怪,告知條用者骡澈。當(dāng)前方法有哪些異常拋出
? ? ? ? 用于處理非當(dāng)前方法操作問題,導(dǎo)致出現(xiàn)的異常掷空,一般情況下用于處理方法運(yùn)行過程中因?yàn)閰?shù)傳入肋殴,參數(shù)處理囤锉,運(yùn)算結(jié)果導(dǎo)致的問題,拋出異常护锤,
? ? throw? 是一個(gè)高級(jí)的參數(shù)合法性判斷9俚亍!烙懦!
1.3.2細(xì)節(jié)問題和注意事項(xiàng)
1代碼運(yùn)行到throw拋出異常驱入,之后的代碼不再運(yùn)行,成為無參觸及代碼
2代碼存在多種隱患氯析,按照隱含的情況亏较,分們別類處理,不能再同一條件內(nèi)拋出兩個(gè)異常掩缓,并且在方法聲明位置,throw之后拾因,不同的異常旺罢,使用逗號(hào)隔開
3當(dāng)調(diào)用帶有異常拋出的方法時(shí),對(duì)于方法拋出的異常绢记,有兩種處理方式扁达,可以捕獲,可以拋出
1.4拋出處理和捕獲處理選擇
分析:
用戶查詢指定路徑指名字的文件蠢熄,存在異常處理分析過程跪解。
1.5異常分類
運(yùn)行時(shí)異常:
? ? RuntimeException 代碼運(yùn)行過程中出現(xiàn)的異常,沒有處理的必要性
? ? ArryIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常
? ? NullPointerException 空指針異常
? ?ArithemticException 算術(shù)異常
運(yùn)行時(shí)異常不強(qiáng)制要求捕獲和拋出G┛住2婕ァ!
JVM 會(huì)處理RuntimeException 也就是告知異常的前因后果<⒆贰M疾帧!
其他異常
? ? 強(qiáng)制要求處理但绕,捕獲處理救崔,還是拋出處理,都需要進(jìn)行操作
? ? 如果未處理D笏场A酢!直接報(bào)錯(cuò)7尽=僦稀!
? ? IDEA工具快速修復(fù)
? ? Elipse Ctrl + 1
? ? IDEA Alt + Enter
1.6自定義異常
自定義異常格式:
? ? class MyException extends Exception?
{
public MyException(){}
public MyException(String message)
{
? ? super(message)拆座;
}
}
1.7異常處理總結(jié)
1異常的必要性主巍,代碼中使用的數(shù)據(jù)冠息,大多數(shù)來自用戶,用戶傳入數(shù)據(jù)是不可靠的情況C呵荨n泶铩岖赋!存在一定的錯(cuò)誤意識(shí)檬果,反饋機(jī)制和處理機(jī)制
2異常處理方式
? ? 捕獲
? ? 拋出
? ? 需要根據(jù)使用情況操作方式,反饋形式來選擇對(duì)應(yīng)的處理方式
3自定義異常唐断,了解異常的構(gòu)造选脊,基本上在開發(fā)中用到自定義異常的情況不多見。但是要了解關(guān)于異常信息保存的方式
2String類
2.1字符串類型概述
String字符串類型是java中引用數(shù)據(jù)類型脸甘,且String 類型是使用final修飾恳啥,沒有自己的子類
字符串的存儲(chǔ)也是非常個(gè)性的一件事,分兩種情況
1在內(nèi)存數(shù)據(jù)區(qū)
2在內(nèi)存堆區(qū)
字符串是常量5ぞ鳌6鄣摹!
確定后無法修改
2.2獲取方法
int length()铆遭;
獲取字符串的長度
char charAt(int index)硝桩;
從字符串中獲取對(duì)應(yīng)下標(biāo)位置的字符(存在下標(biāo)越界問題)
int indexOf‘(char ch);
找出指定字符在當(dāng)前字符串中的下標(biāo)位置
int indexOf(String str)枚荣;
找出指定字符串在當(dāng)前字符串中的下標(biāo)位置
? ?"ABCDEFGABCDEFG" ? ?
查詢 "DE" ==> result 3
int lastIndexOf(char ch)碗脊;
找出指定字符串最后一次出現(xiàn)的下標(biāo)位置
?"ABCDABCD"; 查詢 "CD" ==> result 6
package com.qfen.rxs;
public class Demo1 {
public static void main(String[] args) {
String str = "ABCDEFGABCDEFG";
//length 方法
System.out.println("str.length() :" + str.length());
// charAt方法
System.out.println("str.charAt(5) :"+ str.charAt(5));
System.out.println("str.charAt(0) :" + str.charAt(0));
//index 方法
System.out.println("str.indexOf(\"CD\") :" + str.length());
System.out.println("str.indexOf('C') :" + str.indexOf('C'));
//lastIndexOf 方法
System.out.println("str.lastIndexOf(\"CD\") " + str.lastIndexOf("CD"));
System.out.println("str.lastIndexOf('C')" + str.lastIndexOf('C'));
}
}
2.4判斷方法
boolean endsWith(String str);
? ? 判斷當(dāng)前字符串是不是指定字符串結(jié)尾橄妆,是返回T 否則F
boolean startsWith(String str)衙伶;
? ? 判斷當(dāng)前字符串是不是指定字符串開始,是T 否則 F
boolean isEmpty()害碾;
? ? 判斷當(dāng)前字符串是否為空矢劲,“”空字符串
boolean contains(String str)
判斷指定字符串是否是當(dāng)前字符串的子符串
? ?當(dāng)前字符串: "ABCDEFG"; ?
??參數(shù)字符串: "CDE"; ==> result true
原碼調(diào)用String 類的indexOf方法,找出指定字符的下表位置慌随,indexOf方法下標(biāo)為大于等于0返回 T 否則返回F
boolean equals (Object anObject)芬沉;
重寫Oveeride Object類內(nèi)方法,判斷兩個(gè)字符串是否一致
boolean equalsIsIgnoreCase(String anotherString)儒陨;
? ? 忽略大小寫是否相等花嘶,不考慮英文大小寫比較兩個(gè)字符串是否一致
package com.qfen.rxs;
public class Demo3 {
public static void main(String[] args) {
String str = "ABCDEFGSBCDEFG";
// endsWith
System.out.println("str.endsWith(\"FG\")" + str.endsWith("FG"));
System.out.println("str.endsWith(\"GF\")" + str.endsWith("GF"));
//startsWith
System.out.println("str.startsWith(\"AB\")" + str.startsWith("AB"));
System.out.println("str.startsWith(\"BA\")" + str.startsWith("BA"));
//isEmpty
System.out.println("str.isEmpty() :" + str.isEmpty());
System.out.println("\"\".isEmpty() " + "".isEmpty());
//contains
System.out.println("str.contains(\"ABCD\")" + str.contains("ABCD"));
System.out.println("str.contains(\"ACBD\")" + str.contains("ACBD"));
//equalsIgnoreCase
System.out.println("ABCDEFG".equalsIgnoreCase("Abcdefg"));
}
}
2.5轉(zhuǎn)換方法
String (char[]? value);
將字符數(shù)組轉(zhuǎn)換為字符串
String(char [] value, int offset, int count);
? ? 將字符數(shù)組轉(zhuǎn)換為字符串蹦漠,從指定offset位置開始椭员,技術(shù)count
? ? offset是開始位置
? ? count是截取個(gè)數(shù)
例如: char[] arr = {'A', 'B', 'C', 'D', 'E'}; 調(diào)用方法參數(shù):
new String(arr, 2, 3); ==> result "CDE"
static String valueOf(char[] data);
同理String(char[] data)笛园;
static StringvalueOf(char[] data隘击,int offset侍芝,int count);
同理
String(char [] value, int offset, int count);
char[] toCharArry();
將字符串轉(zhuǎn)換為字符數(shù)組 ? ?
例如: "ABCDE"; 返回值: {'A', 'B', 'C', 'D', 'E'};
package com.qfen.rxs;
public class Demo4 {
public static void main(String[] args) {
char [] arr = {'A','B','C','D','E','F','G'};
String str = new String(arr);
System.out.println(str);
String str2 = new String(arr, 3, 3);
System.out.println(str2);
String str3 = new String(arr);
System.out.println(str3);
String str4 = new String(arr, 3, 3);
System.out.println(str4);
char[] charArray = "拔劍四顧心茫然".toCharArray();
for (int i = 0; i < charArray.length; i++) {
System.out.println(charArray[i]);
}
}
}
2.6其他方法
String replace(char oldChar埋同,char newChar)州叠;
替換使用newChar字符類型,替換當(dāng)前字符串內(nèi)的所有指定字符oldChar
? ?例如: "ABCDEABCDE";
?調(diào)用方法: "ABCDEABCDE".replace('A', '你');?
?返回值結(jié)果: "你BCDE你BCDE"; 【注】原字符串不變
String[] spit(String? regex)凶赁;【重點(diǎn)】
【重點(diǎn)】切割咧栗,將當(dāng)前字符串按照指定字符串切割成String類 型數(shù)
? ?例如:?
?String str = "你好!他好!大家好!廣州好迪";?
?調(diào)用方法: str.split("!");?
?返回值結(jié)果: String[] arr = {"你好", "他好", "大家好", "廣州好迪"};?
?調(diào)用方法: str.split("好");?
?返回值結(jié)果: String[] arr = {"你", "!他", "!大家","!廣 州", "迪"};
String substring (int beginIdex);【重點(diǎn)】
從指定beginIndex開始虱肄,到字符串結(jié)尾截取字符串 ? ?
例如: String str = "ABCDEFG";?
?調(diào)用方法: str.substring(3); 返回值結(jié)果: "DEFG
String substring(int beginIndex, int endIndex);
【重點(diǎn)】 從指定beginIndex開始致板,到endIndex結(jié)束,截取字符串 ? ?要頭不要尾
beginIndex <= 結(jié)果范圍 < endIndex
String toUpperCase();?
?字符串中所有的英文字母轉(zhuǎn)大寫咏窿,返回新字符串?
String toLowerCase();?
?字符串中所有的英文字母轉(zhuǎn)小寫斟或,返回新字符串 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
String trim();?
?去除字符串兩邊的空格
package com.qfen.rxs;
import java.util.Arrays;
public class Demo5 {
public static void main(String[] args) {
String str = "ABCDEFGABCDEFG";
String replace = str.replace('A', '你');
System.out.println(str);
System.out.println(replace);
String str1 = "你好,他好集嵌,大家好萝挤,廣州好迪";
String [] split = str1.split(",");
System.err.println(Arrays.toString(split));
for (int i = 0; i < split.length; i++) {
System.out.println(split[i]);
}
String substring = str.substring(5);
System.out.println(substring);
String substring2 = str.substring(5, 9);
System.out.println(substring2);
System.out.println("affsf".toUpperCase());
System.out.println("ADDFAF".toLowerCase());
System.out.println();
String str2 = "adafdaf? ? ? ? afdafafaf? ? ? ";
System.out.println(str2);
System.out.println(str2.trim());
}
}