异常,是程序在运行期间发生的意外状况。对于程序设计者需要尽可能地预见可能发生的意外,尽可能地保证程序在各种糟糕的情况下仍可以运行。Java语言提供了成熟的异常处理机制。
Java将所有的错误封装成为一个对象,Throwable类是这个异常体系的根,它有两个子类:Error和Exception。
Error类及其子类对象代表了程序运行时Java系统内部的错误。对于Error,程序设计者无能为力,程序不能从Error恢复,因此不必处理它们,从技术上讲Error不是异常。
Java将Exception分为两类:
以下称未检查异常和已检查异常
注意:一般情况下,catch语句块只能捕获一种异常,但是Java 7 SE之后,允许catch捕获多个Exception,即当出现多个异常处理措施时,可以使用 | 符号隔开跟在catch后面。但是不允许这些异常出现继承关系。

public static int test1() {
try {
System.out.println("try block");
return 1; // 这个值会被暂存
} catch (Exception e) {
System.out.println("catch block");
return 2;
} finally {
System.out.println("finally block");
}
}
// 输出:
// try block
// finally block
// 返回: 1public static int test2() {
try {
System.out.println("try block");
return 1; // 这个值会被丢弃
} catch (Exception e) {
System.out.println("catch block");
return 2;
} finally {
System.out.println("finally block");
return 3; // 这个值会覆盖之前的return
}
}
// 输出:
// try block
// finally block
// 返回: 3 (finally中的return会覆盖try中的return)public static int test3() {
try {
System.out.println("try block");
throw new Exception();
} catch (Exception e) {
System.out.println("catch block");
return 2; // 这个值会被暂存
} finally {
System.out.println("finally block");
}
}
// 输出:
// try block
// catch block
// finally block
// 返回: 2[访问修饰符] 返回类型 方法名(参数列表) throws 异常类型1, 异常类型2, ... {
// 方法体
}public class CC {
void doStuff() throws IOException{}
}
public class CC2 extends CC{
void doStuff() throws FileNotFoundException {}
}
public class CC3 extends CC{
void doStuff() throws Exception{}
}
public class CC4 extends CC{
void doStuff(int x) throws Exception{}
}
public class CC5 extends CC{
void doStuff(){}
}