Java知识总结——异常处理
异常是在程序中导致程序中断运行的一种指令流。
异常(Exception):一般表示所有程序中的错误,所以一般在程序中将进行try…catch的处理。
异常分类
受检异常(是指在运行时受检查的异常,编译器提供红线警告的异常。)
非受检异常(是指运行时不受检查的异常,在编写代码时,编译器不提供红线警告的异常,
记住RuntimeException就行。
处理异常
try{
// 有可能发生异常的代码段
}catch(异常类型1 对象名1){
// 异常的处理操作
}catch(异常类型2 对象名2){
// 异常的处理操作
} ...
finally{
//必然执行的异常统一处理出口
// 无论是否发生异常,finally必然执行,除非程序执行退出命令:System.exit();
}
try+catch的处理流程
1、 一旦产生异常,则系统会自动产生一个异常类的实例化对象。
2、 那么,此时如果异常发生在try语句,则会自动找到匹配的catch语句执行,如果没有在try语句中,则会将异 常抛出.
3、 所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
注意:如果在try代码块中,基本数据类型和引用类型赋值输出是两种情况。
基本数据类型情况:
public class Text {
public static void main(String[] args) {
int b=hello();
System.out.println(b);
}
public static int hello(){
int a = 10;
try{
return a; //捕获异常
}catch (Exception e){
}finally {
a = 20;
}
return a;
}
}
输出结果:10
因为在hello方法中,已经定义了a=10,存储于栈中.此时try代码块进行的准备动作是新生成备份数据10,并且最后返回的也是新生成的备份数据,finall代码块中的a=20,虽然改变了a的值,也不会返回了。
引用数据类型情况
因为是引用数据类型,备份的是地址,虽然改变的finally中的值改变,但是备份的地址不变,
返回指向的还是原地址,最后输出则是finally代码块中的新的值。
异常抛出
throws主要在方法的声明上使用,表示方法中不处理异常,而交给调用处处理。
格式:返回值 方法名称()throws Exception{ }
异常是否应该抛出?
如果是因为传参导致,可以通过throws将异常抛出。