小豬學(xué)習(xí)

小小白慢慢學(xué)習(xí)中ing 第二十八天
努力努力
本日內(nèi)容(throws關(guān)鍵字、throw關(guān)鍵字、自定義異常、多線程)
1、throws關(guān)鍵字
用于一個方法的對外聲明:用于表示該方法不處理異常,交由調(diào)用處進(jìn)行處理。
????????public static void test()throws ParseException{
????????}
子類重寫父類的方法時,不能拋出比父類更大的異常。
父類拋出異常,子類可以不拋出
父類拋出異常,子類可以拋出和父類一樣的或者是比父類小的異常
父類拋出異常,子類不能拋出比父類更大的異常
父類沒有拋出異常,子類也不能拋出異常。
2、throw關(guān)鍵字
用于代碼中主動拋出一個異常對象:設(shè)計一個方法的功能的時候,根據(jù)邏輯分析,可以主動拋出一個異常對象。
代碼級別上,主動拋出一個異常對象,提示調(diào)用者:產(chǎn)生問題啦。。
以下是String這個類的源代碼:
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)行時異常,程序不強(qiáng)制一定處理該類型的異常。Exception的異常,包含了受檢異常,程序中必須處理該類型的異常。
????對比throws和throw的區(qū)別。
1、throws關(guān)鍵字,用于表示一個方法向外聲明,該方法不處理異常,交由調(diào)用處處理這個異常。處理異常的一種方式:捕獲,拋出。
2、throw關(guān)鍵字,代碼中,主動拋出一個異常對象。因?yàn)槟硞€邏輯原因,主動拋出一個異常對象,打斷程序的執(zhí)行。主動拋出異常對象。
3、自定義異常
了解性內(nèi)容:理論知識能夠懂。
自己定義一個類,用于表示某種異常。需要繼承Exception或其子類即可。
問題:不是哪個類的對象,都有被創(chuàng)建并拋出就能夠打斷程序的功能。
自定義異常:
class MyException extends Exception{
????????//提供有參構(gòu)造方法。。
????????public MyException(String msg){
? ? ? ? ? ? ? ? super(msg);//調(diào)用父類的有參構(gòu)造:提供異常的信息
????????}
????????public MyException(){
????????????????super();//父類的無參構(gòu)造,沒有提供異常的信息
????????}
}
程序中主動拋出一個異常對象:
/*
* 設(shè)計一個方法,用于檢驗(yàn)?zāi)挲g,年齡不合法,拋出一個異常
*/
public static void checkAge(int age) throws MyException{
????????if(age < 0){
????????// return;
????????throw new MyException("年齡不能為負(fù)數(shù)。。");
????????}
????????System.out.println("年齡輸入正確,請繼續(xù)。。。");
}
return和finally的參考資料:
https://blog.csdn.net/zoujian1993/article/details/45362931
4、多線程
4.1 生活中的多任務(wù)
生活中,有很多的場景下,同時干多件事兒。比如開車:同時時候手和腳。做作業(yè)同時聽課。泡健身房跑步,聽音樂。。。
舞臺表演:邊唱邊跳。
4.2 windows電腦
windows電腦,打開任務(wù)管理器,發(fā)現(xiàn)電腦中正在執(zhí)行的程序,有多個。每個程序叫就叫做一個進(jìn)程。
windows電腦可以同時執(zhí)行多個程序?那是因?yàn)镃PU太快啦。。
4.3 并行和并發(fā)
串行:任務(wù)一個接一個做。
并行:同時在做多個任務(wù)。(硬件的支持)
并發(fā):在多個任務(wù)之間快速的切換,看起來同時執(zhí)行多個任務(wù)。但是實(shí)際上,某一個事件點(diǎn),執(zhí)行1個任務(wù)。
?
宏觀并行,微觀串行。
4.4 進(jìn)程
進(jìn)程:就是正在執(zhí)行的程序。占用系統(tǒng)資源。
一個程序的執(zhí)行,內(nèi)存,CPU。。。
?
注意區(qū)分:電腦上安裝的軟件。沒有跑起來,不能算進(jìn)程。
4.5 線程
何為線程:概念:進(jìn)程中的一個執(zhí)行路徑。
進(jìn)程:一個正在執(zhí)行的程序。
Word文檔:--->一個進(jìn)程
首字母大寫--->一個線程
檢查拼寫錯。。--->一個線程
。。。。
4.6 進(jìn)程和線程
1、進(jìn)程:一個正在執(zhí)行的程序:JVM正在執(zhí)行的程序
2、線程:正在執(zhí)行的程序中的一條執(zhí)行路徑
3、多線程:一個進(jìn)程中,可以同時有多條線程一起執(zhí)行。
如果一個進(jìn)程沒有了,該進(jìn)程中的線程也就沒有了。
如果線程沒有了,但是進(jìn)程不一定的。
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方法
