异常 学习笔记

异常

习题的引入

异常:Exception,在程序的运行过程中,发生了不正常的现象,阻止了程序的运行,称为发生异常。

用if-else堵漏洞的缺点:

        1. 代码臃肿,业务代码和处理异常的代码混在一起;
        2. 可读性差;
        3. 花费大量时间;
        4. 很难堵住所有漏洞。

try-catch-finally

基于上述,异常处理机制:try-catch-finally

异常查看

原理:

把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的()中的那个异常对象接受,接受以后:执行catch后面的{}里面的代码,然后try-catch后面的代码,该怎么执行就怎么执行。

详细说明:

  1. try中没有异常,catch中代码不执行;
  2. try中有异常,catch进行捕获;
  3. 如果catch中异常类型和出现的异常类型匹配的话:不执行catch中的代码,没有捕获成功,程序相当于遇到异常,中断了,后续代码不执行;

注意:

  1. Try中若出现异常,catch捕获成功的话,try中后续的代码不会执行,但try-catch后面的代码还是执行没有影响。

处理方式

  1. 什么都不写。什么都不做;
  2. 输出自定义信息;
  3. 打印异常信息,
    1. 打印ex.toString()方法,显示异常的类名(全限定路径)
    2. 打印ex.getMessage()方法,如果没有就显示null;
    3. 调用printStackTrace()方法;显示异常的堆栈信息,在控制台将异常的效果给我们展示出来,方便我们查看异常信息
  4. 抛出异常:throw ex;

问题+final

  1. 什么情况下try-catch后面代码不执行?
  1. Throw抛出异常的情况
  2. Catch中没有正常的进行异常捕获;
  3. 在try中遇到return;
  1. 怎么样才可以将try-catch后面的代码,必须执行?
  1. 只需要将必须执行的代码放入finally中,那么这个代码无论如何一定执行。
  1. return和final执行顺序?
  1. 先执行final,后执行return。
  1. 什么代码会放在finally中?
  1. 关闭数据库资源;
  2. 关闭IO流资源;
  3. 关闭socket资源。
  1. 有一句代码可让finally中代码不执行!
  1. System.exit(0);//终止当前虚拟机执行。

多重catch

  1. Try中出现异常之后,将异常类型和catch后面的异常类型依次比较,按照代码的顺序进行比对,执行第一个与异常类型匹配的catch语句;
  2. 一旦执行其中一条catch语句之后,后面的catch语句就会被忽略了;
  3. 在安排catch语句的顺序的时候,一般会将特殊异常放在前面(并列),一般化的异常放在后面;
    1. 先写子类异常,在写父类异常。
  4. 在JDK1.7之后,异常新处理方式:可以并列用|符号链接:

异常的分类

层次结构

注意:语法错误不属于异常

Error:Erro(错误):JVM系统内部错误、内存溢出、靠程序本身无法解决、程序员不关注

运行时异常

写代码时,不用特意对异常进行处理,在程序运行以后,系统自动检测,然后报出异常。

检查异常:

  • :防患于未然的效果,在写代码时对代码的异常进行处理

处理方式

  1. try-catch嵌套

  1. 多重catch

处理方式3:

  1. Throws

throw和throws区别:

throw和throws的区别:

  1. 位置不同
    1. throw:方法内部
    2. throws:方法的签名处,方法的声明处
  2. 内容不同:
    1. throw+异常对象(检查异常,运行时异常)
    2. throws+异常的类型(可以多个类型,用,拼接)
  3. 作用不同:
    1. throw:异常出现的源头,制造异常。
    2. throws:在方法的声明处,告诉方法的调用者,这个方法中可能会出现声明的这些异常,然后调用者对这个异常进行处理:要么自己处理要么再继续向外抛出异常

重载与重写异常

  1. 重载:重载的方法间 抛出异常无关
  2. 重写

子类的异常类型<=父类

自定义异常

可以继承运行异常,也可以继承检查异常

public class MyException extends NullPointerException{
   
static final long serialVersionUID = -70348971907457L;
    public
MyException() {
    }

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

  1. 如果继承的是运行时异常,那么在使用的时候无需额外处理;
  2. 如果继承的是检查异常,那么在使用的时候需要try-catch捕获或者throws向上抛
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值