2020-04-26day31——异常&多线程

一、上节课回顾

异常Exception

1、概念:在程序运行的时候,代码产生的不正常事件,导致程序无法正常的继续执行。

    理解它:代码写的不正常,跑不下去了。。。

2、程序的执行流程:

    step1:JVM创建主线程,调用main(),程序的入口

    step2:按照main中的代码,从上向下执行。。。

    step3:main中的内容全部执行完毕,程序正常结束。。JVM退出

3、如果在程序的执行过程中,产生异常了,比如除0,null的对象调用方法,父类对象强制转为子类类型。。。由JVM负责创建一个该类型的异常对象,并抛出,从而打断程序的执行。

    理解:程序不正常,导致执行不下去了,通过异常对象来阻止进一步执行。。


4、异常的分类:

    错误:Error,系统级别的问题,程序解决不了。

    异常:Exception,

        受检异常:编译器在编译程序的时候,检查出来的异常。程序中必须处理该异常,程序才能正常的执行。

            外部因素导致的异常。

            FileNotFoundException,文件找不到异常

            IOException,IO操作异常

            SQLException,SQL操作异常

        ParseException,解析异常

            。。。

        非受检异常:编译器编译程序的时候,不检查。运行的时候可能产生的异常,程序中不要求一定处理。也叫做运行时异常:RuntimeException

            代码中的逻辑问题导致的异常

            ArrayIndexOfBoundsException,数组下标越界异常

            StringIndexOutOfBoundsException,字符串下标越界异常

            ArithmeticException,算术异常

            NullPointerException,空指针异常

            ClassCastException,类转型失败异常

5、异常的处理

    A:捕获:将异常处理在捕获的代码中。

intn=10;

    try{

        //可能产生异常的代码

        //10行:5行产生异常,结束这个try,跳入对应的catch中

    }catch(异常类型1e){

        //处理异常

        e.printStack();//打印:异常类型,异常的原因,哪行产生的。。。

    }catch(异常类型2e{


    }finally{

        //无论try语句中,是否产生异常,此处的代码一定会被执行。

        //惯用于做最后的清理工作:断开资源链接,删除临时文件。。。

    }

    B:抛出:方法声明上,声明该方法不处理异常,一旦产生异常了,交给调用处进行处理。

throws关键字:用于声明方法抛出异常

publicstaticvoid/返回值方法名(参数列表)throws异常类型1,异常类型2...{

//方法体;

   }


//调用处:

方法名(实参);//就要处理这个异常:可抓,可抛


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


编码习惯上:

try...catch语句:try语句块中的代码越少越好。

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

二、本节课内容

2.1、throws关键字

用于一个方法的对外声明:用于表示该方法不处理异常,交由调用处进行处理。

publicstaticvoidtest()throwsParseException{

}

子类重写父类的方法时,不能抛出比父类更大的异常。

父类抛出异常,子类可以不抛出

父类抛出异常,子类可以抛出和父类一样的或者是比父类小的异常

父类抛出异常,子类不能抛出比父类更大的异常

父类没有抛出异常,子类也不能抛出异常。

2.2、throw关键字

用于代码中主动抛出一个异常对象:设计一个方法的功能的时候,根据逻辑分析,可以主动抛出一个异常对象。

代码级别上,主动抛出一个异常对象,提示调用者:产生问题啦。。

以下是String这个类的源代码:

publiccharcharAt(intindex) {

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

thrownewStringIndexOutOfBoundsException(index);

       }

returnvalue[index];

   }

【面试题】对比Exception和RuntimeException的区别。

1、Exception是最大的异常父类。RuntimeException是Exception的子类。

2、RuntimeException是运行时异常,程序不强制一定处理该类型的异常。Exception的异常,包含了受检异常,程序中必须处理该类型的异常。

【面试题】对比throws和throw的区别。

1、throws关键字,用于表示一个方法向外声明,该方法不处理异常,交由调用处处理这个异常。处理异常的一种方式:捕获,抛出。

2、throw关键字,代码中,主动抛出一个异常对象。因为某个逻辑原因,主动抛出一个异常对象,打断程序的执行。主动抛出异常对象。

Collection和Collections

Array和Arrays

2.3、自定义异常

了解性内容:理论知识能够懂。

自己定义一个类,用于表示某种异常。需要继承Exception或其子类即可。

问题:不是哪个类的对象,都有被创建并抛出就能够打断程序的功能。

自定义异常:

classMyExceptionextendsException{

    //提供有参构造方法。。

    publicMyException(Stringmsg){

        super(msg);//调用父类的有参构造:提供异常的信息

    }


    publicMyException(){

        super();//父类的无参构造,没有提供异常的信息

    }


}

程序中主动抛出一个异常对象:

    /*

    * 设计一个方法,用于检验年龄,年龄不合法,抛出一个异常

    */

    publicstaticvoidcheckAge(intage)throwsMyException{

        if(age<0){

//          return;

            thrownewMyException("年龄不能为负数。。");

        }

        System.out.println("年龄输入正确,请继续。。。");

    }

return和finally的参考资料:

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

2.4、多线程

2.4.1 生活中的多任务

生活中,有很多的场景下,同时干多件事儿。比如开车:同时时候手和脚。做作业同时听课。泡健身房跑步,听音乐。。。

舞台表演:边唱边跳。

2.4.2 windows电脑

windows电脑,打开任务管理器,发现电脑中正在执行的程序,有多个。每个程序叫就叫做一个进程。

windows电脑可以同时执行多个程序?那是因为CPU太快啦。。

2.4.3 并行和并发

串行:任务一个接一个做。

并行:同时在做多个任务。(硬件的支持)

并发:在多个任务之间快速的切换,看起来同时执行多个任务。但是实际上,某一个事件点,执行1个任务。

宏观并行,微观串行。

2.4.4 进程

进程:就是正在执行的程序。占用系统资源。

    一个程序的执行,内存,CPU。。。

注意区分:电脑上安装的软件。没有跑起来,不能算进程。

2.4.5 线程

何为线程:概念:进程中的一个执行路径。

进程:一个正在执行的程序。

Word文档:--->一个进程

    首字母大写--->一个线程

    检查拼写错。。--->一个线程

    。。。。

2.4.6 进程和线程

1、进程:一个正在执行的程序:JVM正在执行的程序

2、线程:正在执行的程序中的一条执行路径

3、多线程:一个进程中,可以同时有多条线程一起执行。

如果一个进程没有了,该进程中的线程也就没有了。

如果线程没有了,但是进程不一定的。

2.4.7 Java中对于多线程的支持

Java中如何实现多任务的?多线程

Thread类:JDK提供好的,Thread类,就是java中关于多线程的实现。线程的功能都封装在了该类中。

要使用线程,来实现程序的并发:一个程序,同时干多件事。

比如:唱歌,同时跳舞

Thread类来实现

Java代码,如何创建一条线程?如何启动起来?执行功能?

两种创建线程的方式

A:创建线程并启动:继承Thread类

step1:创建子类,继承Thread类。

step2:重写run(),线程体。并发执行的内容,写在这个方法中。

step3:启动线程:start()

/*

class Cat

class Person

class MyException extends Exception{//异常类

}

class MyThread extends Thread{//线程类

}

*/

B:实现Runnable接口,创建线程的方式二

step1:创建实现类,实现Runnable接口

step2:重写run(),线程体。并发执行的内容,写在这个方法中。

step3:启动线程:

    创建实现类的对象:mt

    根据实现类对象mt,创建Thread类对象t3,t4

    start()启动该线程:t3,t4

对比run()和start()

run(),是线程体。就是要并发执行内容。

start(),启动一个线程?就是该线程准备就绪了,随时可以被CPU执行。什么时候执行,CPU自己说了算。

一个线程,只能被start一次。

Thread类的构造方法

new Thread();//并发执行,执行run()方法。

new Thread(Runnable target);//并发执行,执行的run是Runnable接口的实现类实现run方法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,955评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,452评论 1 15
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,645评论 0 11
  • 第一章 异常 1.1 异常概念 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常...
    蟑蚂子阅读 111评论 0 0
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,220评论 0 2