Java语言程序设计:JAVA-7-异常_第1页
Java语言程序设计:JAVA-7-异常_第2页
Java语言程序设计:JAVA-7-异常_第3页
Java语言程序设计:JAVA-7-异常_第4页
Java语言程序设计:JAVA-7-异常_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

异常处理异常的概念1异常:把在程序运行的过程中出现的、Java能够捕获的错误称为异常。例如:0做除数、数组越界或试图打开一个不存在的文件。2在Java语言中,异常的实质是对象。所谓程序发生了异常,其实就是指产生了异常对象。3异常的出现是为了当程序运行出现错误时,程序还能够顺利执行下去,而不是中断程序。异常处理将会改变程序的控制流程,让程序有机会对错误作出处理。异常对象可以调用如下方法得到或输出有关异常的信息:

publicStringgetMessage();publicvoidprintStackTrace();publicStringtoString();

1 PublicclassHelloWorld{2 publicstaticvoidmain(Stringargs[]){3 inti=0;4 Stringgreetings[]={“HelloWorld!”,”Hello!”,5 “HELLOWORLD!!”};6 while(i<4){7 System.out.println(greetings[i]);8 i++;9 }10 }11 }HelloWorld!Hello!HELLOWORLD!Java.lang.ArrayIndexOutOfBoundsException atHelloWorld.main(HelloWorld.java:7)Java针对各种异常定义了相应的异常类。Java.lang.Throwable是这些类的父类。ThrowableErrorExceptionVirtualMachineError...AWTErrorRuntimeException...IOExceptionEOFException...FileNotFoundExceptionArithmeticExceptionNullPointerException...IndexOutOfBoundsExceptionJava中定义的异常分为两类:

Error

很难恢复的严重错误,一般不由程序处理。

Exception

RuntimeException

程序设计或实现上的问题,如数组越界等。

其它通常是由环境因素引起的,并且可以被处理的。如文件不存在,无效URL等。Java中定义的异常

ArithmeticException0做除数。

NullPointerException

对象没有实例化。ArrayIndexOutOfBoundsException

数组越界。

IOException

输入/输出异常。

SecurityException

安全控制异常。Java中定义的异常异常处理方法1、捕获并处理异常2、将方法中产生的异常抛出Try语句块一般形式:try{ Javastatements//一条或多条可能产生异常的java语句。

}try语句后必须跟随至少一个catch或finally语句块。Catch语句块Catch语句块提供错误处理。一般格式:catch(SomeThrowableObject

variableName){Javastatements}•

SomeThrowableObject:能够被处理的异常类名,必须是throwable类的子类•

variableName:是异常处理程序中能够引用的代表被捕获异常的变量名称。•Javastatements:当捕获到异常时执行的java语句。将先前方法的状态清除,并可以将控制转移到程序的其他地方。finally语句块无论是否发生异常都要执行。Finally语句块try-catch语句

try-catch语句用来处理程序产生的异常try{//可能产生的异常代码段}catch(Exception

ae){//捕获异常,ae就是异常对象的引用

//异常处理}try语句用来启动Java的异常处理机制,对其内的程序代码进行检查。如果try语句内的代码出现异常,catch语句负责捕获,并在catch语句内做适当处理。publicclassExcep2{ publicstaticvoidmain(String[]args){

System.out.println("开始程序");

inta=1,b=0;

try{

intc=a/b;

System.out.println(c); }catch(ArithmeticException

ae){

System.out.println("不能被0除"); }

System.out.println("退出程序"); }}运行结果:开始程序不能被0除!退出程序说明:1当语句intc=a/b;出现异常时,程序立即停止执行try语句内的剩余语句,转而执行catch语句。2ArithmeticException表示同数学相关的异常类publicclassExcep3{ voidhi(){

System.out.println("Hi~~"); } publicstaticvoidmain(String[]args){ Excep3ob=null; try{

ob.hi(); }catch(NullPointerException

ne){ ob=newExcep3(); }

ob.hi();//输出

} }说明:NullPointerException是在通过对象变量来引用一个空对象时发生异常的异常类。运行结果:Hi~~publicclassExample7_4{publicstaticvoidmain(String

args[]){

intn=0,m=0,t=1000;try{m=Integer.parseInt("8888");n=Integer.parseInt("ab89");//发生异常t=7777;

}

catch(NumberFormatExceptione){

System.out.println("发生异常:"+e.getMessage());}

System.out.println("n="+n+",m="+m+",t="+t);try{System.out.println("故意抛出I/O异常!");thrownewjava.io.IOException("我是故意的!");//System.out.println("没有机会执行!");}

catch(java.io.IOExceptione){

System.out.println("发生异常:"+e.getMessage());}}}publicclassExcep4{publicstaticvoidmain(String[]args){

int[]a=newint[5]; try{ a[10]=200; }catch(ArithemticExceptione){

System.out.println(e); }catch(NullPointerExceptione){

System.out.println(e); }catch(ArrayIndexOutOfBoundsExceptione){

System.out.println(e); }finally{

System.out.println(无条件执行); } }}说明:1如果想同时处理多种异常,只需重复使用多个catch语句。2finally语句紧跟在try-catch语句之后,不论在try语句中是否发生了异常,finally语句总会被无条件的执行。运行结果:java.lang.ArrayIndexOutOfBoundsException无条件执行可抛出异常的方法1当在调用某个方法时,可能会发生异常,我们把这样的方法称为可抛出异常的方法。2可抛出异常的方法实质是指在该方法体内存在可能产生异常对象的语句或可抛出异常的方法。publicclassExcep6{staticvoidgo()throwsNegativeArraySizeException{

int[]a=newint[-1];}publicstaticvoidmain(String[]args){ try{

go(); }catch(NegativeArraySizeExceptione){

System.out.println("go()方法抛出了异常"); }}}说明:1如果一个方法的头部末尾存在“throws异常类名”的字符串,该方法就是一个可抛出异常的方法。2“throws异常类名”可以理解为将方法体中产生的异常对象抛出到该方法的调用处。运行结果:go()方法抛出了异常publicclassExcep7{ staticvoidgo()throwsNegativeArraySizeException{

int[]a=newint[-1]; } staticvoidhi()throwsNegativeArraySizeException{

go(); } publicstaticvoidmain(String[]args){ try{ hi(); }catch(NegativeArraySizeExceptione){

System.out.println("捕获来自远方的异常"); } }}说明:1如果必要,异常对象可以多次抛出,但最终必须被捕获。异常类1用户可以自己定义异常类,只须继承Exception类即可;然后规定哪些方法产生这样的异常。2如果用户想抛出用户自定义的异常类对象,应使用”throw”关键字;3如果想抛出自定义异常对象,则一定要将所调用的方法定义为可抛出异常的方法。classMyExceptionextendsException{

MyException(String

ErrorMessage){

super(ErrorMessage); }}publicclassExcep11{ staticint

avg(int

a,intb)throwsMyException{

if(a<0||b<0)//op1为false时才计算op2

thrownewMyException("负值不可"); elseif(a>100||b>100)

thrownewMyException("数值过大"); return(a+b)/2;}publicstaticvoidmain(String[]args){ try{System.out.println(avg(-10,20));}catch(MyExceptione){

System.out.println(e);//}}}运行结果:MyException:负值不可例如银行应用程序,一个整数代表收入,一个整数代表支出时,这两个整数不允许同号做求和运算。Bank类中有一个income(int

in,intout)方法,对象调用该方法时,必须向参数in传递正整数、向参数out传递负数,并且int+out必须大于等于0,否则该方法就抛出异常(BankException.java

)。因此,Bank类在声明income(int

in,intout)方法时,使用throws关键字声明要产生的异常。classBankExceptionextendsException{Stringmessage;publicBankException(int

m,intn){message="入账资金"+m+"是负数或支出"+n+"是正数,不符合系统要求.";}publicStringwarnMess(){returnmessage;}}classBank{privateintmoney;publicvoidincome(int

in,intout)throwsBankException{

if(in<=0||out>=0||in+out<=0){thrownewBankException(in,out);//方法抛出异常,导致方法结束

}

int

netIncome=in+out;

System.out.printf("本次计算出的纯收入是:%d元\n",netIncome);money=money+netIncome;}publicint

getMoney(){returnmoney;}}publicclassExample7_5{publicstaticvoidmain(String

args[]){Bankbank=newBank();try{bank.income(200,-100);bank.income(300,-100);bank.income(400,-100);

Syste

温馨提示

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

评论

0/150

提交评论