Java语言程序设计讲义第七章.docx
《Java语言程序设计讲义第七章.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计讲义第七章.docx(8页珍藏版)》请在冰点文库上搜索。
Java语言程序设计讲义第七章
第七章异常处理
主要内容:
异常的相关概念、Java采用什么特殊机制来处理异常,以及Java是如何实现这种机制的。
7.1异常
(1)计算机系统处理异常(错误)的方法主要有:
●系统本身检测、遇到错误时,程序终止运行;
●程序员在程序设计中兼顾、检测、处理异常。
(2)Java语言中产生异常的情况主要有:
●程序中存在非法操作;
●程序员在程序中使用了throw语句引起的异常。
(3)Java语言异常处理机制
将程序运行中的所有错误都看成是一种异常,通过对语句块的检测,一个程序中所有的异常被收集起来,放在程序的某一段中处理。
(4)Java语言采用“Throw-Catch-Try”的方式来处理异常
●throw,即抛出异常,就是指程序检测到一个异常,并且移交给系统的过程;
●catch,即捕获异常,是指系统在收集异常后,根据异常类型,从调用栈查找异常处理指针,并且由此转入相应的异常处理过程;
●try就是指启动异常处理。
(5)Java引发异常的途径。
异常按照如何throw和catch而作如下分类:
●系统引发的异常。
ArrayIndexOutOfBoundsException。
●由Java引发的异常。
如:
OutOfMemoryError。
●由Java方法引发的异常。
如:
FileNotFound和IOException。
(6)Throwable类
●是java.lang包中专门用来处理异常的类。
●它有两个子类:
Error,Exception。
它们分别用来处理两组异常。
●错误类用来处理程序运行环境方面的异常。
如虚拟机错误、连接错误等。
由虚拟机抛出,Java程序不对错误处理。
●异常类处理隐式异常(如除数为0、数组下标越界等错误)和显示异常(文件或类没找到等)。
由Java程序抛出并处理。
●Java语言异常处理类的层次关系:
classjava.lang.Throwable
✧classjava.lang.Error
✓classjava.awt.AWTError
✓classjava.lang.LinkageError
classjava.lang.ClassCircularityError
classjava.lang.ClassFormatError
classjava.lang.IncompatibleClassChangeError
classjava.lang.AbstractMethodError
classjava.lang.IllegalAccessError
……
……
✓classjava.lang.VirtualMachineError
classjava.lang.InternalError
classjava.lang.OutOfMemoryError
✧classjava.lang.Exception
✓classjava.awt.AWTException
✓classjava.lang.ClassNotFoundException
✓classjava.lang.CloneNotSupportedException
✓classjava.io.IOException
classjava.io.EOFException
classjava.io.FileNotFoundException
……
✓classjava.lang.IllegalAcessException
……
✓classjava.lang.RuntimeException
classjava.lang.ArithmeticException
classjava.lang.ArrayStoreException
classjava.lang.ClassCastException
classjava.util.EmptyStackException
classjava.lang.IllegalArgumentException
classjava.lang.IndexOutOfBoundsException
classjava.lang.ArrayIndexOutOfBoundsException
classjava.lang.StringIndexOutOfBoundsException
classjava.lang.NegativeArraySizeException
classjava.util.NoSuchElementException
classjava.lang.NullPointerException
classjava.lang.SecurityException
7.2异常处理
Java语言中,由try-catch-finally语句来实现抛出异常和捕获异常的功能。
格式如下:
try{
//正常语句体
}catch(异常类1,异常对象1){
//异常处理程序体1,处理异常对象1的方法
}catch(异常类2,异常对象2){
//异常处理程序体2,处理异常对象2的方法
}……{
}finally{
//退出程序体
}
(1)抛出和捕获过程
importjava.io.*;
classExceptionDemo2{
publicstaticvoidmain(Stringargs[]){
try{
FileInputStreamfis=newFileInputStream("text");
intb;
while((b=fis.read())!
=-1){
System.out.print(b);
}
fis.close();
}
catch(FileNotFoundExceptione){
System.out.println(e);
System.out.println("message:
"+e.getMessage());
}
catch(IOExceptione){
System.out.println(e);
}
}
}
(2)finally语句
●finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。
●不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。
(3)throws语句
●在将异常向上移交给调用该方法的方法处理的情况下,要用throws语句。
即用throws语句指定方法可能抛出的异常。
●throws语句可以抛出多个异常。
●throws语句是和方法的定义结合来声明抛出异常。
格式:
方法声名throwsexceptionList;
例如:
publicintread()throwsIOException{……}
(4)throw语句(throw语句导致抛出一个异常)
●若要显示地抛出异常,可使用throw语句。
其一般语法:
IOExceptione=newIOException();
throwe;
●假设要引发的异常是IOException,附带错误提示信息“I/OerroroccuredinexceptionMethod”,则代码可以是:
thrownewIOException("I/OerroroccuredinexceptionMethod");
●对于非运行时的异常,如IOException等,程序中必须要作出处理,或者捕获,或者声明抛出。
●对于运行时的异常,如ArithmeticException,则可不做处理。
7.3异常处理实例
例1:
importjava.io.*;
importjava.util.*;
publicclassGrades{
publicstaticvoidmain(Stringargv[]){
Gradesgrades=newGrades();
grades.calculateGrades();
}
Vectornames=newVector();
Vectormarks=newVector();
publicvoidcalculateGrades(){
inti;
loadData("indata.txt");
for(i=0;iSystem.out.print(names.elementAt(i));
System.out.println("\t"+marks.elementAt(i));
}
}
publicvoidloadData(Stringfilename){
FileReaderinputFile;
Readerreader;
StreamTokenizerst;
StringaString;
intaNumber,next;
try{
inputFile=newFileReader("indata.txt");
reader=newBufferedReader(inputFile);
st=newStreamTokenizer(reader);
System.out.println("--------------------");
while((next=st.nextToken())!
=st.TT_EOF){
switch(next){
casest.TT_NUMBER:
{
aNumber=(int)st.nval;
System.out.println("------------------");
marks.addElement(newInteger(aNumber));
break;
}
default:
{
aString=st.sval;
System.out.println(aString);
names.addElement(aString);
}
}
}
inputFile.close();
}
catch(IOExceptione){
System.out.println("Readingfilehasaproblem");
}
finally{
System.out.println("Thisprogramisover.");
}
}
}