java学习day16异常处理

异常处理

  • 异常处理的意义
    • 什么是异常
    • 什么是错误
  • Throwable、Exception以及Error的关系
  • 运行时异常和非运行时异常
    • 运行时异常
    • 非运行时异常
  • 异常的捕获和处理
    • 异常处理流程
    • 代码结构
    • finally关键字
    • try catch finally的组合
  • 异常的抛出
  • finally和return关键字结合
  • 自定义异常

异常处理的意义

什么是异常

异常指的是程序运行时发生的不正常事件;异常能够被程序处理,保证程序继续运行下去;例如除数为0、文件没有找到、输入的数字格式不对……

什么是错误

错误程序没法处理,例如内存泄漏。发生错误后,一般虚拟机会选择终止程序运行,程序员需要修改代码才能解决相关错误

Throwable、Exception以及Error的关系

Throwable是Exception和Error的父类

运行时异常和非运行时异常

运行时异常

称为非检测异常(unchecked Exception), 这些异常在编译期不检测,程序中可以选择 处理,也可以不处理。如果不处理运行时会中断,但是编译没问题。

RuntimeException:
ArithmeticException 数字异常,分母为0
NullPointerException 空指针异常,如果对象的引用是null ,又调用了他的方法或者属性
IndexOutOfBoundsException 下标溢出异常
ArrayIndexOutOfBoundsException,
StringIndexOutOfBoundsException
NumberFormatException 数字格式异常、
ClassCastException 类型转换异常

非运行时异常

也称为检测异常(checked Exception), 是必须进行处理的异常,如果不处理,将发生编译期错误。

异常的捕获和处理

异常处理流程

抛出异常
捕获成功
捕获成功
异常被处理程序正常运行
捕获失败
异常未处理中断程序

代码结构

try{
可能抛出异常的代码块;
}catch(异常类型 变量名){
处理异常的代码;
}

会发生三种情况:
1、发生异常被捕获处理;
2、发生异常没有被捕获处理;
3、没发生异常

finally关键字

在try catch 后跟的语句代码块
如果希望不管什么情况,有一些代码都必须被执行,那么就可以把这些代码写到finally块中。

try catch finally的组合

必须有try,catch可以有1个或多个,finally最多1个,可以没有,不能有多个;
还有另外一种组合:只有try和finally,没有catch

异常的抛出

throw关键字
抛出异常其实就是创建了一个异常对象,然后用throw关键字交给异常处理机制去处理
throws关键字
一个方法如果使用了throws,那么调用该方法时,编译期会提醒必须处理这些异常,否则编译错误;注意:是非运行时异常一定要去处理
java学习day16异常处理_第1张图片

finally和return关键字结合

try{}catch{}finally{} return;
不考虑异常
try{return}cathc{}finally{} return;
解释:在try中执行了return语句,但是不是真正的return,将return的值放到临时栈中,继续执行finally语句块,最后才将临时栈中的值返回结果
try{}catch{return}finally{}return
有异常 catch return 中的表达式存在临时栈中
无异常 执行finally return
try{}catch{}finally{return}
最后执行的finally中的return
try{return} catch{return}finally{}
1:有异常,返回catch的return
2:没有异常,返回的try的return
try{return} catch{} finally{return}
返回的结果是finally
try{return}catch{return}finally{return}
无论是否有异常都是finally中的return

自定义异常

自定义异常类非常简单,只要继承API中任意一个标准异常类即可;
多数情况下,继承Exception类;也可以选择继承其他类型异常;
一般自定义异常类中不写其他方法,只重载必要的构造方法;
使用自定义异常与使用API中标准异常一样;
可以用throw抛出自定义异常对象,使用throws声明自定义异常类型;
可以使用try/catch/finally处理异常;

你可能感兴趣的:(java)