2020-04-27

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、异常的处理

图1:异常处理

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、多线程

2.1 并行和并发

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

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

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

宏观并行,微观串行。

图3:穿行、并行、并发

2.2、 进程

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

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

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

2.3、 线程

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

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

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

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

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

。。。。

2.4、 进程和线程

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

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

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

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

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

2.5、线程的创建启动

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,688评论 0 11
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,267评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,096评论 0 4
  • 一、上节课回顾 异常Exception 1、概念:在程序运行的时候,代码产生的不正常事件,导致程序无法正常的继续执...
    机会留给有准备的人阅读 219评论 0 0
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 2,248评论 0 14