Java异常结构

异常关键字:

  1. try{可能出现异常的代码}
  2. catch(异常的类型 异常){}
  3. finally{不管是否有异常,都会执行的代码}
  4. throw 抛出异常 主要用于创建自定义的异常
  5. throws 声明异常 提示虚拟机会产生哪些异常,可以声明多个。放在类(参数)后面,多个异常用“,”逗号隔开

常见异常:

  1. java.util.ArithmeticException 算数异常
  2. java.lang.ClassCastException 类型转化异常
  3. java.lang.ArrayIndexOutOfBoundsException 数组越界异常
  4. java.lang.NullPointerException 空指令异常
  5. java.lang.InputMismatchExceptuin 输入类型不匹配异常

try-catch-finally语法:

  1. 不带finally
    (1) try-catch
代码A
		try{
			可能出现异常的代码B
		}catch(异常类型 异常名){
			捕捉到异常后会执行的代码C
		}
		代码D
  • 没有出现异常
    代码A->代码B->代码D
  • 出现异常,并捕捉到
    代码A->代码B(到出现异常的部分)->代码C->代码D
  • 出现异常,但是不匹配捕捉的类型
    代码A->代码B(到出现异常的代码)->报错,退出程序。提示报错类型
  1. 带finally
    代码A
try{
			可能出现异常的代码B
		}catch(异常类型 异常名){
			捕捉到异常后会执行的代码C
		}finally{
			代码D
		}
		代码E
  • 没有出现异常
    代码A->代码B->代码D->代码E
  • 出现异常,并捕捉到
    代码A->代码B(到出现异常的部分)->代码C->代码D->代码E
  • 出现异常,但是不匹配捕捉的类型
    代码A->代码B(到出现异常的代码)->代码D->提示代码B报错类型
    注:只有在finally执行之前,执行过System.exit();结束程序才不会执行finally代码
  1. 多重catch注意事项

    • 异常逐个匹配,出现多个异常也只会执行遇到的第一个匹配的异常
    • 异常的先后顺序:先子类后父类(子类不能抛出比父类更多的异常)
    • catch只能执行一个
  2. 异常的体系结构(Throwable)- 直接子类为Error(错误)和Exception(异常)

  • Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,  这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。
    
    1. Error (代码错误异常)
      是程序无法处理的异常,由JVM产生和抛出的。异常发生时,Java虚拟机(JVM)一般会选择线程终止。
    2. Exception(异常)
      程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。
      1. 运行时异常(RuntimeException)
       - 这些异常是不检查异常,程序中可以选择捕获处理,也可以不处	理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
      
      1. Checked-检查异常(RuntimeException以外的异常)
        - 从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
      
  1. 自定义异常

    1. 自定义一个类。继承父类(Exception,RuntimeException,Throwable)
    2. 重写构造方法
    3. 使用throw new 自定义的异常类名(参数);(实例化自定义的异常类)
  2. 当catch中有return语句时

    1. 如果try代码块中有异常,并捕捉到
      先执行try里面的代码块,再执行catch语句块中return之前的语句,再执行finally语句块,最后才执行return;
    2. 如果try中没有异常
      先执行try代码块 ,再执行finally中的代码块。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值