Day-31 異常&多線程
1、異常
1.1莫秆、概念:
在程序運(yùn)行的時(shí)候间雀,代碼產(chǎn)生的不正常事件,導(dǎo)致程序無法正常的繼續(xù)執(zhí)行镊屎。
理解它:代碼寫的不正常惹挟,跑不下去了。缝驳。连锯。
1.2、程序的執(zhí)行流程:
step1:JVM創(chuàng)建主線程用狱,調(diào)用main()萎庭,程序的入口
step2:按照main中的代碼,從上向下執(zhí)行齿拂。。肴敛。
step3:main中的內(nèi)容全部執(zhí)行完畢署海,程序正常結(jié)束吗购。。JVM退出
如果在程序的執(zhí)行過程中砸狞,產(chǎn)生異常了捻勉,比如除0,null的對象調(diào)用方法刀森,父類對象強(qiáng)制轉(zhuǎn)為子類類型踱启。。研底。由JVM負(fù)責(zé)創(chuàng)建一個(gè)該類型的異常對象埠偿,并拋出,從而打斷程序的執(zhí)行榜晦。
理解:程序不正常冠蒋,導(dǎo)致執(zhí)行不下去了,通過異常對象來阻止進(jìn)一步執(zhí)行乾胶。抖剿。
1.3、異常的分類
錯(cuò)誤:Error识窿,系統(tǒng)級(jí)別的問題斩郎,程序解決不了。
異常:Exception喻频,
受檢異常:編譯器在編譯程序的時(shí)候缩宜,檢查出來的異常。程序中必須處理該異常半抱,程序才能正常的執(zhí)行脓恕。
外部因素導(dǎo)致的異常窿侈。
FileNotFoundException炼幔,文件找不到異常
IOException,IO操作異常
SQLException史简,SQL操作異常
? ? ParseException乃秀,解析異常
。圆兵。跺讯。
非受檢異常:編譯器編譯程序的時(shí)候,不檢查殉农。運(yùn)行的時(shí)候可能產(chǎn)生的異常刀脏,程序中不要求一定處理。也叫做運(yùn)行時(shí)異常:RuntimeException
代碼中的邏輯問題導(dǎo)致的異常
ArrayIndexOfBoundsException超凳,數(shù)組下標(biāo)越界異常
StringIndexOutOfBoundsException愈污,字符串下標(biāo)越界異常
ArithmeticException耀态,算術(shù)異常
NullPointerException,空指針異常
ClassCastException暂雹,類轉(zhuǎn)型失敗異常
1.5首装、異常的處理
JVM-->main()-->test1()-->test2()-->test3()....
編碼習(xí)慣上:
? ? try...catch語句:try語句塊中的代碼越少越好。
? ? throws...功能方法:main()不要再throws異常了
1.6杭跪、throws關(guān)鍵字
用于一個(gè)方法的對外聲明:用于表示該方法不處理異常仙逻,交由調(diào)用處進(jìn)行處理。例如:SimpleDateFormate類parse(Sting str)方法的解析異常拋出涧尿。
public? static? void? test() throws? ParseException{
}
子類重寫父類的方法時(shí)系奉,不能拋出比父類更大的異常。
父類拋出異常现斋,子類可以不拋出
父類拋出異常喜最,子類可以拋出和父類一樣的或者是比父類小的異常
父類拋出異常,子類不能拋出比父類更大的異常
父類沒有拋出異常庄蹋,子類也不能拋出異常
1.7瞬内、throw關(guān)鍵字
用于代碼中主動(dòng)拋出一個(gè)異常對象:設(shè)計(jì)一個(gè)方法的功能的時(shí)候,根據(jù)邏輯分析限书,可以主動(dòng)拋出一個(gè)異常對象虫蝶。
代碼級(jí)別上,主動(dòng)拋出一個(gè)異常對象倦西,提示調(diào)用者:產(chǎn)生問題啦能真。。
以下是String這個(gè)類的源代碼:
public char charAt(int index) {
? ? ? ? if ((index < 0) || (index >= value.length)) {
? ? ? ? ? ? throw new StringIndexOutOfBoundsException(index);
? ? ? ? }
? ? ? ? return value[index];
? ? }
【面試題】對比Exception和RuntimeException的區(qū)別扰柠。
1粉铐、Exception是最大的異常父類。RuntimeException是Exception的子類卤档。
2蝙泼、RuntimeException是運(yùn)行時(shí)異常,程序不強(qiáng)制一定處理該類型的異常劝枣。Exception的異常汤踏,包含了受檢異常,程序中必須處理該類型的異常舔腾。
【面試題】對比throws和throw的區(qū)別溪胶。
1、throws關(guān)鍵字稳诚,用于表示一個(gè)方法向外聲明哗脖,該方法不處理異常,交由調(diào)用處處理這個(gè)異常。處理異常的一種方式:捕獲懒熙,拋出丘损。
2、throw關(guān)鍵字工扎,代碼中,主動(dòng)拋出一個(gè)異常對象衔蹲。因?yàn)槟硞€(gè)邏輯原因肢娘,主動(dòng)拋出一個(gè)異常對象,打斷程序的執(zhí)行舆驶。主動(dòng)拋出異常對象橱健。
【面試題】Collection和Collections
【面試題】Array和Arrays
1.8、自定義異常
了解性內(nèi)容:理論知識(shí)能夠懂沙廉。
自己定義一個(gè)類拘荡,用于表示某種異常。需要繼承Exception或其子類即可撬陵。
問題:不是哪個(gè)類的對象珊皿,都有被創(chuàng)建并拋出就能夠打斷程序的功能。
自定義異常:
2巨税、多線程
2.1 并行和并發(fā)
串行:任務(wù)一個(gè)接一個(gè)做蟋定。
并行:同時(shí)在做多個(gè)任務(wù)。(硬件的支持)
并發(fā):在多個(gè)任務(wù)之間快速的切換草添,看起來同時(shí)執(zhí)行多個(gè)任務(wù)驶兜。但是實(shí)際上,某一個(gè)事件點(diǎn)远寸,執(zhí)行1個(gè)任務(wù)抄淑。
宏觀并行,微觀串行驰后。
2.2倡怎、 進(jìn)程
進(jìn)程:就是正在執(zhí)行的程序迅耘。占用系統(tǒng)資源。
一個(gè)程序的執(zhí)行监署,內(nèi)存颤专,CPU。钠乏。栖秕。
注意區(qū)分:電腦上安裝的軟件。沒有跑起來晓避,不能算進(jìn)程簇捍。
2.3只壳、 線程
何為線程:概念:進(jìn)程中的一個(gè)執(zhí)行路徑。
進(jìn)程:一個(gè)正在執(zhí)行的程序暑塑。
Word文檔:--->一個(gè)進(jìn)程
首字母大寫--->一個(gè)線程
檢查拼寫錯(cuò)吼句。。--->一個(gè)線程
事格。惕艳。。驹愚。
2.4远搪、 進(jìn)程和線程
1、進(jìn)程:一個(gè)正在執(zhí)行的程序:JVM正在執(zhí)行的程序
2逢捺、線程:正在執(zhí)行的程序中的一條執(zhí)行路徑
3谁鳍、多線程:一個(gè)進(jìn)程中,可以同時(shí)有多條線程一起執(zhí)行劫瞳。
如果一個(gè)進(jìn)程沒有了倘潜,該進(jìn)程中的線程也就沒有了。
如果線程沒有了柠新,但是進(jìn)程不一定的窍荧。