下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Java异常是Jam提供的用于处理程序中错误 的一种机制。异常处理机制是用来处理程序错误的有效机 制,以往需要由程序员完成的程序出错情况 判别,在Java中改为由系统承担。通过系统 抛岀的异常,程序可以很容易地捕获并处理 发生的异常情况。5.1 Java异常的概念异常是指程序运行过程中出现的非正常现象.所谓错误是指在程序运行的过程中发生的一些异常事件(如: 除0溢出.数组下标越界,所要读取的文件不存在)。设计良好的程序应该在异常发生时提供处理这些错误的方法, 使得程序不会因为异常的发生而阻断或产生不可预见的结果1.抛岀异常;Java星这样规定的: 当语义限制被违反时, 将 会抛岀(throw
2、)异常.即产生一个异常事件生成一个异常 对象.并把它提交给运行系统.再由运行系统寻找相应的代 码来处理异常 一个异常对象可以由Java虚拟机来自动产生. 也可以由运行的方法生成“异常对象中包含了异常事件类型、 程序运行状态等必要信息2.处理异常:异常抛出后,运行时系统从生成异常对象的代 码开始.沿方法的调用栈逬行查找,直到找到包含相应处理 的方法代码.并把异常对象交给该方法为止.这个过程称为 捕获(catch)异常。或声明抛弃异常。Public class Test public static void main(String args( inta0=1,2,3;for(inti=0;k4;k
3、*)System.out.println(ai);public void somnMo匕hod throws SomeException i (comeConditlon()throw nowipn (;5.1 Java异常的概念5.1JavsomnMothod ():)catch厅汛星絶枪Hi异當的构ift并With幵RuntimeException:一类特殊的异常.如被0除.数组下标越界等 其产生比5.2 Java异常的分类 Exceptionjav lang ClSBNotFoundExceptlonIOBxcepeionInttirrupted ExceptionRuntineExce
4、peionArithnetxcSxoeptxon NulIP01 nterXxceptlenIndexOutOfBound sCxoepti on Kr r ay I tHlexOutObBouMlsKxception StrxnglndexOutObBoundsKxooptxonError:称为错误由Java虚拟机生成井抛岀.包括动态准接失败.虚拟机错误等.程序对其不做处理 (也处理不了)Exception:所有异常类的父类, 其子类对应了各种各样可能岀现的异常事件.一般需要用户必须显式地声明抛出或捕获J较频繁.处理麻烦.如果显式的声明或捕获将会对程序可 変性和运行效率影响很大因此由系统自动
5、检测井将它们交给妆省的 屏常处理程序(用户可不必对其处理)import java.io.*;class Except ion Demo 1public static void main( String args )Fileinput Stream fis = new FilelnputStream(Mtext*); int b;while( (b=fis.read()!-1 )Sy stem. out. print ( b ):fis.ck)se();class ExceptionDemo2public static void main( String args( ) int a - 0;Sy
6、stem.out.println( 5/a);5.2 Java异常的分类1 .Exception异常类的子类(1)RuntimeException运行时异常类(2)NoSuchMethodException方法未找到异常(3)java.awt.AWTException图形界面异常类(4)java.io.lOException输入输出异常类(5)Exception异常类的其它子类(1)RuntimeException类主要包括以下异常子类:ArithmeticException算术异常类:表示遇到了异常的算术问 题.例如被0整5.2 Java异常的分类除.ArrayStoreException数
7、组存储异常类,试图把与数组类型不 相符的值存人数组 UClassCastException类型强制转换异常类:试图把一个对象 的引用强制转换为不合适的类型“IndexOutOfBoundsException下标越界异常类:下标越界NullPointerException空指针异常类:试图使用一个空的对象 引用SecuntyException违背安全原则异常类:检测到了违反安全 的行为5.2 Java异常的分类(4) java.io.lOException类的子类有:lOException :申请I/O操作没有正常完成。EOFException:在输入操作正常结束前遇到了文件结 束符。FileN
8、otFoundException:在文件系统中,没有找到由 文件名字符串指定的文件。5.2 Java异常的分类Exception异常类的其它子类:EmptyStackException:试图访问一个空堆栈中的元素NoSuchFieldException:试图访问一个不存在的域,NoSuchMethodException:试图访问不存在的方法。ClassNotFoundException:具有指定名字的类或接口没 有被发现。CloneNotSupportedException:克隆一个没有实现CloneableS口 的类。-1llegalAccessException:试图用给岀了完整的路径信息
9、 席字符串加载一个类。InstantiationException:试图使用Class的newlnstance方法创建一个艮孑象实例。 InterruptedException:当前的线程正在等待.而另一个 线程使用了Thread的interrupt方法中断了当前线程豪5.3异常的捕获和处理 try代码段包含可能产生异常的 代码 try代码段后跟有一个或多个catch代码段,每个catch代码段声明其能处理 的一种特定类型的异常并提供 处理的方法”当异常发生时.程序会终止当 前的流程.根据获取异常的类 型去执行相应的catch代码段。” Finally段的代码无论是否发生 异常都有执行.异常处
10、理语句格式为:lry可能抛岀异常的语句 catch (异常类型e)catch(异常类型e)finally(最终处理注,父类异常的捕获语句不可以写在子类异常捕获语句的上面。I 5.3异常的捕获和处理try语句try讥旬指定啟代出诛段代出就是次捕伕并处刃例外的范隊存吹行过H屮.谆股代码可韓:会严牛幷枪出 种哎几种类叩的H用対絞.它鼠而的catchy句翌分网对 这吐舁朮傩相用的处HL如杲没仃供外产生.所有的catch代砂投郡披崎过不执行.catch话句 /Lcatch语句块中是对异常进行处理的代码.每个try语句块町以待的一个 或靠个catch诺J 用I处舛切能产牛的不同类中的异當对令A catch
11、中声明的舁就対挈(catch cSomeException e)刃装了舁常爭 件发生的f.iXl. AcatchtfHU块中町以位用这个対彖的 竺方法伙取这些简 息.債如. gotMsagM )为法.的伯P 4 prlntStackTraee()方汎.川*职柠异簾孚件发生时执行 堆栈的内界.finally语切 finallyifi句为斤忘蛀倉促供 个统 的出便得任拧制流円转到悍序的 从他郃分以前純够对程序的伏态作统 的能坪. 九论trylh捋定的程序恢叩足舍械出依外的代础邵建被执和 購忘Aftnally讷句叩可以进行资做的悄除丄件如,I5.3异常的捕获和处理擡获Some后面的语句;没右catc
12、h ( SotncExceptionl e) calch ( SomeEtcep(ion2 e ) 后面的语句;注:父类异幣的摘获谐句不可以写衽子类异常u获语句的上面.catch (SomeExceptionl e)catch ( SomeException2 e)诵句”J 2;finally .XWHHW文仟例5使用try.catch语句处理界常的过程。public class Test public static void main(String args)int n=0,m=0,t=555;try m=lnteger.parselnt(8888H);n=lnteger.parselnt(
13、abc789n); t=9999; catch(NumberFormatException e) System.out.println(发生异常:R+e.getMessage();e.printStackTracef);n=123;System.out.println(nn=n+n+01m=,t+m+,t=f,+t);例5.2使用trycatch语句处理异常的过程。运public static void main(StrinaO arg3)System.outprlntln(tf是一不异常处理的例子 S”);tryIntkiO;i/=0;catch (ArithmeticException e
14、)System.out.println(总常是:l,+e.getMessage();finallySystem.out.println(Mfinally语句被执行冷;士x|o - XJava、世呼Jova TCI这金一个聲帝力但旳f,孑j异Z by earo八】2 漕讨IK执厅Pl1IZJ例5.3多个mtch子句的异常处理。运行结果如 图所示。iublicclassTC3 public static voidmain(StringO args) tryinta=args length;昇世斤“vacTC3.j4va-J11比发主了*ll例5.4使川try.catch句处理井常的过程。Publi
15、c class Testpublic static void main(String args FilelnputStream inznull;catch(FileNotFoundExceptione)( e.printStackTrace(); catch(IOException e)System.out.println(e.getMessageO);)finally try in.close(1抛出例夕卜thrown句 throw语句格式为: v 异常对象名();程序会在throw语句处立即终止, 转向trycatch寻找异常处理方法, 不再执行throw后面的语句。下面的例子中使用了th
16、row语句主动抛出一个异常。例5.5 throw语句的使丿I运行结果如图所示。public class TC5static void throwProcess() try throw new Nu 11 Poi nterExcept ionf指针异常”);catch (NullPointerException e) System.out.printlnHn在throwProcess方法中捕获一 个e.getMassageO);2声明抛弃例外-throws子句 throws用来表明一个方法中可能抛出的各种 异常,并说明该方法会抛出异常但不捕获的 异常。如果想明确抛出一个RuntimeExcept
17、ion或 自定义异常类,就必须在方法的声明语句中 用throws子句来表明它的类型,以便通知调 用其的方法准备捕获它。这种情况一般需要两个方法来分别处理抛出 异常和处理异常。2声明抛弃例夕卜throws子句 1.抛出异常的方法在抛出异常的方法中要使用throws子句,throws子 句的格式为:v 返回值类型方法名v(参数)throws v异常 类型 2.主调用方法处理异常主调方法可以处理,也可以继续抛出,让上一级来 处理。注:重写方法需要抛出与原方法所抛出异常类型一 致异常或不抛出异常.throw e:)publictry catcJj_I斗例5.6throwsi/i句的使用,运行结果如图所
18、示。Iclass TC6static void mathod() throws IHegalAccessException System.out.println(,fn在mathod中抛出一个异常”);throw newIllegalAccessExceptionO;public static void main(String args) try mathod();x2声明抛弃例夕卜-throws子句 Java的饭外处理 机制使得例外事件. 沼着被调用的顺序往 前才找.只雯找到符 合该例外种类的例外 处理程序.rcadFMe( )method1 ( )IOF%ceptknmctbodZ ()
19、thrownIOExcepiion ()pablicmacatctSys2声明抛弃例夕卜-throws子句public class Test public tic void nuiin (String arg*() ; catch (SoraeBxception e) print9tAck7rac();publio void metbodl()throws SonwEvcepeion(Mthod2 (); public void iMtbod2 ()throws Some Exception method? () ; public void metbd3 () throveSomKxcpexo
20、n throw nw Som /oept丄 5(SomException occur in mebodJ*:SGtneKxoepti on: SomeException ocaur xn methods at Teot imt:bod3 ): X7)at f七tMthod2 at Test.mthodl (Test java:ll) at Test HMdrHT”t 9)5 4自定义异常类自定义异常类的格式:v 自定义异常名 .说明:1通过继承Exception类声明自己的异常类.2.在方法适当的位置生成自定义异常的实例,并用throw语句抛出。3在方法的声明部分用throws语句声明该方法可
21、能抛 出的异常例5.7创建自定义异常。运行结果如图所示。class MyException extends Exception private int x;MyException(int a) x=a;public String toStringO return MyException;public class TC8 static void mathod(int a) throws MyException /青明方法会抛tfj MyExceptionSystem.out.println(ftt此处引用mathod (,+a+,t)ff); if (a10)throw new MyExcept
22、ion(a);/ 主动抛出MyExceptio nSystem.out.println(ffIE常返回);public static void main(String args) trySm.out.printlnpn进入监控区,执行可能发生异常的mathod(8);mathod(20);mathod(6);可能发生异帯的程庐段Rathod It.引4一匕nathod 仝常#芒此处逍行处理费为.MyFxeejt ion2JcatchSyste1在oneMethod()方法运行正常的情况下,程序 段将输出什么?public void test() try oneMethod();System.out.printlnCconditio n 1”); catch(ArraylndexOutOfBoundsException e)System.out.println(Mcondition 2M);catch(Exception e)System.out.printinfcondition 3”);I finally System.out.printlnffinally); 异常总结 3令一个图五个关踐字先建小的.再逢大的异常別敢写的关乐2 下面的程序有何错误?public c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能食品供应链协同优化-洞察与解读
- 2026年中央机关公开遴选和公开选调公务员计算机类+综合知识训练题及答案
- 腾讯控股2026Q1财报点评:广告加速增长AI投入加码
- 生态农业模式探索-洞察与解读
- 农业机械智能化监测系统-洞察与解读
- 牙龈疼痛与口腔健康行为的关系分析-洞察与解读
- 医疗科技并购重组中的资本运作与企业价值评估-洞察与解读
- 2026年勘察设计注册土木工程师考试(水利水电工程专业知识)练习题及答案
- 生物基包装材料的开发-洞察与解读
- 中医药在免疫应答中的应用-洞察与解读
- 小学道德与法治新部编版二年级上册全册教案(2025秋)
- 2025年中国静音舱行业市场全景分析及前景机遇研判报告
- 2025年河北石家庄交通投资发展集团有限责任公司公开招聘操作类工作人员336人笔试参考题库附带答案详解
- 随车吊吊装安全知识培训课件
- 2025年北京朝阳社区工作者招聘考试笔试试题(含答案)
- 山东省青岛市即墨区2024-2025学年八年级下学期期末考试数学试卷(含部分答案)
- 超声评估胃残余量
- X片检查健康宣教
- 【TCP云运维】腾讯云运维高级工程师认证题库(附答案)
- 工伤预防知识培训课件
- 远程审方系统管理制度
评论
0/150
提交评论