Java学习之异常处理_第1页
Java学习之异常处理_第2页
Java学习之异常处理_第3页
Java学习之异常处理_第4页
Java学习之异常处理_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第7章

异常处理

本章主要讲述如下内容:

异常的层次结构;

异常处理语句;

自定义异常;

异常处理中常用的调试方法。

江西新华电脑学院生活中的异常正常情况下,小王每日开车去上班,耗时大约30分钟但是,异常情况迟早要发生!一路畅通堵车!撞车!2程序中的异常publicclassTestException{publicstaticvoidmain(String[]args){("请输入课程代号(1至3之间的数字):");Scannerin=newScanner(System.in);intcourseCode=in.nextInt();//从键盘输入整数switch(courseCode){case1:System.out.println("C#编程");break;case2:System.out.println("Java编程");break;}}}输入:2输出:Java编程输入:B程序中断运行!正常情况:异常情况:3什么是异常异常就是在程序的运行过程中发生的不正常的事件,它会中断正在运行的程序绕行或者等待请求交警解决异常!面对异常该怎么办呢?通常情况下,我们会这样处理:程序运行程序中断运行堵车!撞车!生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活4什么是异常处理Java编程语言使用异常处理机制为程序提供了错误处理的能力程序中预先想好了对付异常的处理方法异常!程序运行处理完毕,程序继续运行对异常进行处理5简介在Java中,提供了错误捕捉和处理机制,即异常处理机制。在程序运行过程中发生错误时,Java允许其不按照正常路径完成任务,由发现错误的方法抛出封装了错误信息的对象〔异常〕到其调用程序,发出已经发生问题的信号,然后立即退出而且,程序并不在调用该方法的代码处继续执行,而是由异常处理机制开始搜索一个能够处理这种特定错误情况的异常处理器。67.1 异常的层次结构

Throwable是异常类的根节点,定义在java.lang包,它的子类也定义在该包中;Error代表系统错误类,由系统直接处理;Exception类及其子类是在程序中可捕捉到的异常。见图7.17声明抛出异常Exception类有下面几个常用的构造方法:97.1 异常的层次结构(续)1.0作除数〔包括模〕,将产生这类异常。例如:intx=0,y;y=100/x;2.例如:inta[]=newint[10];a[10]=0;107.1 异常的层次结构(续)3.

例如:inta[]=newint[10];booleanb[]=newboolean[10]; System.arraycopy(a,0,b,3,6);//有异常

4.例如: Objectobj=newObject(); inta[]=(int[])(obj);117.1 异常的层次结构(续)5.

例如:charch="ABC".charAt(99);

注意:2是5的子类。 6.例如:inta[]=newint[-10];127.1 异常的层次结构(续)7.

例如:inta[]=null; System.out.print(a.length);137.2 异常处理语句

缺省的异常处理的情况,例如:

publicclassDefaultException{//程序7-1publicstaticvoidmain(Stringargs[]){ inta,b=0;

a=2/b;//此处有异常

System.out.println(“a=”+a);//不运行此行}}14Java中如何进行异常处理Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws捕获异常catchtryfinally执行可能产生异常的代码捕获异常无论是否发生异常,代码总能执行手动抛出异常抛出异常throw声明异常声明方法可能要抛出的各种异常throws157.2 异常处理语句(续)

异常处理语句有try、catch、finally、throw和throws。异常处理的形式为:

try{

程序执行体}catch(异常类型1异常对象1){ 异常处理程序体1}catch(异常类型2异常对象2){ 异常处理程序体2}finally{

异常处理结束前的执行程序体}167.2.1 try和catch语句

try语句指明可能产生异常的代码段;catch语句在try语句之后,用于捕捉异常,一个try语句可以有多个catch语句与之匹配。异常处理以后,程序从try语句代码段后继续执行。例如:程序7-2。

17publicclassTryCatchTest{//程序7-2publicstaticvoidmain(Stringargs[]){ inta=99,b=0,c;

try{ ("产生异常之前");

c=a/b;//该行有异常

("产生异常之后"); }catch(ArrayIndexOutOfBoundsExceptione){

("处理下标越界异常"); }catch(ArithmeticExceptione){

("处理算术异常"); }

("异常处理结束");}}7.2.1 try和catch语句(续)注意:用catch语句捕捉异常时,假设找不到相匹配的catch语句,将执行缺省的异常处理。例如:inta=99,b=0,c;

try{ c=a/b;//产生的异常和捕捉的异常类型不一致}catch(ArrayIndexOutOfBoundsExceptione){ ("处理异常");}197.2.1 try和catch语句(续)注意:当有多个catch语句时,系统依照先后顺序逐个检查。例如:try{ c=a/b; }catch(ArithmeticExceptione){ System.out.println("Dividedbyzero");}catch(RuntimeExceptione){ System.out.println("Dividedbyzero");}207.2.2 finally语句

无论是否产生异常,finally语句指明的代码一定被执行。例如:publicclasstestFinally{//程序7-3publicstaticvoidmain(Stringargs[]){ inta,b=0;

for(inti=0;i<=3;i++){ System.out.println("TestNo:"+(i+1));21 try{ switch(i){ case0:a=3/b;

break; case1:intc[]=newint[10]; c[10]=0;

break; case2:charch="ABC".charAt(99);

break; case3:return; } }catch(ArithmeticExceptione){ (“零作除数!”); }catch(ArrayIndexOutOfBoundsExceptione){ ("数组下标越界!");}catch(IndexOutOfBoundsExceptione){ ("下标越界!");}finally{ ("在finally块中!"); }}}}程序运行结果:TestNo:1

零作除数!在finally块中!TestNo:2

数组下标越界!在finally块中!TestNo:3

下标越界!在finally块中!TestNo:4

在finally块中!7.2.3 throw语句

throw语句用于指出当前行有异常,当程序执行到throw语句时,流程就转到相匹配的异常处理语句,所在的方法也不再返回值。throw语句可以将异常对象提交给调用者,以进行再次处理。例如:程序7-4。25publicclassThrowException{//程序7-4publicstaticvoidTest(){ try{ intc[]=newint[10]; c[10]=0; }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("\t数组下标越界!");

throwe;//抛出点

//System.out.println("\t产生异常后!"); } }publicstaticvoidmain(Stringargs[]){ try{ Test(); }catch(IndexOutOfBoundsExceptione){

System.out.println("\t下标越界!"); }finally{ System.out.println("\t在finally块中!"); }}}程序运行结果:数组下标越界!下标越界!在finally块中!7.2.4 throws语句

throws语句指明方法中可能要产生的异常类型,由调用者进行异常处理。例如:28importjava.io.*;//程序7-6publicclasstestThrows{publicstaticStringreadString()throwsIOException{

intch; Stringr=""; booleandone=false;

while(!done){ ch=System.in.read(); if(ch<0||ch==0xd)done=true; else r=r+(char)ch; } returnr;}注意publicstaticvoidmain(Stringargs[]){ Stringstr;

try{ str=readString(); }catch(IOExceptione){

("产生了输出/输出异常");

return; }

("整数是:"+Integer.parseInt(str));

}}7.2.4 throws语句(续)建议:在多人合作写程序时,一个方法中产生的异常,最好在该方法中进行处理,不要将异常传播给其他人处理。

317.3 自定义异常类

通过继承Exception类或它的子类,实现自定义异常类;对于自定义异常,必须采用throw语句抛出异常,这种类型的异常不会自行产生。总体上分为两步:

327.3 自定义异常类(续)

第1步:定义异常类。例如:classuserExceptionextendsException{

intn=0;//计数器

userException(){n++; }

userException(Strings){

super(s); n++; }

Stringshow(){return"自定义异常对象:"+n; }}337.3 自定义异常类(续)第2步:定义异常对象,并抛出该对象。

例如:34publicclasstestException{//程序7-7

staticvoidTest()throwsuserException{ userExceptione; e=newuserException("自定义异常");

throwe; }

publicstaticvoidmain(Stringargs[]){ try{ Test(); }catch(userExceptione){

System.out.println(e.show()); } }}7.4 异常处理常用调试方法

在程序中增加输出变量的信息。

例如:System.out.println("x="+x);通过this输出当前对象的状态。例如:(“对象:”+this);

用printstackTrace()输出异常对象的调用栈;用getMessage()方法获取异常信息;用getClass()和getName()获取异常类名

温馨提示

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

评论

0/150

提交评论