java程序中的异常处理_第1页
java程序中的异常处理_第2页
java程序中的异常处理_第3页
java程序中的异常处理_第4页
java程序中的异常处理_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

异常处理

异常基本概念系统异常类用户自定义异常异常处理异常转移一、异常处理机制当方法执行过程中出现错误而干扰了程序流程时,会抛出一个异常,即构造出一个异常类的对象。异常类对象代表当前出现的一个具体异常,该对象封装了异常的有关信息。异常分为系统定义异常和用户自定义异常。异常抛出方式:系统定义异常-自动抛出用户自定义异常-用throw语句抛出方法中的异常处理:捕获异常,就地解决,并使程序继续执行。将异常向外转移,即将异常抛出方法之外,由调用该方法的环境去处理。程序中的异常处理可以提高程序的健壮性二、异常与异常类Throwable类Exception类Error类自定义异常类ArrayIndexOutOfBoundsException

类NullPointerException

类...1.系统异常类的层次结构2.系统定义的异常类Error类定义的错误是致命性错误,一般会导致程序停止执行。Exception类定义的是较轻的错误,你可以编写代码来处理这类错误,并继续程序的执行。系统预定义异常类及含义系统预定义的异常类异常对应的运行错误说明ClassNotFoundException类型转换异常:如找不到要装载的类。IllegalArgumentException非法参数异常:可用于检查方法参数的合法性。ArrayIndexOutOfBoundsException下标越界异常:一般指数组下标越界。FileNotFoundException找不到文件异常:未找到指定的文件或目录。IOException输入输出异常:在输入输出操作时产生的异常。NullPointerException空指针异常:访问空的尚未实例化的引用型变量。ArithmeticException数学异常:如数学运算被零除等。SecurityException安全性异常:如Applet小程序要读写文件。3.Exception类构造函数Exception()Exception(String异常描述)方法StringgetMessage()

-返回异常描述StringtoString()

-返回异常对象详细信息。voidprintStackTrace()

打印异常发生的路径,即引起异常的方法调用嵌套序列4.用户定义异常类用户自定义异常主要用来处理用户程序中特定的逻辑运行错误。定义异常类:classMyExpextendsException{//或继承其他异常类

...//定义新的属性

...//重载构造函数

...//重载原方法,或定义新方法

}例1:用户自定义异常。下面代码定义一个异常类,用于表示超时异常。classTimeOutExceptionextendsException

{ privateStringreason; privateStringip; privateintport;

publicTimeOutException(Strings,StringserverIP,intserverPort) { reason=s; ip=serverIP; port=serverPort; }

publicStringgetReason(){ returnreason; } publicStringgetIp(){ returnip; } publicintgetPort(){ returnport; } publicStringtoString() { return"Exception:ipis"+ip+"portis"+port+"thereasonis"+reason;

}}4.用户定义异常类定义好异常类后,程序中就可以抛出、捕获并处理该类型的异常publicclassExceptionTest{ publicstaticvoidmain(String[]args) {

try {

thrownewTimeOutException(”Connecttimeout”,”166.111.8.28”,80); }

catch(TimeOutExceptione) {

System.out.println(e);

} }}三、异常处理概念:警戒区-可能会引起异常的代码段

try{

警戒区代码(try块) //抛出异常

}catch(ExceptTypee){ //捕获异常 异常处理代码 //处理异常

}

后续语句若try块中没有异常,则try块执行完,控制转向后续语句。若try块中出现异常,则控制转向下面的异常处理部分,然后执行后续语句。要捕获的异常类对象1.抛出异常

(1)系统自动抛出异常例2:系统自动抛出异常。publicclassa{ publicstaticvoidmain(String[]args) { inti; int[]array={21,33,52,44,98}; try { while(true) { i=(int)(Math.random()*10); System.out.println(”下标为”+i+”的数组元素是”+array[i]);} } catch(ArrayIndexOutOfBoundsExceptione) {

System.out.println(”出现数组下标越界异常”);

} }}系统自动抛出异常。publicclassa{ publicstaticvoidmain(String[]args) { int[]array={21,33,52,44,98}; try { System.out.println(array[6]); } catch(ArrayIndexOutOfBoundsExceptione) {

System.out.println(”出现数组下标越界异常”);

} }}(2)直接抛出异常(throw语句)适用于用户自定义异常格式: 生成异常类的实例e; throwe;或: thrownew异常类构造方法例3:直接抛出异常。publicclassThrowException{ publicstaticvoidmain(String[]args) {

try{ thrownewArithmeticException(); } catch(ArithmeticExceptione){System.out.println(e);}

try{ thrownewArrayIndexOutOfBoundsException();} catch(ArrayIndexOutOfBoundsExceptione){ System.out.println(e); } System.out.println("throwanexception"); }}(3)间接抛出异常(throws)也称为异常转移异常总是发生在方法执行过程中。当方法代码不对异常处理时,异常会向方法外转移。系统定义的异常自动向外转移。用户自定义的异常要转移需要在方法头声明一下例4:间接抛出异常(throws)。publicclassThrowsException{ publicstaticvoidmain(String[]args)throwsRuntimeException {

try{ thrownewArithmeticException(); } catch(ArithmeticExceptione) { System.out.println("throwexception:"+e); } throwsException();

System.out.println("throwsexception");//没有执行 }

staticvoidthrowsException()throwsRuntimeException { try{thrownewArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsExceptione) { System.out.println("throwexception:"+e);

thrownewArrayIndexOutOfBoundsException(); } }}(4)检查型异常处理(5)运行时异常运行时异常都继承自RuntimeException类publicdoubledivide(inta,intb){returna/b;}try{ //可能出现异常的代码}catch(异常类型1e1){ //处理异常类型1}catch(异常类型2e2){ //处理异常类型2}……catch(异常类型3e3){ //处理异常类型3}finally{ //该代码块在try块执行后完成必做的事情}2.异常的捕获与处理例5:从键盘读取两个整数,用第一个整数除以第二个整数,并输出结果。如果在程序读取数据的过程中发生异常,则将捕获该异常并处理。importjava.io.*;publicclassCatchException{ publicstaticintgetInteger() { BufferedReaderinput=new BufferedReader(newInputStreamReader(System.in));

try{returnInteger.parseInt(input.readLine().trim()); } catch(Exceptione){ e.printStackTrace();//输出异常的方法调用栈 return0; } } publicstaticvoidmain(String[]args) { intn,d,r; System.out.println("EnteroneInteger:"); n=getInteger(); System.out.println("EnteranotherInteger:"); d=getInteger();

try{ r=n/d; System.out.println(n+"/"+d+"="+r); } catch(ArithmeticExceptione){e.printStackTrace();} System.out.println("endofprogram"); }}3.多异常处理try{...}//可处理多种异常catch(异常类1e1){...}catch(异常类2e2){...}满足异常匹配的条件:抛出对象与catch参数类型相同抛出对象为catch参数类的子类多异常处理中的匹配顺序:按先后顺序捕获(注意catch块书写时的排列顺序:先具体、后一般),但只捕获一次。例6:使用多重catch语句classMultiCatch{publicstaticvoidmain(Stringargs[]){try{inta=args.length;System.out.println("a="+a);intb=42/a;intc[]={1};c[42]=99;}catch(ArithmeticExceptione){System.out.println("Divideby0:"+e);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("Arrayindexoob:"+e);}System.out.println("Aftertry/catchblocks.");}}练习:分析程序运行结果classF1{publicstaticvoidmain(Stringargs[]){try{inta=0;System.out.println("a="+a);intb=42/a;intc[]={1};c[42]=99;}catch(ArithmeticExceptione){System.out.println("Divideby0");}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("Arrayindexoob");}System.out.println("Aftertry/catchblocks.");}}例7:异常处理例-未作异常处理publicclassTest{publicstaticvoidmain(String[]args){TestExceptionte=newTestException();te.m1();//调用m1方法,对m1方法的异常未做处理

}}classTestException{

privateinti;privateint[]array={1,2,3,4,5};//定义一个含5个元素的数组

voidm1(){//该方法中会出现数组下标越界异常,且无处理

for(intj=0;j<10;j++){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论