您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 6. 尚硅谷_佟刚_Java基础_异常处理
本章内容异常概述异常处理机制使用try…catch…finally处理异常声明抛出异常人工抛出异常创建用户自定义异常类本章内容异常概述异常处理机制使用try…catch…finally处理异常声明抛出异常人工抛出异常创建用户自定义异常类Java异常任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除数为0,数组下标越界,要读写的文件不存在等等。捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。对于这些错误,一般有两种解决方法:遇到错误就终止程序的运行。由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。Java异常Java程序运行过程中所发生的异常事件可分为两类:Error:JVM系统内部错误、资源耗尽等严重情况Exception:其它因编程错误或偶然的外在因素导致的一般性问题,例如:–空指针访问–试图读取不存在的文件–网络连接中断•异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。•Java中的异常用于处理非预期的情况,如文件没找到,网络错误,非法的参数Java异常举例(1)publicclassTest8_1{publicstaticvoidmain(String[]args){Stringfriends[]={lisa,bily,kessy};for(inti=0;i5;i++){System.out.println(friends[i]);//friends[4]?}System.out.println(\nthisistheend);}}程序Test8_1编译正确,运行结果:javaTest8_1lisabilykessyjava.lang.ArrayIndexOutOfBoundsExceptionatTest8_1.main(Test8_1.java:5)ExceptioninthreadmainJava异常举例(2)publicclassNullRef{inti=1;publicstaticvoidmain(String[]args){NullReft=newNullRef();t=null;System.out.println(t.i);}}程序NullRef.java编译正确,运行结果:javaNullRefjava.lang.NullPointerExceptionatNullRef.main(NullRef.java:6)ExceptioninthreadmainJava异常举例(3)publicclassDivideZero{intx;publicstaticvoidmain(String[]args){inty;DivideZeroc=newDivideZero();y=3/c.x;System.out.println(“programendsok!”);}}程序DivideZero.java编译正确,运行结果:javaDivideZerojava.lang.ArithmeticException:/byzeroatDivideZero.main(DivideZero.java:6)ExceptioninthreadmainJava异常类层次常见异常RuntimeException–错误的类型转换–数组下标越界–空指针访问IOExeption–从一个不存在的文件中读取数据–越过文件结尾继续读取–连接一个不存在的URL异常处理机制Java异常处理:Java采用异常处理机制,将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁,并易于维护。在编写程序时,经常要在可能出现错误的地方加上检测的代码,如进行x/y运算时,要检测分母为0,数据为空,输入的不是数据而是字符等。过多的分支会导致程序的代码加长,可读性差。因此采用异常机制。异常处理机制Java提供的是异常处理的抓抛模型。Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。如果一个方法内抛出异常,该异常会被抛到调用方法中。如果异常没有在调用方法中处理,它继续被抛给这个调用方法的调用者。这个过程将一直继续下去,直到异常被处理。这一过程称为捕获(catch)异常。如果一个异常回到main()方法,并且main()也不处理,则程序运行终止。程序员通常只能处理Exception,而对Error无能为力。本章内容异常概述异常处理机制使用try…catch…finally处理异常声明抛出异常人工抛出异常创建用户自定义异常类异常处理是通过try-catch-finally语句实现的。try{......//可能产生异常的代码}catch(ExceptionName1e){......//当产生ExceptionName1型异常时的处置措施}catch(ExceptionName2e){......//当产生ExceptionName2型异常时的处置措施}[finally{......//无条件执行的语句}]异常处理机制(3)异常处理举例(1)publicclassTest8_2{publicstaticvoidmain(String[]args){Stringfriends[]={lisa,bily,kessy};try{for(inti=0;i5;i++){System.out.println(friends[i]);}}catch(ArrayIndexOutOfBoundsExceptione){System.out.println(indexerr);}System.out.println(\nthisistheend);}}程序Test8_2运行结果:lisabilykessyindexerrthisistheend异常处理举例(2)publicclassDivideZero1{intx;publicstaticvoidmain(String[]args){inty;DivideZero1c=newDivideZero1();try{y=3/c.x;}catch(ArithmeticExceptione){System.out.println(dividebyzeroerror!);}System.out.println(programendsok!);}}程序DivideZero1运行结果:dividebyzeroerror!programendsok!捕获异常(1)try捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。catch(Exceptiontypee)在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数。可以用ArithmeticException类作为参数,也可以用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数。但不能是与ArithmeticException类无关的异常,如NullPointerException,那么,catch中的语句将不会执行。捕获异常(2)捕获异常的有关信息:与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。–getMessage()方法,用来得到有关异常事件的信息–printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。捕获异常(3)finally–捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行。–finally语句是可选的练习1•编写一个会发生异常的程序:•练习捕获和不捕获异常,程序的运行有什么不同。•练习try语句块中可能发生多个不同异常时的处理。•练习finally语句块的使用。运行时异常和编译时异常•前面但使用的异常都是RuntimeException类或是它的子类,这些类的异常的特点是:即使没有使用try和catch捕获,Java自己也能捕获,并且编译通过(但运行时会发生异常使得程序运行终止)。•如果抛出的异常是IOException类的异常,则必须捕获,否则编译错误。IOException异常处理举例(1)importjava.io.*;publicclassTest8_3{publicstaticvoidmain(String[]args){FileInputStreamin=newFileInputStream(myfile.txt);intb;b=in.read();while(b!=-1){System.out.print((char)b);b=in.read();}in.close();}}IOException异常处理举例(2)importjava.io.*;publicclassTest8_3{publicstaticvoidmain(String[]args){try{FileInputStreamin=newFileInputStream(myfile.txt);intb;b=in.read();while(b!=-1){System.out.print((char)b);b=in.read();}in.close();}catch(IOExceptione){System.out.println(e);}finally{System.out.println(It’sok!);}}}本章内容异常概述异常处理机制使用try…catch…finally处理异常声明抛出异常人工抛出异常创建用户自定义异常类声明抛出异常声明抛出异常是Java中处理异常的第二种方式–如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。–在方法声明中用throws子句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。声明抛出异常举例:publicvoidreadFile(Stringfile)throwsFileNotFoundException{……//读文件的操作可能产生FileNotFoundException类型的异常FileInputStreamfis=newFileInputStream(file);..……}声明抛出异常示例importjava.io.*;publicclassTest8_5{publicstaticvoidmain(String[]args){Test8_5t=newTest8_5();try{t.readFile();}catch(IOExceptione){}}publicvoidreadFile()throwsIOException{FileInputStreamin=newFileInputStream(myfile.txt);intb;b=in.read();while(b!=-1){System.out.print((char)b);b=in.read();}in.close();}}练习3•修改练习1中的程序,将异常的捕获处理放到main方法中。重写方法声明抛出异常的原则重写方法不能抛出比被重写方法范围更大的异常类型publicclassA{publicvoidmethodA()throwsIOException{……}}publicclassB1extendsA{publicvoidmethodA()throwsFileNotFoundException{……}}
本文标题:6. 尚硅谷_佟刚_Java基础_异常处理
链接地址:https://www.777doc.com/doc-4547219 .html