配色: 字号:
《Java Web应用程序开发》01 异常
2023-05-25 | 阅:  转:  |  分享 
  
目标了解使用异常的原因 理解Java的异常层次结构掌握try、throw和catch块检测、指出和处理异常掌握finally子句释放资源掌握
声明新的异常类概述异常是指程序运行期间出现的问题 JAVA语言提供了一套完善的异常处理机制。正确运用这套机制,有助于提高程序的健壮
性 本章首先概述异常处理的概念,然后举例说明基本的异常处理技术 Java异常处理机制 处理异常主要考虑两个问题如何表示异常情况如何
控制处理异常的流程Java异常处理机制 Java异常处理特点对异常情况进行分类,用Java类来表示异常,具有可扩展性和可重用性异常
流程的代码和正常流程的代码分离,提高了程序可读性 可捕获异常立即处理,也可抛给上一层去处理处理,具有灵活性Java异常处理机制 异
常类的层次结构 Exception 代表程序的异常(可以捕获并处理)Error 代表运行时的系统异常(不应捕获)Java异常处理机
制Exception分为两个分支: 派生自RuntimeException的异常 普通异常(非运行时异常)Java异常处理机制
常见异常类Java异常处理机制异常处理流程—抛抓模型运用异常处理机制Java提供了try—catch—finally语句来支持异常
处理 try {//可能产生异常的语句}catch(异常类型 e) { //捕获指定类型的异常,catch可以有多个//处
理异常}finally { //finally块是可选的//无论异常是否发生,都会执行的代码}try…catc
h语句try—catch语句:捕获异常 try{//可能会出现异常情况的代码}catch(异常类型一 e1){//处理出现的异常一
类型的异常}catch(异常类型二 e2){//处理出现的异常二类型的异常}……try…catch语句 示例:整型变量相除,可能会
产生除零异常//未捕捉异常int i, j, result ;i = 10 ;j = 0 ;result =i / j ;Syst
em.out.println("运算结果是:"+result);System.out.println("程序结束");//运行结果
Exception in thread "main" java.lang.ArithmeticException: / by ze
roat t01.Excepton1.main(Excepton1.java:8)//给程序加上异常捕获try{ int i,
j, result ; i = 10 ; j = 0 ; result =i / j ; System.out.
println("运算结果是:"+result);}catch(ArithmeticException e){ System.
out.println("发生除零异常");}System.out.println("程序结束");//运行结果发生除零异常程序结
束try…catch语句同一段代码中潜在多种异常的情况 try { int i, j, result ; String
input = "12w" ; i = 10; //input中保存用户所输入的数字,这里假设输入错误,输入了字母
j = Integer.parseInt(input) ; result = i / j ; System.ou
t.println("运算结果是:" + result) ;}catch(ArithmeticException e1) {
System.out.println("发生除零异常") ;}catch(NumberFormatException e2) {
System.out.println("所输入的内容非数字") ;}System.out.println("程序结束");
try…catch语句如果对多个异常不需要区分,只希望捕获它们不让程序终止,此时只需给出异常的基类即可 try{…………}catc
h(Exception e) { //所有异常都会在此被捕获……}下面这种写法,编译器将报错 try{……}catch(Excep
tion e1) {……}catch(IOException e2) { //该catch块永远不会被执行到……}finally语
句finally :任何情况下都必须执行的代码 finally块是可选的finally块通常放置释放资源的代码 try{申请资源,
如数据库连接,网络连接,打开文件等可能出现异常的代码}catch(异常类型一 e1){处理异常一类型的异常}catch(异常类型二
e2){处理异常二类型的异常}finally{释放资源}throws子句throws:声明可能出现的异常 如果一个方法会出现异常
,但没有能力处理它,可以在方法声明处用throws子句来声明抛出异常 访问修饰符 返回类型 方法名(参数列表) throws 异常
1, 异常2 public static void fun( ) throws NumberFormatException { …
}方法只负责完成功能,其中产生的异常,就谁调用该方法谁负责处理 throws子句方法调用者了解到被调用方法可能抛出的异常,可采取
两种措施: 捕获并处理异常 继续声明抛出异常public void invoke(){ try{ fun(); }c
atch(NumberFormatException e){ //处理异常 } }public void invoke(
) throws NumberFormatException { fun(); //后续代码}throw语句thr
ow:抛出异常当位于最上层的子系统不需要关心来自底层的异常的细节时,常见的做法是:异常转译public void uploadIm
ageFile(String imagePath)throws UploadException{ try{ /
/上传图像文件(包括操作文件,操作数据库) …… }catch(IOException e1){
//把原始异常信息记录到日志中去,便于排错 …… throw new UploadException
(); //抛出新异常 }catch(SQLException e2){ //把原始异常信息记录到日志中去,便
于排错 …… throw new UploadException(); //抛出新异常 }
}用户定义异常通过扩展Exception类来创建自定义的异常 //自定义 服务器超时异常public class ServerTi
medOutException extends Exception{ private String reason; //异
常原因 private int port; //服务器端口 public ServerTimedOutExc
eption(String reason, int port){ this.reason=reason; this
.port=port; }//抛出自定义异常throw new ServerTimedOutException("不能连接服务器
", 80 ); public String getReason(){ return reason; } public int
getPort(){ return port; }}异常处理原则异常只能用于非正常的情况,不能用异常来控制程序的正常流程。例如:p
ublic static void initArray(int [ ] array){ try{ int i =
0; while(true) { array[ i++ ] = 1 ; } }catch
(ArrayIndexOutOfBoundsException e){ }}异常处理原则避免过于庞大的try块代码块 try块代
码越庞大,出现异常的地方就越多,分析异常原因就越困难 有效的做法是分割可能出现异常的程序段落,分别放在单独的try块中,从而分别
捕获异常异常处理原则在catch子句中指定具体的异常类型//用Exception捕获所有异常Public void print()
{ while(文件未打印完){ try{ 打印一行 }catch(Exception e){……
}}以上代码看起来省事,但实际上不是好的编程习惯//正确的做法是指定具体的异常类型public void print{ whi
le(文件未打印完){ try{ 打印一行 }catch(OutOfInkException
e1){ do{ 等待用户更换墨盒 }while(用户没有更换墨盒)
}catch(OutOfPaperException e2){ do{ 等待用
户添加打印纸 }while(用户没有添加打印纸) } }异常处理原则不要在catch块中忽略被捕获的异常,例如:tr
y {……}catch(Exception e) { } //对异常不采取任何操作try {……}catch(Exception
e){ e.printStackTrace(); } //仅仅打印异常信息catch块既然捕获了异常,就应提供异常处理措施 处理异
常重新抛出异常异常转译总结Java的异常处理涉及到5个关键字:try、catch、throw、throws和finally。异常处理流程由try、catch和finally3个代码块组成。其中try代码块包含了可能发生异常的程序代码;catch代码块紧跟在try代码块后面,用来捕获并处理异常;finally代码块用于释放被占用的相关资源。Exception类表示程序中出现的异常,只要通过处理,就可能使程序恢复运行的异常。对于方法中可能出现的受检查异常,要么用try……catch语句捕获并处理它,要么用throws子句声明抛出它,Java编译器会对此作检查。
献花(0)
+1
(本文系大高老师首藏)