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

一、上節(jié)課回顧

異常Exception

1、概念:在程序運行的時候,代碼產(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,解析異常

? ? ? ? ? ? 。。。

? ? ? ? 非受檢異常:編譯器編譯程序的時候,不檢查。運行的時候可能產(chǎ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();//打?。寒惓n愋?,異常的原因,哪行產(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)用處:

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


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ù)邏輯分析,可以主動拋出一個異常對象。

代碼級別上,主動拋出一個異常對象,提示調(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是運行時異常,程序不強(qiáng)制一定處理該類型的異常。Exception的異常,包含了受檢異常,程序中必須處理該類型的異常。

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

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

2、throw關(guā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è)計一個方法,用于檢驗?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í)行多個程序?那是因為CPU太快啦。。

2.4.3 并行和并發(fā)

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

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

并發(fā):在多個任務(wù)之間快速的切換,看起來同時執(zhí)行多個任務(wù)。但是實際上,某一個事件點,執(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中如何實現(xiàn)多任務(wù)的?多線程

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

?

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

比如:唱歌,同時跳舞

Thread類來實現(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:實現(xiàn)Runnable接口,創(chuàng)建線程的方式二

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

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

step3:啟動線程:

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

? ? 根據(jù)實現(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接口的實現(xiàn)類實現(xiàn)run方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容