面向对象 第九课 异常

异常:对于程序执行时出现的意外情况,在java语言中被称为异常(Exception),出现异常时进行的相关处理则称为异常处理。

异常是每个程序员都必须要面对的情况。———没有没有异常的软件。

程序员80%的精力处理20%可能发生异常的代码。

异常分类:
1>检查异常
2>运行时异常
3>错误


java语言中使用一些专门的类来描述不同的异常情况,而这些专门的类称为异常类。所有的异常类组成了java语言的异常类继承树体系。

常见的异常类:
Exception:异常继承树的根类
RuntimeException:运行时异常类
ArithmeticException:算术错误异常(如:除数为零)
IllegalArgumentException:方法接收到非法参数异常
NullPointerException:空引用异常
ClassNotFoundException:不能加载所需的类异常
NumberFormatException:数值转化格式异常(如:字符串转float类型)
IOException:I/O异常的根类
FileNotFoundException:找不到文件异常
EOFExeption:文件结束异常
InterruptedException:线程中断异常
ArrayIndexOutOfBoundsExcption:数组访问越界异常


java异常处理机制


异常处理是java语言中的一种机制,是java语法的一个特色功能,通过恰当的使用该机制,可以使得java语言编写的项目更加稳定。


java程序在执行过程中如果出现异常,会自动实例化异常类对象,该异常对象将被自动提交给JVM,当JVM接收到异常对象时,会寻找能处理这一异常的代码,并把当前一场对象交给其处理,这一过程称为捕获异常。如果JVM找不到可以捕获异常的代码,则java程序将异常退出。


java中使用try和catch关键字捕获异常,格式如下:
try{
    //代码块(可能出现异常的代码)
} catch(异常类型1 exception) {
    //对异常进行处理的代码块
} catch(异常类型2 exception) {
    //对异常进行处理的代码块
} catch(异常类型3 exception) {
    //对异常进行处理的代码块
}finally{
    //无论是否有异常,始终都会被执行的代码
}


当有异常发生时,代码控制流程转到捕获异常的catch中的代码块,执行完毕后,继续执行catch代码块后的代码;当没有异常发生时,不会执行catch中的代码块,一段代码可能会引发多种类型的异常,当引发异常时,会按顺序来查看每个catch的异常的类型,并只执行第一个与异常类型匹配的catch中的代码块,其他的catch中的代码块将不会执行。


捕获异常的顺序:
1>尽量把最可能出现的异常放在前面捕获
2>Exception根类异常放在最后捕获


java使用throw关键字和throws关键字抛出异常
throw关键字:用于在代码中抛出异常,常用的格式如下:
throw new 异常类;
throws关键字:用于在方法中抛出所有异常,而它本身不捕获这些异常。这些异常将被抛给方法的调用者,调用者需要在方法中捕获异常,如果调用者不捕获则必须在方法中使用thows继续将异常抛出,直到异常被捕获处理。常用格式如下:
返回值类型 方法名(方法参数) thows 异常类1,异常类2...{
    //方法体
}


java异常分为两类:非受检异常和受检异常


非受检异常:指编译器不要求强制处理的异常,一般是因为程序员代码编写方式不当而导致的异常。RuntimeException异常类以及它的子类都属于非受检异常。
受检异常:指编译器要求必须强制处理的异常,即程序在运行时由于外界因素导致的异常。
ClassNotFoundException:没有找到具有指定名称类的异常
IOException:操作文件时发生的异常
SQLException:操作数据库时发生的异常


在捕获异常时,如果有return语句,finally中的语句也会执行。


java异常机制的特点:
1>可以将异常对象在方法调用中传递,通过传递可以将异常对象传递到适合的位置再处理,使用这种机制,是的java语言的异常处理更加灵活;
2>可以在源代码级别将正常执行的逻辑代码和异常处理的代码相分离,更加便于代码阅读和维护;
3>异常处理机制也存在一些弊端,过度使用异常处理将降低程序的执行效率,增加语法的复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值