2020-04-26day31——異常&多線程

一药磺、上節(jié)課回顧

異常Exception

1告组、概念:在程序運(yùn)行的時候,代碼產(chǎn)生的不正常事件癌佩,導(dǎo)致程序無法正常的繼續(xù)執(zhí)行木缝。

? ? 理解它:代碼寫的不正常便锨,跑不下去了。我碟。放案。

2、程序的執(zhí)行流程:

? ? step1:JVM創(chuàng)建主線程矫俺,調(diào)用main()吱殉,程序的入口

? ? step2:按照main中的代碼,從上向下執(zhí)行厘托。友雳。。

? ? step3:main中的內(nèi)容全部執(zhí)行完畢铅匹,程序正常結(jié)束押赊。。JVM退出

3伊群、如果在程序的執(zhí)行過程中考杉,產(chǎn)生異常了,比如除0舰始,null的對象調(diào)用方法崇棠,父類對象強(qiáng)制轉(zhuǎn)為子類類型。丸卷。枕稀。由JVM負(fù)責(zé)創(chuàng)建一個該類型的異常對象,并拋出谜嫉,從而打斷程序的執(zhí)行萎坷。

?

? ? 理解:程序不正常,導(dǎo)致執(zhí)行不下去了沐兰,通過異常對象來阻止進(jìn)一步執(zhí)行哆档。。


4住闯、異常的分類:

? ? 錯誤:Error瓜浸,系統(tǒng)級別的問題,程序解決不了比原。

? ? 異常:Exception插佛,

? ? ? ? 受檢異常:編譯器在編譯程序的時候,檢查出來的異常量窘。程序中必須處理該異常雇寇,程序才能正常的執(zhí)行。

? ? ? ? ? ? 外部因素導(dǎo)致的異常。

? ? ? ? ? ? FileNotFoundException锨侯,文件找不到異常

? ? ? ? ? ? IOException嫩海,IO操作異常

? ? ? ? ? ? SQLException,SQL操作異常

? ? ? ? ParseException识腿,解析異常

? ? ? ? ? ? 出革。。渡讼。

? ? ? ? 非受檢異常:編譯器編譯程序的時候骂束,不檢查。運(yùn)行的時候可能產(chǎn)生的異常成箫,程序中不要求一定處理展箱。也叫做運(yùn)行時異常:RuntimeException

? ? ? ? ? ? 代碼中的邏輯問題導(dǎo)致的異常

? ? ? ? ? ? ArrayIndexOfBoundsException,數(shù)組下標(biāo)越界異常

? ? ? ? ? ? StringIndexOutOfBoundsException蹬昌,字符串下標(biāo)越界異常

? ? ? ? ? ? ArithmeticException混驰,算術(shù)異常

? ? ? ? ? ? NullPointerException,空指針異常

? ? ? ? ? ? ClassCastException皂贩,類轉(zhuǎn)型失敗異常

5栖榨、異常的處理

? ? A:捕獲:將異常處理在捕獲的代碼中。

intn=10;

? ? try{

? ? ? ? //可能產(chǎn)生異常的代碼

? ? ? ? //10行:5行產(chǎn)生異常明刷,結(jié)束這個try婴栽,跳入對應(yīng)的catch中

? ? }catch(異常類型1e){

? ? ? ? //處理異常

? ? ? ? e.printStack();//打印:異常類型辈末,異常的原因愚争,哪行產(chǎn)生的。挤聘。轰枝。

? ? }catch(異常類型2e{


? ? }finally{

? ? ? ? //無論try語句中,是否產(chǎn)生異常组去,此處的代碼一定會被執(zhí)行鞍陨。

? ? ? ? //慣用于做最后的清理工作:斷開資源鏈接,刪除臨時文件从隆。诚撵。。

? ? }

? ? B:拋出:方法聲明上广料,聲明該方法不處理異常,一旦產(chǎn)生異常了幼驶,交給調(diào)用處進(jìn)行處理艾杏。

throws關(guān)鍵字:用于聲明方法拋出異常

publicstaticvoid/返回值方法名(參數(shù)列表)throws異常類型1,異常類型2...{

//方法體;

?? }


//調(diào)用處:

方法名(實(shí)參);//就要處理這個異常:可抓盅藻,可拋


JVM-->main()-->test1()-->test2()-->test3()....


編碼習(xí)慣上:

try...catch語句:try語句塊中的代碼越少越好购桑。

throws...功能方法:main()不要再throws異常了畅铭。

二、本節(jié)課內(nèi)容

2.1勃蜘、throws關(guān)鍵字

用于一個方法的對外聲明:用于表示該方法不處理異常硕噩,交由調(diào)用處進(jìn)行處理。

publicstaticvoidtest()throwsParseException{

?

}

子類重寫父類的方法時缭贡,不能拋出比父類更大的異常炉擅。

父類拋出異常,子類可以不拋出

父類拋出異常阳惹,子類可以拋出和父類一樣的或者是比父類小的異常

父類拋出異常谍失,子類不能拋出比父類更大的異常

父類沒有拋出異常,子類也不能拋出異常莹汤。

2.2快鱼、throw關(guān)鍵字

用于代碼中主動拋出一個異常對象:設(shè)計(jì)一個方法的功能的時候,根據(jù)邏輯分析纲岭,可以主動拋出一個異常對象抹竹。

代碼級別上,主動拋出一個異常對象止潮,提示調(diào)用者:產(chǎn)生問題啦窃判。。

以下是String這個類的源代碼:

publiccharcharAt(intindex) {

if((index<0)||(index>=value.length)) {

thrownewStringIndexOutOfBoundsException(index);

? ? ?? }

returnvalue[index];

?? }

【面試題】對比Exception和RuntimeException的區(qū)別沽翔。

1兢孝、Exception是最大的異常父類。RuntimeException是Exception的子類仅偎。

2跨蟹、RuntimeException是運(yùn)行時異常,程序不強(qiáng)制一定處理該類型的異常橘沥。Exception的異常窗轩,包含了受檢異常,程序中必須處理該類型的異常座咆。

【面試題】對比throws和throw的區(qū)別痢艺。

1、throws關(guān)鍵字介陶,用于表示一個方法向外聲明堤舒,該方法不處理異常,交由調(diào)用處處理這個異常哺呜。處理異常的一種方式:捕獲舌缤,拋出。

2、throw關(guān)鍵字国撵,代碼中陵吸,主動拋出一個異常對象。因?yàn)槟硞€邏輯原因介牙,主動拋出一個異常對象壮虫,打斷程序的執(zhí)行。主動拋出異常對象环础。

Collection和Collections

Array和Arrays

2.3囚似、自定義異常

了解性內(nèi)容:理論知識能夠懂。

自己定義一個類喳整,用于表示某種異常谆构。需要繼承Exception或其子類即可。

問題:不是哪個類的對象框都,都有被創(chuàng)建并拋出就能夠打斷程序的功能搬素。

自定義異常:

classMyExceptionextendsException{

? ? //提供有參構(gòu)造方法。魏保。

? ? publicMyException(Stringmsg){

? ? ? ? super(msg);//調(diào)用父類的有參構(gòu)造:提供異常的信息

? ? }


? ? publicMyException(){

? ? ? ? super();//父類的無參構(gòu)造熬尺,沒有提供異常的信息

? ? }


}

程序中主動拋出一個異常對象:

? ? /*

? ? * 設(shè)計(jì)一個方法,用于檢驗(yàn)?zāi)挲g谓罗,年齡不合法粱哼,拋出一個異常

? ? */

? ? publicstaticvoidcheckAge(intage)throwsMyException{

? ? ? ? if(age<0){

//? ? ? ? ? return;

? ? ? ? ? ? thrownewMyException("年齡不能為負(fù)數(shù)。檩咱。");

? ? ? ? }

? ? ? ? System.out.println("年齡輸入正確揭措,請繼續(xù)。刻蚯。绊含。");

? ? }

return和finally的參考資料:

https://blog.csdn.net/zoujian1993/article/details/45362931

2.4、多線程

2.4.1 生活中的多任務(wù)

生活中炊汹,有很多的場景下躬充,同時干多件事兒。比如開車:同時時候手和腳讨便。做作業(yè)同時聽課充甚。泡健身房跑步,聽音樂霸褒。伴找。。

舞臺表演:邊唱邊跳废菱。

2.4.2 windows電腦

windows電腦技矮,打開任務(wù)管理器眉反,發(fā)現(xiàn)電腦中正在執(zhí)行的程序,有多個穆役。每個程序叫就叫做一個進(jìn)程。

windows電腦可以同時執(zhí)行多個程序梳凛?那是因?yàn)镃PU太快啦耿币。。

2.4.3 并行和并發(fā)

串行:任務(wù)一個接一個做韧拒。

并行:同時在做多個任務(wù)淹接。(硬件的支持)

并發(fā):在多個任務(wù)之間快速的切換,看起來同時執(zhí)行多個任務(wù)叛溢。但是實(shí)際上塑悼,某一個事件點(diǎn),執(zhí)行1個任務(wù)楷掉。

?

宏觀并行厢蒜,微觀串行。

2.4.4 進(jìn)程

進(jìn)程:就是正在執(zhí)行的程序烹植。占用系統(tǒng)資源斑鸦。

? ? 一個程序的執(zhí)行,內(nèi)存草雕,CPU巷屿。。墩虹。

?

注意區(qū)分:電腦上安裝的軟件嘱巾。沒有跑起來,不能算進(jìn)程诫钓。

2.4.5 線程

何為線程:概念:進(jìn)程中的一個執(zhí)行路徑旬昭。

進(jìn)程:一個正在執(zhí)行的程序。

Word文檔:--->一個進(jìn)程

? ? 首字母大寫--->一個線程

? ? 檢查拼寫錯尖坤。稳懒。--->一個線程

? ? 。慢味。场梆。。

2.4.6 進(jìn)程和線程

1纯路、進(jìn)程:一個正在執(zhí)行的程序:JVM正在執(zhí)行的程序

2或油、線程:正在執(zhí)行的程序中的一條執(zhí)行路徑

3、多線程:一個進(jìn)程中驰唬,可以同時有多條線程一起執(zhí)行顶岸。

如果一個進(jìn)程沒有了腔彰,該進(jìn)程中的線程也就沒有了。

如果線程沒有了辖佣,但是進(jìn)程不一定的霹抛。

2.4.7 Java中對于多線程的支持

Java中如何實(shí)現(xiàn)多任務(wù)的?多線程

Thread類:JDK提供好的卷谈,Thread類杯拐,就是java中關(guān)于多線程的實(shí)現(xiàn)。線程的功能都封裝在了該類中世蔗。

?

要使用線程端逼,來實(shí)現(xiàn)程序的并發(fā):一個程序,同時干多件事污淋。

比如:唱歌顶滩,同時跳舞

Thread類來實(shí)現(xiàn)

Java代碼,如何創(chuàng)建一條線程寸爆?如何啟動起來礁鲁?執(zhí)行功能?

兩種創(chuàng)建線程的方式

A:創(chuàng)建線程并啟動:繼承Thread類

step1:創(chuàng)建子類赁豆,繼承Thread類救氯。

step2:重寫run(),線程體歌憨。并發(fā)執(zhí)行的內(nèi)容着憨,寫在這個方法中。

step3:啟動線程:start()

?

/*

class Cat

class Person

?

class MyException extends Exception{//異常類

?

}

class MyThread extends Thread{//線程類

?

}

*/

B:實(shí)現(xiàn)Runnable接口务嫡,創(chuàng)建線程的方式二

step1:創(chuàng)建實(shí)現(xiàn)類甲抖,實(shí)現(xiàn)Runnable接口

step2:重寫run(),線程體心铃。并發(fā)執(zhí)行的內(nèi)容准谚,寫在這個方法中。

step3:啟動線程:

? ? 創(chuàng)建實(shí)現(xiàn)類的對象:mt

? ? 根據(jù)實(shí)現(xiàn)類對象mt去扣,創(chuàng)建Thread類對象t3柱衔,t4

? ? start()啟動該線程:t3,t4

對比run()和start()

run()愉棱,是線程體唆铐。就是要并發(fā)執(zhí)行內(nèi)容。

start()奔滑,啟動一個線程艾岂?就是該線程準(zhǔn)備就緒了,隨時可以被CPU執(zhí)行朋其。什么時候執(zhí)行王浴,CPU自己說了算脆炎。

一個線程,只能被start一次氓辣。

Thread類的構(gòu)造方法

new Thread();//并發(fā)執(zhí)行秒裕,執(zhí)行run()方法。

new Thread(Runnable target);//并發(fā)執(zhí)行钞啸,執(zhí)行的run是Runnable接口的實(shí)現(xiàn)類實(shí)現(xiàn)run方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末簇爆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子爽撒,更是在濱河造成了極大的恐慌,老刑警劉巖响蓉,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硕勿,死亡現(xiàn)場離奇詭異,居然都是意外死亡枫甲,警方通過查閱死者的電腦和手機(jī)源武,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來想幻,“玉大人粱栖,你說我怎么就攤上這事≡嗵海” “怎么了闹究?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長食店。 經(jīng)常有香客問我渣淤,道長,這世上最難降的妖魔是什么吉嫩? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任价认,我火速辦了婚禮,結(jié)果婚禮上自娩,老公的妹妹穿的比我還像新娘用踩。我一直安慰自己,他們只是感情好忙迁,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布脐彩。 她就那樣靜靜地躺著,像睡著了一般姊扔。 火紅的嫁衣襯著肌膚如雪辉饱。 梳的紋絲不亂的頭發(fā)上祭往,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機(jī)與錄音厂捞,去河邊找鬼。 笑死残制,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愧怜,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妈拌!你這毒婦竟也來了拥坛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤尘分,失蹤者是張志新(化名)和其女友劉穎猜惋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體培愁,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡著摔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了定续。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谍咆。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖私股,靈堂內(nèi)的尸體忽然破棺而出摹察,到底是詐尸還是另有隱情,我是刑警寧澤倡鲸,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布供嚎,位于F島的核電站,受9級特大地震影響峭状,放射性物質(zhì)發(fā)生泄漏查坪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一宁炫、第九天 我趴在偏房一處隱蔽的房頂上張望偿曙。 院中可真熱鬧,春花似錦羔巢、人聲如沸望忆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽启摄。三九已至,卻和暖如春幽钢,著一層夾襖步出監(jiān)牢的瞬間歉备,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工匪燕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蕾羊,地道東北人喧笔。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像龟再,于是被迫代替她去往敵國和親书闸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類 二實(shí)現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,965評論 1 18
  • 本文主要講了java中多線程的使用方法利凑、線程同步浆劲、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法哀澈、概述等牌借。 首先講...
    李欣陽閱讀 2,458評論 1 15
  • 一:java概述:1,JDK:Java Development Kit割按,java的開發(fā)和運(yùn)行環(huán)境膨报,java的開發(fā)工...
    ZaneInTheSun閱讀 2,661評論 0 11
  • 第一章 異常 1.1 異常概念 異常 :指的是程序在執(zhí)行過程中,出現(xiàn)的非正常的情況择示,最終會導(dǎo)致JVM的非正常...
    蟑螞子閱讀 113評論 0 0
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法束凑,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,235評論 0 2