您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase第三季学习笔记-异常处理
发布时间:2017-08-10 16:01:50编辑:雪饮阅读()
异常是阻止当前方法或作用域继续执行的问题,在程序中导致程序中断运行的一些指令。
异常体系结构:
一切皆对象,所以异常也是继承自object,Error是虚拟机内部异常,如内存溢出,文件异常等。Exception是受检异常,编译期。RuntimeException是非受检异常,是运行期。
try与catch关键字
在程序中出现异常,就必须进行处理,处理格式如下:
try{//可能发生异常的代码段}
catch{异常处理类型 对象}{//异常处理操作}
catch{异常处理类型 对象}{//异常处理操作}…
finally{//异常的统一出口}
异常处理过程分析
一旦产生异常,则系统会自动产生一个异常类的实例化对象。
此时如果存在了try语句,则会自动找到匹配的catch语句执行,如果没有异常处理则程序将退出,并由系统报告错误。
所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
finally关键字
在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码。
示例1:
package com.vince.hello;
public class HelloEclipse {
public static int div(int a,int b){
int result=0;
try{
//这里虽然return了,但是最后的finally照样运行
/*
因为当检测到有finally时,则先执行这个,然后才return。
*/
result=a/b;return result;
}
catch(ArithmeticException ex){ex.printStackTrace();return 0;}
finally{System.out.println("除法运算结束");}
}
public static void main(String[] args){
int a=10;
int b=0;
int flag=0;
//异常的顺序必须是从小范围到大范围,不能逆反。
try{flag=a/b;}catch(ArithmeticException ex){
//参数ex接收系统产生的异常对象
ex.printStackTrace();//输出栈中的异常信息
System.out.println("算术运算异常");
}
catch(Exception ex){
System.out.println("未知异常");
}
finally{
System.out.println("不管程序是否出现异常,此处都会运行");
}
System.out.println(flag);
div(a,b);
}
}
throw与throws关键字
throws关键字主要在方法的声明上使用,表示方法中不处理异常,而交给调用处处理。实际上对于java程序来讲,如果没有加入任何的异常处理,默认由jvm进行异常的处理操作。
throw关键字表示在程序中手动抛出一个异常,因为从异常处理机制来看,所有的异常一旦产生之后,实际上抛出的就是一个异常类的实例化对象,那么此对象也可以由throw直接抛出。
throws与throw是配合一起使用的,不能单独使用。
示例2:
package com.vince.hello;
import java.util.InputMismatchException;
import java.util.Scanner;
public class HelloEclipse {
public static int add()throws Exception{
Scanner input=new Scanner(System.in);
try{
System.out.println("请输入第一个数:");
int num1=input.nextInt();
System.out.println("请输入第二个数:");
int num2=input.nextInt();
return num1+num2;
}
catch(Exception ex){
//这种是直接扔异常
//throw ex;
//异常包装后扔
throw new Exception("加法运算失败");
//System.out.println("请输入数字");
}
finally{
System.out.println("加法运算结束");
}
}
public static void main(String[] args){
try{
System.out.println(add());
}
catch(Exception e){
e.printStackTrace();
}
}
}
总结:
异常处理语法规则:
第一,try语句不能单独存在,可以和catch,finally组成try…catch…finally、try…catch、try…finally三种结构,catch语句可以一个或多个,finally最多一个,try、catch、finally这三个关键字均不能单独使用。
第二、try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。
第三、多个catch块时候,java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。
关键字词:javase,异常处理