随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
一、概念:
异常是描述出错信息的对象。错误:无法程序中捕获,不能处理。异常:可捕获,可处理。
try{
//代码块
}catch(Exception e){}
在catch后面,定义一个异常变量,用来接收在try块中抛出的异常对象。然后通过e.printStackTrace()
将对象中的异常信息打印出来。
二、分类:
编译期异常:要求用户必须处理的异常,如果不处理,无法通过编译。
运行期异常:用户可以处理可以不处理,所有运行期异常都是RuntimeException 的子类。
三、异常的执行顺序:
先执行try块的内容,顺序执行,如果有异常发生,马上执行catch块的内容;
同时终止try块的其他代码,无论是否有异常,finally都会执行
代码示例:
package cn;
import java.io.FileReader;
import java.util.Properties;
public class ExceptionTest {
// throws 是方法修饰符,表示该方法有可能抛出某个异常,这时调用方就必须处理该异常。谁调用谁捕获。
public static void test() throws Exception {
Properties pro = new Properties();
pro.load(new FileReader(" "));
}
public static void main(String[] args) {
try {
int x = 0;
System.out.println("出现异常前的代码");
int y = 10 / x;
// throw new ArithmeticException(); //显示抛出异常对象,与上一句出现除零异常的代码效果一样
} catch (java.lang.NullPointerException e) {
e.printStackTrace();
System.out.println("空指针异常");
} catch (java.lang.ArithmeticException e) {// 一个try块中出现异常,就会找和最近异常类型匹配的catch块中。同时忽略其他的catch块。
// 打印异常信息
e.printStackTrace();
System.out.println("除零错误");
} catch (Exception e) {
e.printStackTrace();
System.out.println("其他异常");
} finally {// 无论是否有异常都会执行的代码块,如果在try块或catch块中有return
// 这时finally会在方法跳出前执行,finally一般用于资源清理工作,流的关闭,以及数据库的关闭
// 只有在虚拟机关闭时(System.exit(0)),finally不会执行。
System.out.println("finally内容");
}
System.out.println("异常外代码");
}
}