java异常处理

    xiaoxiao2025-03-15  62

    一、异常的概念 •在Java语言中,将这些程序意外称为异常,出现异常时的处理称为异常处理 1.所有异常都是继承于Throwable 2.Throwable分为异常Exception和错误Error(程序员不可控的),Error错误一般都是不可恢复的错误,比如系统崩溃、虚拟机错误,内存空间不足、类定义找不到、方法调用栈溢出等;而Exception错误则是我们经常使用来做业务异常拦截的;对于Error类型错误一般由于是不可恢复错误,所以没必要catch掉 3.程序员处理Exception,一般都是运行时异常(a.编译可以通过 b.有可能出现也有可能不出现)可以通过程序if语句进行处理,可以不使用异常处理 4.常见的异常: 运行时异常 NullPointerException ArrayIndexOutOfBoundsException ArithemeticException 检查时异常 InterruptedException,SQLException,IOException 5.异常分为运行时异常和检查时异常,运行时异常在编译时可以不用进行异常处理,但检查时异常在编译时必须进行异常处理 6.异常处理的作用:一方面可以提示用户或程序员一些异常信息,另一方面能保证程序继续正常运行 二、异常的处理 try catch finally throw throws五个关键字 1.try代码块 把有可能产生异常的代码放入try代码块,可以由catch捕获 try{ //有可能产生异常的代码块 } 2.catch代码块 catch(异常类 对象){ //产生异常处理的代码 } •一段代码可能会引发多种类型的异常 •引发异常时,会按顺序查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句,其后 catch 语句被忽略不执行,程序会跳出try catch语句继续执行 •在捕获异常写catch语句的时候,应按照“从小到大”的顺序捕获异常,即先子类后父类 Exception是所有异常类的父类,可以用Exception来替换接收所有的异常

    3.finally代码块 finally代码块不管try语句块产不产生异常,都会在try与catch语句块后执行

    4.throw手动抛出异常 throw 异常类的对象; 是一个语句 只能放在方法体内

    除了运行时异常的代码在初始的时候不需要try catch处理,其他非运行时异常必须在使用的时候就需要使用try、catch来进行处理

    异常类常用的2个方法 getMessage()获取异常信息 printStackTrace() 打印异常的堆栈轨迹

    自定义异常类 典型的自定义异常类:

    使用throw + 自定义的优点: (1)对同类的异常信息进行统一的管理,比如都是权限不足的异常的信息,可以考虑定义一个自定义异常对所有权限不足的信息进行统一管理 (2)抛出异常位置会导致程序进入到catch语句中,而抛出异常后的语句不会再被执行,可以控制程序的走向

    5.throws在方法中声明该异常,使用在方法定义上 throws+异常类,使用在方法的声明当中

    throws可以传递的

    finally与return

    public class TestF { public static int getValue(){ int i = 0; try{ i = 10; //if(i >= 10) throw new Exception("ccc"); return i;//在执行return语句时先检查有没有finally,假如没有直接return返回, //有的话先把return 10;压入栈中再执行finally,执行完毕,再把return语句出栈执行 }catch(Exception e){ }finally{ i = 20; System.out.println("finally"); } return i;//必须保证该方法一定要有返回值 } public static void main(String[] args){ System.out.println(getValue()); } ---------- java ---------- finally 10

    输出完成 (耗时 0 秒) - 正常终止

    finally语句唯一不被执行的情况是方法执行了System.exit()方法

    三、总结异常处理需要注意地方 1、try语句不能单独存在,可以和catch、finally组成 try…catch…finally、try…catch、try…finally三种结构,catch语句可以有一个或多个, finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。 2、try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。 3、多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。 4、throw语句后不允许有紧跟其他语句,因为这些没有机会执行。

    try{ i = 10; throw new Exception("ccc"); return i;//return i;语句永远都不会被执行,编译器编译不通过 }

    5、如果一个方法调用了另外一个被声明抛出异常的方法,那么这个方法要么处理异常,要么继续声明抛出

    总结: 异常处理: 异常:程序运行出现问题 异常处理:出现问题进行处理

    Throwable—Error(由不可控因素造成) —Exception(程序员需要处理的)

    Exception 运行时异常RuntimeException,特点:编译可以通过,运行时有可能出现的异常 NullPointerException ,ArrayIndexofBoundsException 检查时异常 特点:编译不能通过,必须在编译前进行异常处理 IOException,InterruptedException

    try catch finally throw throws try语句块:包裹可能会出现的异常代码 catch捕获try中可能会出现的异常,多重catch,catch的顺序必须保证先子类后父类(从小到大) finally语句块是必定会被执行的 throw throw+异常类的对象;手动抛出的异常必须处理,1.使用try,catch捕获 2.再次通过throws抛出 throws throws+异常类,用在方法的声明当中,在调用该方法的时候要么使用try、catch处理这个异常,要么就继续抛出该异常 自定义异常:(1)自定义异常继承Exception (2)定义一个构造方法,调用父类的构造方法 ,命名一定要规范

    异常类的常用方法:printStackTrace() getMessage()

    finally与return语句

    最新回复(0)