異常處理和String類

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());

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市根欧,隨后出現(xiàn)的幾起案子怜珍,更是在濱河造成了極大的恐慌,老刑警劉巖咽块,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绘面,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡侈沪,警方通過查閱死者的電腦和手機(jī)揭璃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亭罪,“玉大人瘦馍,你說我怎么就攤上這事∮σ郏” “怎么了情组?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長箩祥。 經(jīng)常有香客問我院崇,道長,這世上最難降的妖魔是什么袍祖? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任底瓣,我火速辦了婚禮,結(jié)果婚禮上蕉陋,老公的妹妹穿的比我還像新娘捐凭。我一直安慰自己拨扶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布茁肠。 她就那樣靜靜地躺著患民,像睡著了一般。 火紅的嫁衣襯著肌膚如雪垦梆。 梳的紋絲不亂的頭發(fā)上匹颤,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音奶赔,去河邊找鬼惋嚎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛站刑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鼻百,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼绞旅,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了温艇?” 一聲冷哼從身側(cè)響起因悲,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勺爱,沒想到半個(gè)月后晃琳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琐鲁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年卫旱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片围段。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顾翼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奈泪,到底是詐尸還是另有隱情适贸,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布涝桅,位于F島的核電站拜姿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏冯遂。R本人自食惡果不足惜蕊肥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望债蜜。 院中可真熱鬧晴埂,春花似錦究反、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琅锻,卻和暖如春卦停,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恼蓬。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國打工惊完, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人处硬。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓小槐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荷辕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凿跳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349