java中的异常 机制
我们用java编写程序时,总会遇到一些 错误,有些错误是我们程序员的错,这是我们可以改正的 ,有些错误却是我们不能控制的。好的,在java中这些叫做异常,并且有一个超类叫做Throwable,而它有两个子类 1Error 2 Exception 。Error 类对象(如动态连接错误等),由Java虚拟机生成并抛弃(通常,Java程序不对这类例外进行处理);Exception 有两类,其中类RuntimeException代表运行时由Java虚拟机生成的例外,这是我们经常遇到的,当然就是我们的错误,如算术运算例外ArithmeticException(由除0错等导致)、数组越界例外ArrayIndexOutOfBoundsException等;其它则为非运行时例外,如输入输出例外IOException等。Java编译器要求Java程序必须捕获或声明所有的非运行时例外,但对运行时例外可以不做处理。我们通常用就 是用 :try,catch,throw,throws,finally 来处理。
这几个关键字英文解释是
Throws: Lists the exceptions a method could throw.
Throw: Transfers control of the method to the exception handler.
Try: Opening exception-handling statement.
try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外
Catch: Captures the exception.
捕获 异常 catch语句可以有多个,分别处理不同类的例外
Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。
Finally: Runs its code before terminating the program.
在整个程序 结束前 执行里面 的代码
try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。
我尝试着 写了一个 异常的 程序
package netjava.txc.ExceErr;
/**
* 异常测试
* @author Administrator
*
*/
public class ExceptionTest {
//程序入口
public static void main(String args[])throws Exception{
//创建对象
ExceptionTest et =new ExceptionTest();
boolean b= et.OutofBounds();
System.out.println(b);
}
/**
* 异常
* @return
* @throws Exception
*/
public boolean OutofBounds()throws Exception{
boolean b1=true;
try{
if(!Ex()){
return b1;
}
}// 如果上一个方法 不异常 就抛出异常
catch(Exception e){
e.printStackTrace();
throw e;
}
finally{
return b1;
}
}
/**
* 出现异常的函数
* @return 异常时 为假 不出现异常时 为真
* @throws Exception
*/
public boolean Ex()throws Exception{
boolean rr = true;
try{
int ge[]= { 1,1,2,5,5,66,5,85,2,6,2,52,85,2};
int ge1[]=new int[10];
int j=0;
for(int i=0;i<ge.length;i++){
ge1[j]=ge[i];
j++;
}
return rr;
//未出现 异常
}catch(Exception e){
e.printStackTrace();
rr=false;
throw e;
}
//最后 执行
finally{
return rr;
}