在java中也会出现异常情况
java的三大基本特征是:1)面向对象2)平台无关性3)异常处理机制和强类型语言,垃圾回收机制
异常:对程序运行过程中所发生的不正常严重错误。异常会中断正在运行的程序,所以对异常的处理尤为重要。
异常处理机制就是java中对异常进行处理的机制。
通过图可以更加清晰的看见异常类之间的关系
Throwable的子类分为Exception和Error
Error表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误 ,导致JVM无法继续执行
Exception可分为运行时异常(RuntimeExcetion)和检查时异常(CheckedException)
运行时异常:在运行时抛出的异常,在写代码时不进行处理,java源文件也能通过
检查时异常:非运行时异常,必须在编程时进行处理,否则编译不通过。
处理异常就需要异常处理机制了。怎么处理呢
try{
//可能抛出异常的语句块
}catch(SomeException1 e){ // SomeException1特指某些异常
//当捕获到SomeException1类型的异常时执行的语句块
} catch( SomeException2 e){
//当捕获到SomeException2类型的异常时执行的语句块
}finally{
//无论是否发生异常都会执行的代码
}
try-catch语句块相当于if-else语句
先使用try语句块抛出异常。抛出异常对异常进行捕获,得到异常了使用catch语句块对它进行处理,处理前按顺序查看每个catch语句,一般有什么异常处理什么异常,按照从小到大的顺序捕获,先子类异常后父类异常,若父类在子类前先捕获,则异常屏蔽,父类会捕获子类的异常,子类就不会捕获到异常,永远不会触发,finally语句块无论发生异常该代码一定会执行。
try-catch-finally中catch和finally两者至少选一个语句块
异常类有两个方法
getMessage()输出异常信息
printStackTrace()方法输出异常堆栈信息
除了try可以抛出异常,还可以使用throw抛出具体异常类的对象,一般用于方法体中
throw可以将异常对象抛给自己和方法调用者
抛给自己->直接使用try-catch处理
抛给方法调用者->方法调用者使用try-catch处理或方法调用者上抛(上抛后抛出运行时异常可以不处理,检查时异常必须throws抛出异常类或其父类)
throws用于声明方法可能抛出的对象,可以有多个异常类。
异常处理可以知道错误在哪并对异常进行处理。之后的程序可以继续执行,则异常的出现尤为重要,javaAPI提供的内置异常不一定总能捕获程序中所有的错误,在必要的时候要定义一个自己需要的异常。那么如何定义呢
1、创建继承Exception或其子类的自定义类
2、自定义类调用父类构造方法,参数是String类型(使得错误信息能在异常类对象printStackTrace方法和getMessage方法中使用)