JavaWeb高级开发 异常处理

什么是异常?

异常:异常就是程序在运行过程中所发生的不正常事件,他会中断正在运行的程序。
(提示:Java中所有的异常类型都以Exception单词结尾。)
Java语言是按照面向对象的思想来处理异常,使得程序具有更好的可维护性。 Java异常处理机制具有以下优点:
1、把各种不同的异常类型情况进行分类,用Java类来表示异常情况,这种类被称为异常类。把异常情况表示成异常类,可以充分发挥类的可扩展和可重用的优势。
2、异常流程的代码和正常流程的代码分离,提高了程序的可读性,简化了程序结构。
3、可以灵活的处理异常就捕获并处理他,否则只需抛出异常,由方法调用者来处理他。

Java的异常体系结构:
在这里插入图片描述

Exception 是异常类的祖先,处于继承关系的最顶层。下面是一些常见的异常类:
在这里插入图片描述

异常处理

异常处理机制:
Java提供了一套完整的异常处理机制。正确的运用这套机制,有助于提供程序的健壮性。所谓程序的健壮性 ,就是指程序在正常情况下返回正确结果;如果遇到异常情况程序也能采取周到的解决措施。相反的,不健壮 的程序则不能事先预计到可能会出现的异常,或没有提供强大的异常处理措施,导致程序终止或返回错误结果,很难检测到异常原因。

Java异常处理机制主要是通过五个字来实现的:
1、try: 我们通常把可能出现问题的代码放到try块中;
2、catch: 如果try块中的代码在执行过程中真的出现了异常,则catch用来捕获这个异常,从而让系统恢复正常,不至于崩溃;如果try 块中没有捕获这个异常,则catch块中的代码,不会被执行。你可以认为catch是一个消防部门;
3、finally: try块或catch块的代码执行后,如果存在finally,则执行此块中的代码;
4、throw: 程序员可以利用此关键字来抛出一个异常。在某些时候是非常有必要的;
5、throws: 用在方法前,声明此方法可能会产生某种类型的异常,它强制要求方法的调用者必须用try catch来处理或或throws来处理。

try-catch块
try{
//可能发生异常的代码
}catch(xxxxx e){
//捕捉异常
}
try、catch是Java异常处理中最常用的关键字,通常需要配合使用,我们称之为try-catch块。
catch后的小括号中是需要捕捉的异常类型参数。

try-catch详解
三种情况
1 try中所有正常,不执行catch中的代码;
(如果try语句块中的代码在运行时没有发生异常,那么catch语句块中的所有语句将被忽略,不会执行)

2 try中有异常,并且发生的异常是catch中异常或子类则执行catch中的代码;
(如果try语句块的代码在运行时出现异常,那么在try语句块中,出现异常的那行代码之后的代码将不会执行,而catch块中的语句都会执行)

3 try中有异常,并且发生的异常不是catch中异常或子类则程序中断。(如果try语句块的代码在运行时出现了异常,但是这个异常与catch中捕捉的异常类型不匹配,这时程序就中断(崩溃)了)

finally语句块
1、finally在catch块执行后,return之前执行(如果catch块中有return)。
2、finally主要放置必须被执行的代码

多重catch块
1、 在try中可能发生多个异常时使用,运行时按照代码书写顺序挨个匹配异常进行异常处理。
[当try语句块出现异常时,Java系统会自上而下分别对每个catch块进行异常类型匹配,并执行第一个与异常类型匹配的catch块,这个catch块一旦执行,其后的所有catch块都会被忽略。]

2、 子类异常在前,父类异常在后。(先匹配小异常,再匹配大异常)[多重catch块正常的编写顺序是先子类后父类,最后一个一般都是顶层的Exception类]

throws
如果一个方法可能会出现异常,但没有能力或者本身不愿意处理这个异常,可以在方法声明处用throws来声明抛出异常

抛出异常,它强制要求方法的调用者必须用 try-catch 或throws来处理。

throw
抛出异常。(相当于报告异常)

方法退出有几种方式?

  • 正常执行完退出
  • 遇到return退出
  • 遇到Excception(异常)退出

异常处理语句的语法规则:
1、 try代码块不能脱离catch代码块或finally代码块而单独存在。try代码块后面至少有一个catch代码块或finally代码块;否则编译出错;

2、 try代码块后面可以零个或多个catch代码块,还可以有零个或至多一个finally代码块。如果catch代码块和finally代码块并存,finally代码块必须在catch代码块后面。

3、try代码块后面可以只跟finally代码块。

4、 在try代码块中定义的变量的作用域为try代码块,在catch代码块和finally代码块不能访问该变量。

5、当try代码块后面有多个catch代码块时,Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,而不会再执行其他的catch代码块。在以下代码块中文件读写的语句会抛出FileNotFoundException异常,FileNotFoundException类是IOException类的子类,而IOException类是Exception的子类。Java系统把FileNotFoundException对象于IOException类匹配,因此当出现FileNotFoundException时,程序的打印结果为“文件读写错误”。

6、如果一个方法可能出现检查异常,要么用try…catch语句捕获,要么用throws字句声明将其抛出,否则会导致编译错误。

7、throw语句后面不允许紧跟其他的语句,因为这些语句永远不会被执行。

log4j日志工具

http://stu.ysd3g.com/Subject/ChapterContentById?Id=1972

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值