资源描述:
《java程序设计基础 第4章 异常处理和常用系统类》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章异常处理和常用系统类4.1异常处理机制4.2String类和StringBuffer类4.3AWT4.4Javaapplet4.1异常处理机制4.1.1什么是异常用任何一种计算机语言设计的程序在运行时都可能出现各种错误,常见的错误如除数为0、文件不存在、文件不能打开、数组下标超过界限、内存不够用等。对于这种在运行中出现的错误,计算机系统中通常有两种处理办法。(1)由计算机系统本身直接检测程序错误,遇到错误时使程序终止运行。这种处理方法的优点是使程序设计比较简单。但是,对程序错误一概地采用终止运行办法,显然过于简单化
2、。因为有些情况下,完全可以通过其他途径保持程序继续运行。比如,由于文件名不符合要求而无法打开文件,那么,可以提示用户输入一个新的文件名,从而使程序继续往下运行。(2)由程序员在程序设计中兼顾错误检测、错误信息显示和出错处理。这种处理方法的优点是减少了中途终止程序运行的可能性。但是,要求程序员在程序设计中不仅将精力用于正常处理过程,还要精心考虑错误检测和处理,这会使程序变得复杂。并且,这类错误检测往往是多数程序中重复甚至在一个程序中多次重复。而另一方面,如果程序中某处忽略了应有的检测,又将引起程序总体结果的错误。Java采
3、用异常处理机制来处理程序运行中的错误。按照这种机制,将程序运行中的所有错误都看成一种异常,通过对语句块的检测,一个程序中所有的异常被收集起来放在程序的某一段中去处理。在Java系统中,专门设置了一个调用栈,此栈中装有指向异常处理方法的指针。在程序运行时,系统会把收集到的异常和异常处理指针所指的处理类型逐个比较,如果找到相符的类型,那么就转向相应的方法处理,如没有在调用栈中找到相应的类型指针,则终止程序运行,并显示解释信息。在Java程序中,异常一般由以下两种原因引起。(1)程序中存在非法操作,最简单的例子就是除数为0的除
4、法操作。这种原因常常是程序员出于无意或大意造成的,所以称为隐式异常。常见的隐式异常可以通过java.lang包中的Throwable类的子类Error处理。(2)程序员在程序中使用了throw语句引起的异常。这种异常是程序员出于某种考虑有意安排的,所以称为显式异常。在throw语句中,都会指出处理显式异常的对象,这些对象都是由java.lang包的类Throwable的子类Exception再派生的子类生成的,每个对象完成对某种异常的处理功能,这些对象综合起来实现各种异常处理。比如Array-IndexOutOfBoun
5、dsException子类处理数组越界异常,IOException子类处理输入输出异常,而ArithmeticException子类处理除数为0导致的算术异常等。4.1.2异常的层次结构4.1.3异常的处理4.1.4创建自己的异常4.2String类和StringBuffer类4.2.1String类1.String类的主要构造方法String类有多个构造方法,主要的有下列5个:String();String(charchars[]);String(charchars[],intstartIndex,intnumChar
6、s);String(byteascii[],inthiByte);String(byteascii[],inthiByte,intstartIndex,intnumChars);第1个构造方法生成一个空串。第2个构造方法生成一个字符数组。第3个构造方法生成一个字符串,这个字符串是从字符数组chars[]中提取的,具体讲,即从chars[]数组的startIndex位置开始提取字符,共提取numChars个字符组成一个字符串。第4个构造方法是以字节数组的形式生成一个字符串,数组中存放字符串各字符对应的ASCII码。第5个构
7、造方法也是从字节数组生成一个字符串。具体讲,就是以字节数组ascii[]的startIndex处开始,共提取numChars个字符构成字符串,如为ASCII字符,则hiByte的值为0。例4-5:importjavax.swing.*;publicclassStringConstructors{publicstaticvoidmain(Stringargs[]){charcharArray[]={'b','i','r','t','h','','d','a','y'};bytebyteArray[]={(byte)'n',
8、(byte)'e',(byte)'w',(byte)'',(byte)'y',(byte)'e',(byte)'a',(byte)'r'};StringBufferbuffer;Strings,s1,s2,s3,s4,s5,s6,s7,output;s=newString("hello");buffer=newStr