JAVA异常及其处理
一、什么是java异常
1、java异常是java程序运行过程中出现的非正常情况,在程序当中,本应该正常执行的代码,由于逻辑错误或者相关的语法错误导致的无法执行正常结果
2、异常在程序中如果不做处理,会导致程序中途瘫痪,不能正常完成特定功能
3、异常一般情况是需要通过java异常处理机制给屏蔽或者处理掉
二、java异常特点
1、Java异常处理是面向对象处理方式
2、一旦代码出现异常问题,JVM底层(java虚拟机)则会创建一个异常类相关的对象
3、异常对象产生后,会根据代码对异常的处理机制进行操作,其中异常处理机制包括捕获异常和抛出异常两种,如果没有异常操作,则java程序会中断执行
三、异常体系结构
1、异常的祖宗类:Throwable其子类分为:Error(错误)和Exception(异常)
a) Error包括:AWTError、IOError、AnnotationFormatError等程序的编程问题,主要通过改写代码来避免
b) Exception又包括检测异常(受检异常、非运行时异常):IOException、SQLException、 ActivationException等,还包括非检测异常(非受检异常、运行时异常):RuntimeException
c) RuntimeException又包括:NullPointException、ArithmeticException等子类
四、异常处理机制之捕获异常
捕获异常处理机制:try与catch(可能还会有finally)
定义的格式:
try{
//可能出现异常的代码部分
}catch(异常类型 异常变量){
//执行异常操作
}catch(异常类型 异常变量){
//执行异常操作
}…
finally{
//处理完try与catch操作后的收尾操作,异常统一出口
}
异常捕获注意事项:
a) catch定义,由上到下,异常类的范围必须由小到大或者同级别的
b) 运行时异常,catch中可以随意定义类型,程序运行时,会根据catch参数自动匹配(如果不知道异常的类型可以用 catch(Exception e){} 来捕捉
c) 非运行时异常,则catch中定义的异常,在try代码块中必须存在,如果没有类似异常存在,则不允许被定义
d) finally关键字,在进行异常处理之后,在异常的处理格式中还有一个finally语句,此语句将作为异常的统一出口,不管是否产生异常, finally的语句块一旦定义了,就一定要执行
e) 如果try中有return语句,则会先执行return语句,后执行finally,最后返回整个方法
f) catch和finally至少存在一个,try一定要存在
五、异常处理机制之抛出异常
1、抛出异常处理机制:throws方法抛出异常
定义的格式:
public void test() throws 异常类型{
//存在异常的代码块
}
注意事项:
a) 此异常主要是针对存在异常的代码块出现的异常问题,中止当前方法的执行,但是程序会继续
b) 此方法把异常问题抛出给调用此方法的上一级函数当中,并调用出自行处理异常
例子:
public class Test {
public static void main(String[] args) {
Test t = new Test();
try {
t.b();
} catch (ArithmeticException e) {
e.printStackTrace();
}
System.out.println("执行了main方法");
}
public void b()throws ArithmeticException{
this.a();
System.out.println("执行了方法b");
}
public void a()throws ArithmeticException{
int a = 10;
int b = 0;
int result = a/b;
System.out.println("执行了方法a"+result);
}}
输出的结果:
java.lang.ArithmeticException: / by zero
at demo1.Test.a(Test.java:20)
at demo1.Test.b(Test.java:14)
at demo1.Test.main(Test.java:7)
执行了main方法
2、原理分析:1)main方法调用了b方法,b方法调用a方法
2)a方法a/b存在异常抛出后,a方法中断
3)b方法调用a方法获取到了a方法的异常,抛出后中断执行
4)main方法获取到b方法抛出的异常捕捉后,继续往后执行,不中断
3、抛出异常处理机制:throw(注意是没有s的)抛出异常对象
定义的格式:
public void test() throws 异常对象类型{
try{
//存在异常的代码块
}catch(异常类型 变量名){
throw 异常对象;
}
}
throw异常对象注意:
a) throw一般存在于catch语句当中,用于出现异常后的一种操作方式
b) 捕捉的异常和抛出的异常不一定相同,可以不一样
c) throw抛出的异常对象如果是检测异常,则所在的方法必须要通过throws显性抛出
d) throw抛出的异常对象如果是非检测异常,则方法上可以选择性定义throws
六、自定义异常
自定义异常一般是自己定义一个类来扩展Exception类
基本的定义格式:
public class 自定义异常类名 extends Exception{};
注意:自定义异常一般适用于throw代码块抛出