Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。
基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,
你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。
你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。
第一、在方法中用try...catch语句捕获并处理异常,catch语句可以有多个,用来匹配多个异常。例如:
public void p(int x){
try{
...
}catch(Exception e){
...
}finally{
...
}
}
...
if(....){
throw new MyException();
}
}
---------------------------------------------------------------------------------------------------------------------------------------
finally语句块会在方法执行return之前执行,
package test;
public class Test {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
System.out.println(Test.test());
}
public static boolean test(){
boolean flag = true;
System.out.println("Hello World!!!");
try{
System.out.println(1/0); //第一种情况
System.out.println(1/1); //第2种情况
flag = false;
}catch(ArithmeticException e){
System.out.println("除数为0!");
throw e;
}finally{
System.out.println("finally中的语句");
}
return flag;
}
}
执行结果:
//第一种情况
Hello World!!!
Exception in thread "main" java.lang.ArithmeticException: / by zero
at test.Test.test(Test.java:46)
at test.Test.main(Test.java:37)
除数为0!
finally中的语句
//第二种情况
Hello World!!!
1
finally中的语句
false
-----------------------------------------------------------------------------------------------------------------------------
如果每个方法都是简单的抛出异常,那么在方法调用方法的多层嵌套调用中,Java虚拟机会从出现异常的方法代码块中往回找,
直到找到处理该异常的代码块为止。然后将异常交给相应的catch语句处理。如果Java虚拟机追溯到方法调用栈最底部main()方法时,
如果仍然没有找到处理异常的代码块,将按照下面的步骤处理:
第一、调用异常的对象的printStackTrace()方法,打印方法调用栈的异常信息。
第二、如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行。
第一、try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,
throw用来抛出一个异常,在方法体内。语法格式为:throw 异常对象。
throws用来声明方法可能会抛出什么异常,在方法名后,语法格式为:throws 异常类型1,异常类型2...异常类型n。