⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java06_03.htm

📁 JAVA的课件
💻 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">&nbsp;&nbsp;&nbsp; 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">&nbsp;&nbsp;&nbsp; 上图中的Error类及其子类用来处理系统内部及程序运行环境的异常,一般与硬件有关,由系统直接处理,不需要程序员在程序中处理。</p>  
  
<p align="left">&nbsp;&nbsp;&nbsp; Exception及其子类是程序抛出的异常,它又可以分为两大类:运行时异常和检查型异常(也称非运行时异常)。</p>  
  
<p align="left">1、运行时异常</p>  
  
<p align="left">&nbsp;&nbsp;&nbsp;   
运行时异常大多数是由于程序设计不当而引发的错误,但这种错误要在运行期间才会发生和被发现。例如:零做除数,数组下标越界,访问空对象等等。这些错误完全可以通过改进程序加已克服,不需要对它们进行捕获。如果发生了这类异常,系统可以自己来处理。下面看个例子:</p>  
  
<p align="left">class testException{<br>  
&nbsp; public static void main(String argv[]){<br>  
&nbsp;&nbsp; int a=0, b=3,c;<br>  
&nbsp;&nbsp; c=b/a;<br>  
&nbsp;&nbsp; System.out.println(&quot;程序正常结束&quot;);<br>  
&nbsp; }<br>  
}</p>  
  
<p align="left">&nbsp;&nbsp;   
这个程序编译可以通过,但运行结果是这个样子的:</p>  
  
<p align="left">java.lang.ArithmeticException: / by zero<br>   
&nbsp;&nbsp; at testException.main(testException.java:4)<br>   
Exception in thread "main"</p>   
   
<p align="left">&nbsp;&nbsp;&nbsp; 还可以看个例子&nbsp;</p>  
  
<p align="left">class testException{<br>   
&nbsp; public static void main(String argv[]){<br>   
&nbsp;&nbsp; int array[]=new int[10];<br>   
&nbsp;&nbsp; array[10]=5;<br>  
&nbsp;&nbsp; System.out.println("程序正常结束");<br>  
&nbsp;}<br>  
}</p>  
  
<p align="left">&nbsp;&nbsp; 这个的运行结果是:</p>  
  
<p align="left">java.lang.ArrayIndexOutOfBoundsException<br>  
&nbsp;&nbsp; at testException.main(testException.java:4)<br>  
Exception in thread "main"&nbsp;</p>  
  
<p align="left">2、检查型异常</p> 
 
<p align="left">&nbsp;&nbsp;&nbsp;  
除了运行时异常外,其余的均为检查型异常,所以也称为“非运行时异常”。注意:这类异常真正的发生仍然是在运行时,不过编译器在编译时会进行检查,一旦发现某些语句使得此类异常有产生的“可能”,就强制要求用户处理这类异常,否则不能通过编译。我们来看下面这个例子:</p> 
 
<p align="left">class dealException{<br>  
&nbsp; public static void main(String argv[]){<br>  
&nbsp;&nbsp; char ch;<br>  
&nbsp;&nbsp; ch=(char)System.in.read();&nbsp; //这里打算从键盘读入一个字符<br> 
&nbsp; }&nbsp;<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">&nbsp;&nbsp;  
编译器强制程序员捕获这个异常,所以要改成下面这个样子才能通过:</p> 
 
<p align="left">import java.io.IOException;<br>  
class dealException{<br>  
&nbsp; public static void main(String argv[]){<br>  
&nbsp;&nbsp;&nbsp; char ch;<br>  
&nbsp;&nbsp;&nbsp; try{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ch=(char)System.in.read();<br> 
&nbsp;&nbsp;&nbsp; }<br> 
&nbsp;&nbsp;&nbsp; catch(IOException e){&nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("不能正常输入");<br> 
&nbsp;&nbsp;&nbsp; }<br> 
&nbsp; }&nbsp;<br> 
}</p> 
 
<p align="left">Java的基本原理就是“形式错误的代码不会运行”,这样可以最大限度地提高程序的健壮性。</p> 
 
<p align="left">3、自定义异常</p> 
 
<p align="left">&nbsp;&nbsp;&nbsp;  
如果系统定义的异常不能满足用户需要,用户也可以自己定义异常,但它们必须是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 + -