java基础教程6-1异常

上传人:aa****6 文档编号:54725077 上传时间:2018-09-18 格式:PPT 页数:40 大小:264KB
返回 下载 相关 举报
java基础教程6-1异常_第1页
第1页 / 共40页
java基础教程6-1异常_第2页
第2页 / 共40页
java基础教程6-1异常_第3页
第3页 / 共40页
java基础教程6-1异常_第4页
第4页 / 共40页
java基础教程6-1异常_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《java基础教程6-1异常》由会员分享,可在线阅读,更多相关《java基础教程6-1异常(40页珍藏版)》请在金锄头文库上搜索。

1、例一: public class TestFor public static void main(String arg)for(int i=1, j=i+10; i5; i+)j=i*2;System.out.println(“i=“+i+“ j=“+j); ,例二、 public class TestFor public static void main(String arg)for(int i=1, j=i+10 ; i5; i+ , j=i*2)System.out.println(“i=“+i+“ j=“+j); ,例三: public class TestBreak public s

2、tatic void main(String arg) String output=“ “;int i;for(i=1;i=10;i+)if (i=5) break;output+=i+“ “;output+=“nBroke out of loop at i =“+1;System.out.println(output); ,例四: public class TestContinue public static void main(String arg) String output=“ “;int i;for(i=1;i=10;i+)if (i=5) continue;output+=i+“

3、“;output+=“nBroke out of loop at i =“+1;System.out.println(output); ,第四章 Java 的异常处理,4.1 什么是异常异常就是在程序的运行过程中所发生的异常事件,它中断指令的正常执行。没有处理错误的程序:read-file openTheFile;determine its size;allocate that much memory; closeTheFile; ,以常规方法处理错误openFiles;if (theFilesOpen) determine the lenth of the file;if (gotTheFi

4、leLength)allocate that much memory;if (gotEnoughMemory) read the file into memory;if (readFailed) errorCode=-1;else errorCode=-2;else errorCode=-3;else errorCode=-4 ;else errorCode=-5;,观察前面的程序你会发现大部分精力花在出错处理上了. 只把能够想到的错误考虑到,对以外的情况无法处理 程序可读性差 出错返回信息量太少,用异常的形式处理错误read-File; try openTheFile;determine i

5、ts size;allocate that much memory;closeTheFile;catch(fileopenFailed) dosomething; catch(sizeDetermineFailed) dosomething;catch(memoryAllocateFailed) dosomething;catch(readFailed) dosomething;catch(fileCloseFailed) dosomething; ,和传统的方法比较异常的优点:1. 把错误代码从常规代码中分离出来 2. 把错误传播给调用堆栈 3. 按错误类型和错误差别分组 4. 系统提供了对

6、于一些无法预测的错误的捕获和处理 5. 克服了传统方法的错误信息有限的问题,411 异常示例 import java.io.*; class ExceptionDemo1 public static void main( String args )FileInputStream fis = new FileInputStream( “text“ );int b;while( (b=fis.read()!=-1 )System.out.print( b );fis.close( ); /编译时异常,G:javaExceptionDemo1.java:5: unreported exception

7、 java.io.FileNotFoundException; must be caught or declared to be thrown FileInputStream fis = new FileInputStream( “text“ ); G:javaExceptionDemo1.java:7: unreported exception java.io.IOException; must be caught or declared to be thrownwhile( (b=fis.read()!=-1 ) G:javaExceptionDemo1.java:11: unreport

8、ed exception java.io.IOException; must be caught or declared to be thrownfis.close( ); 3 errors,class ExceptionDemo2 public static void main( String args )int a = 0;System.out.println( 5/a ); /运行时异常,412 异常处理机制抛出(throw)异常:在Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。生成的异常对象将传递给Java运行时系统,这一异常的产生和提交过程称为抛出(throw)

9、异常。,两种处理异常的机制: 捕获异常:当Java运行时系统得到一个异常对象时,它将会寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。 声明抛弃异常:如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常。这是一种消极的异常处理机制。,413 异常类的层次 在jdk中,每个包中都定义了异常类,而所有的异常类都直接或间接地继承于Throwable类。java中的异常类( Th

10、rowable )可分为两大类: Error Exception,Error:由Java虚拟机生成并抛出,Java程序不做处理.Runtime Exception(被0除等系统错误,数组下标超范围):由系统检测, 用户的Java 程序可不做处理,系统将它们交给缺省的异常处理程序.Exception(程序中的问题,可预知的): Java编译器要求Java程序必须捕获或声明所有的非运行时异常throw:用户自己产生异常,常见的异常 ArithmeticException ArrayIndexOutOfBandsException ArrayStoreException IOException Fi

11、leNotFoundException NullPointerException MalformedURLException NumberFormatException OutOfMemoryException,如果在使用能够产生异常的方法而没有捕获和处理,将不能通过编译,42 异常的处理java语言中有两种异常处理机制:捕获异常和声明抛弃异常。下面我们做详细介绍。421 捕获异常捕获异常是通过try-catch-finally语句实现的。,try catch( ExceptionName1 e )catch( ExceptionName2 e )finally, try 捕获异常的第一步是用

12、try选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象并抛弃。, catch每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。catch语句只需要一个形式参数指明它所能够捕获的异常类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传递给catch块。在catch块中是对异常对象进行处理的代码,与访问其它对象一样,可以访问一个异常对象的变量或调用它的方法。getMessage( )是类Throwable所提供的方法,用来得到有关异常事件的信息,类Throwable还提供了方法printStac

13、kTrace( )用来跟踪异常事件发生时执行堆栈的内容。,trycatch( FileNotFoundException e )System.out.println( e );System.out.println( “message: “+e.getMessage() );e.printStackTrace( System.out );catch( IOException e )System.out.println( e );,catch 语句的顺序:捕获异常的顺序和catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕

14、获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。, finally捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。,finally在文件处理时非常有用try 对文件进行处理的程序;catch(IOException e) /对文件异常进行处理;finally 不论是否发生异常,都关闭文件;,422 声明抛弃异常 1 声明抛弃异常如果在一个方法中生成了一个异常,但是这一方法并不确切地知道该如何对这一异常事件进行处

15、理,这时,一个方法就应该声明抛弃异常,使得异常对象可以从调用栈向后传播,直到有合适的方法捕获它为止。声明抛弃异常是在一个方法声明中的throws子句中指明的。例如:public int read () throws IOException,throws子句中同时可以指明多个异常,之间由逗号隔开。例如: public static void main(String args) throws IOException, IndexOutOfBoundsException ,注意:一个方法所声明抛弃的异常是作为这个方法与外界交互的一部分而存在的。所以,方法的调用者必须了解这些异常,并确定如何正确的处理

16、他们。,2抛出异常抛出异常就是产生异常对象的过程,首先要生成异常对象,异常或者由虚拟机生成,或者由某些类的实例生成,也可以在程序中生成。在方法中,抛出异常对象是通过throw语句实现的。例如:IOException e=new IOException();throw e ;,可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:throw new String(“want to throw“);,class ThrowsDemo1 static void procedure()System.out.println(“inside procedure“);throw new IllegalAccessException(“demo“);public static void main(String args)procedure(); ,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号