Day-31 異常&多線程
1、異常
1.1、概念:
在程序運行的時候,代碼產生的不正常事件,導致程序無法正常的繼續執行。
理解它:代碼寫的不正常,跑不下去了。。。
1.2、程序的執行流程:
step1:JVM創建主線程,調用main(),程序的入口
step2:按照main中的代碼,從上向下執行。。。
step3:main中的內容全部執行完畢,程序正常結束。。JVM退出
如果在程序的執行過程中,產生異常了,比如除0,null的對象調用方法,父類對象強制轉為子類類型。。。由JVM負責創建一個該類型的異常對象,并拋出,從而打斷程序的執行。
理解:程序不正常,導致執行不下去了,通過異常對象來阻止進一步執行。。
1.3、異常的分類
錯誤:Error,系統級別的問題,程序解決不了。
異常:Exception,
受檢異常:編譯器在編譯程序的時候,檢查出來的異常。程序中必須處理該異常,程序才能正常的執行。
外部因素導致的異常。
FileNotFoundException,文件找不到異常
IOException,IO操作異常
SQLException,SQL操作異常
? ? ParseException,解析異常
。。。
非受檢異常:編譯器編譯程序的時候,不檢查。運行的時候可能產生的異常,程序中不要求一定處理。也叫做運行時異常:RuntimeException
代碼中的邏輯問題導致的異常
ArrayIndexOfBoundsException,數組下標越界異常
StringIndexOutOfBoundsException,字符串下標越界異常
ArithmeticException,算術異常
NullPointerException,空指針異常
ClassCastException,類轉型失敗異常
1.5、異常的處理
JVM-->main()-->test1()-->test2()-->test3()....
編碼習慣上:
? ? try...catch語句:try語句塊中的代碼越少越好。
? ? throws...功能方法:main()不要再throws異常了
1.6、throws關鍵字
用于一個方法的對外聲明:用于表示該方法不處理異常,交由調用處進行處理。例如:SimpleDateFormate類parse(Sting str)方法的解析異常拋出。
public? static? void? test() throws? ParseException{
}
子類重寫父類的方法時,不能拋出比父類更大的異常。
父類拋出異常,子類可以不拋出
父類拋出異常,子類可以拋出和父類一樣的或者是比父類小的異常
父類拋出異常,子類不能拋出比父類更大的異常
父類沒有拋出異常,子類也不能拋出異常
1.7、throw關鍵字
用于代碼中主動拋出一個異常對象:設計一個方法的功能的時候,根據邏輯分析,可以主動拋出一個異常對象。
代碼級別上,主動拋出一個異常對象,提示調用者:產生問題啦。。
以下是String這個類的源代碼:
public char charAt(int index) {
? ? ? ? if ((index < 0) || (index >= value.length)) {
? ? ? ? ? ? throw new StringIndexOutOfBoundsException(index);
? ? ? ? }
? ? ? ? return value[index];
? ? }
【面試題】對比Exception和RuntimeException的區別。
1、Exception是最大的異常父類。RuntimeException是Exception的子類。
2、RuntimeException是運行時異常,程序不強制一定處理該類型的異常。Exception的異常,包含了受檢異常,程序中必須處理該類型的異常。
【面試題】對比throws和throw的區別。
1、throws關鍵字,用于表示一個方法向外聲明,該方法不處理異常,交由調用處處理這個異常。處理異常的一種方式:捕獲,拋出。
2、throw關鍵字,代碼中,主動拋出一個異常對象。因為某個邏輯原因,主動拋出一個異常對象,打斷程序的執行。主動拋出異常對象。
【面試題】Collection和Collections
【面試題】Array和Arrays
1.8、自定義異常
了解性內容:理論知識能夠懂。
自己定義一個類,用于表示某種異常。需要繼承Exception或其子類即可。
問題:不是哪個類的對象,都有被創建并拋出就能夠打斷程序的功能。
自定義異常:
2、多線程
2.1 并行和并發
串行:任務一個接一個做。
并行:同時在做多個任務。(硬件的支持)
并發:在多個任務之間快速的切換,看起來同時執行多個任務。但是實際上,某一個事件點,執行1個任務。
宏觀并行,微觀串行。
2.2、 進程
進程:就是正在執行的程序。占用系統資源。
一個程序的執行,內存,CPU。。。
注意區分:電腦上安裝的軟件。沒有跑起來,不能算進程。
2.3、 線程
何為線程:概念:進程中的一個執行路徑。
進程:一個正在執行的程序。
Word文檔:--->一個進程
首字母大寫--->一個線程
檢查拼寫錯。。--->一個線程
。。。。
2.4、 進程和線程
1、進程:一個正在執行的程序:JVM正在執行的程序
2、線程:正在執行的程序中的一條執行路徑
3、多線程:一個進程中,可以同時有多條線程一起執行。
如果一個進程沒有了,該進程中的線程也就沒有了。
如果線程沒有了,但是進程不一定的。