《Java程序设计》课件-项目五:异常处理与程序健壮性_第1页
《Java程序设计》课件-项目五:异常处理与程序健壮性_第2页
《Java程序设计》课件-项目五:异常处理与程序健壮性_第3页
《Java程序设计》课件-项目五:异常处理与程序健壮性_第4页
《Java程序设计》课件-项目五:异常处理与程序健壮性_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

异常及异常的分类引入异常异常在编程中,异常是指在程序执行过程中发生的错误或意外情况,它可能导致程序的正常流程中断,异常可以是由Java虚拟机(JVM)自动抛出的,也可以由程序员自定义抛出。Java程序设计中的异常层次结构

0102CheckedException(检查异常)编译器会辅助检查做出提示,程序员必须处理。这些异常通常表示程序可能无法处理的外部条件,如I/O错误、数据库连接问题等。Java编译器要求程序必须捕获或者声明抛出这种异常UncheckedException(非检查异常)也称为运行时异常(RuntimeException),程序运行时抛出的异常,编译器不会辅助检查,这些异常通常是由程序逻辑错误导致的,如除以零、数组越界等。Java常见的异常类型方法功能描述Exception异常所有类的父类ArithmeticException算术运算异常ArrayIndexOutOfBoundsException数组越界异常NullPointerException访问null对象异常ClassNotFoundException不能加载所需类异常ClassCastException对象强制类型转换出错publicclassIndexOutBouDemo{

publicstaticvoidmain(String[]args){int[]arr1={1,2,3,4};arr1[4]=6;}}数组访问越界异常异常捕获处理引入异常处理异常处理Java程序的异常处理是通过5个关键字来实现:try、catch、finally、throw、throws。应用的是try-catch-finally语句块实现。

try-catch-finally语句块格式如下:try{……可能产生异常的代码}catch(Exceptione){//对捕获的异常进行处理的语句块}异常捕获方式

多重Catch块

每个try语句块可以跟随一个或是多个catch语句,用于处理可能产生的不同类型的异常。格式try{……可能产生异常的代码}catch(ExceptionType1e1){

//对ExceptionType1类型的异常进行处理的代码段}catch(ExceptionType2e2{

//对ExceptionType2类型的异常进行处理的代码段}

finally语句块

finally语句块是可选的,是定义了一种强制的、无条件执行的语句,也就是无论是否发生异常都一定会执行的代码段,也可以不写finally语句块。格式try{……可能产生异常的代码}catch(ExceptionType1e1){//对ExceptionType1类型的异常进行处理的代码段}catch(ExceptionType2e2{//对ExceptionType2类型的异常进行处理的代码段}finally{//一定会执行的代码}importjava.util.Scanner;publicclassMuCatchDemo{publicstaticvoidmain(String[]args){System.out.println("请输入除数:");Scannerin=newScanner(System.in);try{inta=in.nextInt();System.out.println("a="+a);intb=5/a;int[]array1={1,2,3};array1[4]=99;}catch(ArithmeticExceptione){

//捕获算术运算异常System.out.println("Divideby0:"+e);}catch(ArrayIndexOutOfBoundsExceptione){

//捕获访问数组越界异常System.out.println("ArrayindexOutofBounds:"+e);}finally{System.out.println("finally!");}}}多重catch的应用printStackTrace()

该方法打印异常堆栈追踪信息,该信息包含了异常的类型,异常的原因,以及异常出现的位置,因此在开发和调试阶段,是经常用到的方法。调用语句如下:

e.printStackTrace();//e为异常类对象printStackTrace()方法publicclassSuperSubCatchDemo

{publicstaticvoidmain(String[]args){try{inta=0;intb=42/a;}catch(ArithmeticExceptione){System.out.println("GenericArithmeticExceptioncatch.");e.printStackTrace();}catch(Exceptione){System.out.println("Thisisneverreached.");}}}多重catch块子父类异常及printStackTrace()方法应用throws关键字引入throws关键字throws关键字throws关键字用于方法声明异常。在Java程序设计中定义方法时如果该方法有抛出异常的可能性,可以使用throws关键字来抛出异常,对异常的处理交给方法的调用者。throws关键字声明异常的使用格式是:[修饰符]返回值类型方法名(参数)throws

异常类名1,异常类名2.....{

//方法体}注意事项:(1)throws必须写在方法声明处。(2)throws后面抛出的异常必须是Exception或Exception的子类对象,每个异常类之间用逗号隔开。(3)方法中可能抛出多个异常对象,那么throws后面也要声明多个异常。如果抛出的异常有父子类关系,直接声明父类异常就行。(4)通过throws关键字在方法声明出可能抛出的异常类型,遵循的原则是“谁调用谁处理,调用者可以自己处理,也可以继续上抛”。publicclassThrowsDemo{

staticvoidExDemo()throwsNullPointerException{Strings=null;intindex=s.indexOf("a");System.out.println(index);}

publicstaticvoidmain(Stringargs[]){try{

ExDemo();}catch(NullPointerExceptione){System.out.println("捕获空指针异常!");}}}使用throws声明异常的示例使用throws声明在方法上NullPointerException异常调用ExDemo()方法的时捕获处理异常throw关键字引入throw关键字throw关键字除了系统自动抛出异常外,有些时候程序员可以使用throw关键字在方法中抛出指定的异常使用throw关键字抛出异常语法格式如下:thrownewExceptionType(异常原因)例:thrownewArrayindexOutOfBoundsException("该索引在数组中不存在,已超出范围”);注意事项:(1)throw关键字必须写在方法的内部(2)throw关键字后边new的对象必须是Exception的子类对象(3)throw关键字抛出指定的异常对象,我们就必须处理这个异常对象publicclassThrowDemo{

publicstaticvoidmain(Stringargs[]){

try{testAge();}catch(Exceptione){System.out.println(e.getMessage());}}

publicstaticvoidtestAge()throwsException{System.out.println("请输入年龄:");Scannerin=newScanner(System.in);intage=in.nextInt();if(age<18){thrownewException("18岁以下的用户不能登录该网址!");}else{System.out.println("欢迎登录该网站");}

}}使用throw关键字抛出异常示例自定义异常引入自定义异常自定义异常一般情况下Java本身提供的异常能够处理大多数的错误,但是有时候不够我们使用,还是需要创建自己的异常类来处理一些错误。创建自己的异常类,只需要继承Exception类并实现一些方法即可。自定义异常类格式如下:class类名extendsExcpeption{

//类体

}publicclassGenerateAgeExceptionextendsException{publicGenerateAgeException(Stringmessage){super(message);}}自定义异常类的应用创建年龄的自定义异常类importjava.util.Scanner;publicclassCustomExcpDemo{

publicstaticvoidmain(Stringargs[]){try{testAge();}catch(GenerateAgeExceptione){System.out.println(e.getMessage());}

}

publicstaticvoidtestAge()throwsGenerateAgeException{

System.out.println("请输入年龄:");Scannerin=newScanner(System.in);int

温馨提示

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

评论

0/150

提交评论