<pre name="code" class="java">/*
时间:2014年12月17日10:42:20
功能:异常(Exception)处理及try...catch(成对出现)
异常:能处理的尽量处理,不能处理的一定要抛出
Notice:throw 和 throws 的区别
*/
import java.io.*;
public class TestEX {
public static void main(String[] args) {
int [] arr = {0, 1, 2}; //数组(下标从0开始)
// System.out.println(arr[4]); //Exception(数组下标越界异常)
System.out.println(arr[2]); //OK
try {
System.out.println(arr[4]);
} catch(ArrayIndexOutOfBoundsException aie) {
System.out.println("系统正在维护,请与管理员联系");
aie.printStackTrace(); //打印栈路径(注意大小写,否则会出错的)
}
// TestEX te = new TestEX();
// te.m(0);
/*输出结果:
系统正在维护,请与管理员联系
java.lang.ArrayIndexOutOfBoundsException: 4
at TestEX.main(TestEX.java:15)
*/
try { //此处可用可不用
new TestEX().m(0);
} catch(ArithmeticException ae) {
ae.printStackTrace();
System.out.println("出错了");
}
try { //本段语句可能抛出多个异常,一个try可以和多个catch联用(个人觉得有点类似switch...case)
FileInputStream in = null;
in = new FileInputStream("MyFile.txt");
int b;
b = in.read();
while(b != 1) {
System.out.println(char b);
b = in.read();
}
} catch (FileNotFoundException e) { //抛出多个异常时注意先后顺序:(范围)先小后大(并列的话先后无所谓)
e.printStackTrace();
} catch(IOException e) {
System.out.println(e.getMessage()) //得到有关异常事件的信息
} finally { //对窗口的处理(关闭窗口)
try {
in.close();
} catch(IOException e) {
e.printStackTrace(); //跟踪异常事件发生时,执行堆栈的内容
}
}
}
void m(int i) throws ArithmeticException {
if(i == 0)
throw new ArithmeticException("被除数为0"); //相当于抛出异常
}
void f() throws FileNotFoundException, IOException { //抛后者异常即可,但严格来讲最好二者都写
FileInputStream in = new FileInputStream{"MyFile.txt"};
int b;
b = in.read();
while(b != 1) {
System.out.println(char b);
b = in.read();
}
}
}
/*
void m(int i) throws ArithmeticException { //这只是一个method,而不是class,应该写class里面
if(i == 0)
throw new ArithmeticException("被除数为0");
}*/
/***************
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at TestEX.main(TestEX.java:11)
****************/
//arithmetic:算法,算术
知识点小结:
1. Error:系统错误(不可处理)
2. Exception:可处理的异常(必须catch)
3. RuntimeException:经常出的错误(可处理可不处理)(不必catch)
throw与throws的比较(from CSDN):
1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理
异常,真正的处理异常由函数的上层调用处理。
finally:
为异常处理提供一个统一的出口,finally中的语句一定会执行,通常在其中做一些清理工作,如关闭打开的文件、删除文件等
Notice:
1、若try...catch没有产生Exception,则catch中的语句不执行。
2、重写方法时,需要抛出与原方法类型一致的异常,或不抛出异常
to be continued ...