java复盘,⑧异常

  • 一、什么是异常?
  • 在java程序中可能程序执行意外失败的事件叫做异常
  • 程序运行—出现异常—程序中断了
  • 异常出现的情况:
  • 1.内存耗尽了无法进行实例化
  • 2.JVM崩溃
  • 3.数组下标越界异常
  • 4.算术异常
  • 二、异常体系
  • 1.所有的异常类的祖先是Throwable
  • 2.异常分为两部分:Error和Exception
  • Error:错误,程序是不能进行处理的,就是不可通过代码处理的异常
  • Exception:在程序开发期间,要会这种异常进行处理,可以通过代码处理的异常
  •     --IOException:编译时异常,在编译期间出现的异常
    
  •     --RunTimeException:运行时异常,在程序运行期间出现的异常
    
  • 三、常见的几种运行时异常
  • 1.数组下标越界异常:ArrayIndexOutOfBoundsException
  • 2.算术异常:ArithmeticException
  • 3.空指针异常:NullPointerException,通过打断点,百分之百的可以找到,最容易找到的异常
  • 4.类型转换异常:ClassCastException

//StackOverflowError:栈溢出,像这种是我们代码解决不了的

  • 四、如果处理Exception异常

  • 处理异常的方式:抓抛模型

  • 1.抛:当执行程序的时候,一旦出现异常,就会生成一个对应的异常对象,并将对象抛出

  • (1)抛的类型:自动抛和手动抛,一般自动抛就可以了

  • (2)使异常对象处理交给方法的调用者

  • 一旦出现异常,就会生成一个对应的异常对象,并将对象抛出。将来给方法的调用者

  • 2.抓:抓住程序中抛出的异常对象

  • 在java程序运行时收到异常对象,会寻找能够处理这种异常的异常代码,并将当前的异常对象交给其来处理。

  • 怎么抓异常对象呢?抓的过程就是异常处理的方法

  • java处理异常提供了两种方式

  • (1).try{ //自己处理异常

  • //可能会出现的异常代码
    
  • }catch(异常对象1 e){

  • 处理异常的方式;
    
  • }catch(异常对象2 e){

  • 处理异常的方式
    
  • }finally{

  • //一定会被执行的的代码
    
  • }

  • ①.try代码块里面放的是可能会出现的异常代码,同时要清除在try定义的变量,相当于if

  • 都是局部变量,作用域在try代码块中

  • ②.catch用来处理异常

  • 自定义打印信息

  • printStackTrace():打印堆和栈的错误信息(程序出错的位置及原因)

  • getMessage():打印错误信息(错误原因)

  • ③catch代码块可用定义N个,try中抛出的异常对象从上往下去匹配catch中的异常类型,

  • 如果一旦满足,就执行catch里面的代码,执行完成后就跳出所有的catch

  • ④。如果有多个catch,多个catch的异常对象是并列关系的话,比如说:都属于运行时异常,不需要考虑catch

  • ⑤.如果有多个catch,多个catch的异常对象是继承关系的话,子类需要在父类的上面,父类放到最后面,比如RuntimeException要放到空指针异常后面

  • ⑥.finally可选的代码块(可加可不加),如果finally,不论是否会出现异常,都会执行finally里面的代码

  • 就是遇到return,finally里面的代码块也会执行

  • 注意:如果异常处理了,那么后面的代码会继续执行

  • 运行时异常:可以不显示的进行处理,可以不处理,只是运行的时候会出现异常

  • 编译时异常:必须要显示进行异常处理,必须处理,不然就运行不了,因为编译就不通过

  • 处理:选中异常的代码,ctrl+alt+t,选择6try/catch

  • (2)throws:找别人帮我处理异常

  • 代码出现了异常,后面的代码就不会运行,但是加了异常处理,之后的,夹中间还是不会运行,后面的代码还会继续运行

  • 异常处理的第一种方式:try-catch-finally(自己处理)

  • 异常处理的第二种方式:

  • 1.在方法的声明处,显示的抛出异常对象类型(委托处理)

  • 谁处理呢,谁调用谁处理,相当于把异常往上抛

  • 2.语法:

  • public static void test1() throws FileNotFoundException,IOException

  • 注意:平行关系;随便没有顺序。继承关系:子类在前,父类在后

  • 3.处理方式:

  • (1)该方法内出现异常是,会抛出一个异常对象,抛给方法的调用者

  • (2)异常对象可以一直向上抛,直到抛给main方法,也可以通过try-catch进行显示的处理异常

  • 一层层往上抛,最终还是就会通过t

  • ry-catch进行显示的处理异常

  • 总结:

  • 1.抓:异常处理

  • 两种处理方式:try-catch throws+异常类型

  • 2.抛:一旦在程序执行期间出现异常,会抛出一个异常类对象

  • 两种方式

  • 自动抛

  • 手动抛 throw+异常类的对象,注意:throw没有加s,基本上都是运行时异常,所以自定义的时候,可以直接继承RuntimeException

  • 这个异常类可以是现成的异常类(就是java给提供的异常类),也可以是自己定义的异常类
    */
    //注意:main方法也可以往上抛,这个时候就会抛给JVM虚拟机,JVM虚拟机肯定处理不了这个异常,他就会报错

/**

  • 如果和自定义一个异常类?

  • 1.自定义的异常类需要显示的继承RuntimeException

  • 2.提供一个序列号

  • 3.提供一个无参和有参的构造方法
    */
    public class MyException extends RuntimeException{
    static final long serialVersionUID = -7034897190745766939L;//随机生成的序列号,直接粘就可以了

    public MyException() {
    }

    public MyException(String mess) {
    super(mess);
    }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值