java的异常机制主要依赖于try、catch、finally、throws、throw五个关键字。
try后面添加可能发生异常的代码。catch用于捕捉发生的异常,并进行异常处理。finally是最后还会执行的(用来关闭在try打开的资源),一定会执行到的主编
。try后面可以加多个catch语句,但是只会执行一个catch,除非在catch中加入continue。
获取异常信息:
getMessage();返回该异常的详细描述字符。
printStackTrace();将该异常的跟踪栈信息输出到标准错误输出。
printStackTrace(printStream s);将该异常的跟踪栈信息输出到指定输出流。
getStackTrace();返回该异常的跟踪信息。
Checked异常和Runtime异常
所以RuntimeException及其子类的实例被称为Runtime异常,否则称为Checked异常。
Checked异常可以处理好的,没有处理好Checked异常是不会编译过的。
throws声明异常。
throws表示的是当前方法不知道如何处理异常,需要上已经调用者处理。如果main函数也不能处理该类异常,也可以使用throws抛出异常。将该异常交给JVM处理。JVM处理通常是打印跟踪异常,并终止该程序运行。throws只能用在方法声明中。子方法抛出的异常必须是父方发抛出的异常的子类或相等。
public static void main(String[] args)throws IOException
{
FileInputStream fis = new FileInputStream("a.txt");
test();
}
public static void test()throws IOException
{
FileInputStream fis = new FileInputStream("a.txt");
}
使用throw抛出异常。
当程序出现错误时,系统会自动抛出异常;此外,程序也可以自己抛出异常。此时用的是throw。
throw抛出的异常是Checked异常。throw异常要么在try语句中,要么在一个带throws什么抛出异常的方法中。
public class JavaTest {
public static void main(String[] args) {
try {
checkedEx(-1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e.getMessage());
}
}
public static void checkedEx(int a)throws Exception
{
if(a<0){
throw new Exception("CHECKED xiaoyuling");
}
}
public static void runEx(int a)
{
if(a<0){
throw new RuntimeException("RUN xiaoyuling");
}
}
}
自定义异常:
public AutoException extends Exception{
public AutoException(){}
public AutoException(String msg){
super(msg);
}
}