📄 java06_03.htm
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java程序设计</title>
</head>
<body background="Bg.gif">
<p align="center"><font size="5"><b>§6.3 异常类的层次结构</b></font></p>
<p align="left"> Java中定义了很多异常类,每个异常类都代表了一种运行错误,类中包含了该错误的信息以及处理错误的方法等内容。由Java提供的类又称为标准异常类,所有的这些异常类都是由Throwable类派生出来的。它有两个直接子类:Error和Exception,它们分别用来处理两类异常,它们又分别派生出若干子类,层次关系图如下:</p>
<p align="left"><img border="0" src="picture/java06_03_01.gif" width="417" height="243"></p>
<p align="left"> 上图中的Error类及其子类用来处理系统内部及程序运行环境的异常,一般与硬件有关,由系统直接处理,不需要程序员在程序中处理。</p>
<p align="left"> Exception及其子类是程序抛出的异常,它又可以分为两大类:运行时异常和检查型异常(也称非运行时异常)。</p>
<p align="left">1、运行时异常</p>
<p align="left">
运行时异常大多数是由于程序设计不当而引发的错误,但这种错误要在运行期间才会发生和被发现。例如:零做除数,数组下标越界,访问空对象等等。这些错误完全可以通过改进程序加已克服,不需要对它们进行捕获。如果发生了这类异常,系统可以自己来处理。下面看个例子:</p>
<p align="left">class testException{<br>
public static void main(String argv[]){<br>
int a=0, b=3,c;<br>
c=b/a;<br>
System.out.println("程序正常结束");<br>
}<br>
}</p>
<p align="left">
这个程序编译可以通过,但运行结果是这个样子的:</p>
<p align="left">java.lang.ArithmeticException: / by zero<br>
at testException.main(testException.java:4)<br>
Exception in thread "main"</p>
<p align="left"> 还可以看个例子 </p>
<p align="left">class testException{<br>
public static void main(String argv[]){<br>
int array[]=new int[10];<br>
array[10]=5;<br>
System.out.println("程序正常结束");<br>
}<br>
}</p>
<p align="left"> 这个的运行结果是:</p>
<p align="left">java.lang.ArrayIndexOutOfBoundsException<br>
at testException.main(testException.java:4)<br>
Exception in thread "main" </p>
<p align="left">2、检查型异常</p>
<p align="left">
除了运行时异常外,其余的均为检查型异常,所以也称为“非运行时异常”。注意:这类异常真正的发生仍然是在运行时,不过编译器在编译时会进行检查,一旦发现某些语句使得此类异常有产生的“可能”,就强制要求用户处理这类异常,否则不能通过编译。我们来看下面这个例子:</p>
<p align="left">class dealException{<br>
public static void main(String argv[]){<br>
char ch;<br>
ch=(char)System.in.read(); //这里打算从键盘读入一个字符<br>
} <br>
}</p>
<p align="left">编译的结果是这样的:</p>
<p align="left"><font size="2">E:\jdk1.3\example\dealException.java:4: 未报告的异常 java.io.IOException ;必须被捕获或被声明抛出<br>
ch=(char)System.in.read();<br>
</font> ^<br>
<font size="2">1 个错误</font></p>
<p align="left">
编译器强制程序员捕获这个异常,所以要改成下面这个样子才能通过:</p>
<p align="left">import java.io.IOException;<br>
class dealException{<br>
public static void main(String argv[]){<br>
char ch;<br>
try{<br>
ch=(char)System.in.read();<br>
}<br>
catch(IOException e){ <br>
System.out.println("不能正常输入");<br>
}<br>
} <br>
}</p>
<p align="left">Java的基本原理就是“形式错误的代码不会运行”,这样可以最大限度地提高程序的健壮性。</p>
<p align="left">3、自定义异常</p>
<p align="left">
如果系统定义的异常不能满足用户需要,用户也可以自己定义异常,但它们必须是Throwable的子类,我们将在稍后讨论。<br>
</p>
<p align="left"><a href="index.htm">回目录</a> <a href="java06_02.htm">上一课</a>
<a href="java06_04.htm">下一课</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -