java异常处理的学习笔记
2016-04-01 20:33
459 查看
程序在执行时,如果异常没有处理,程序就会被迫终止,异常处理能使程序可以处理预期之外的结果,使程序能顺利运行。
异常可大致分为三种:系统错误、异常、运行时异常。
系统错误用Error类表示,Error描述的是内部系统错误,而这种错误一般很少发生,但一旦发生,除了通知用户以及尽量委稳妥的关闭程序外,基本没什么能做的;
异常用Exception类表示,Exception描述的是有程序和外部环境所引起的错误,这些异常能被捕获和处理,例如引用一个不存在的类,打开一个不存在的文件等;
运行时异常用RuntimeException,RuntimeException描述的是程序的设计错误,例如除数为0,数据类型错误,数组越界等。
处理异常通常有三个操作:声明(由throws引导),抛出(由throw引导),捕获(由catch引导)一个异常。
声明异常:每个方法都必须声明他可能抛出的必捡异常的类型,这称为声明异常,每个方法都可能发生异常,但免检异常是不需要声明的,而必检则必须在方法头声明
eg:
public void Method() throw Exception1,Exception2,Exception3....,ExceptionN;
抛出异常:检测到错误的程序的可以创建一个合适的异常类型的实例并抛出它,这就称为抛出一个异常
eg:
throw new ArithmeticException("Wrong Argument"):
捕获异常:在抛出一个异常后,我们可以用try-catch语句捕获和处理它,在try语句中每抛出一个异常,程序就会跳过try中后面的语句,然后开始查找处理这个异常的代码的过程,这个过程称为异常处理器;找到一个异常后直接查找处理异常的方法,从第一个catch查到最后一个catch,查到就执行,若没有catch能捕获这个异常,程序将停止。
eg;
一个通用的异常可以派生出各种异常类,如果一个异常能被父类catch捕获,那他就能被他的子类catch捕获,故catch块中捕获异常是有顺序的,如果父类的catch块是放在子类catch块前面的,将出现编译错误。
从JDK7开始能使用新的多捕获特征来简化代码,eg:
catch(Exception1 | EXception2 | Exception3 ......| ExceptionN){
}
在java.lang.Throwable类中提供了一些方法能显示异常的信息,eg:
getMessage():放回描述给异常对象的信息,例如如果除数为0,则返回/ by zero
toString():返回三个字符串的链接:异常类的全名 + ": " + getMessage()方法
printStackTrace():在控制台上打印Throwable对象和它的调用堆栈(内存,即c语言中地址)信息
异常可大致分为三种:系统错误、异常、运行时异常。
系统错误用Error类表示,Error描述的是内部系统错误,而这种错误一般很少发生,但一旦发生,除了通知用户以及尽量委稳妥的关闭程序外,基本没什么能做的;
异常用Exception类表示,Exception描述的是有程序和外部环境所引起的错误,这些异常能被捕获和处理,例如引用一个不存在的类,打开一个不存在的文件等;
运行时异常用RuntimeException,RuntimeException描述的是程序的设计错误,例如除数为0,数据类型错误,数组越界等。
处理异常通常有三个操作:声明(由throws引导),抛出(由throw引导),捕获(由catch引导)一个异常。
声明异常:每个方法都必须声明他可能抛出的必捡异常的类型,这称为声明异常,每个方法都可能发生异常,但免检异常是不需要声明的,而必检则必须在方法头声明
eg:
public void Method() throw Exception1,Exception2,Exception3....,ExceptionN;
抛出异常:检测到错误的程序的可以创建一个合适的异常类型的实例并抛出它,这就称为抛出一个异常
eg:
throw new ArithmeticException("Wrong Argument"):
捕获异常:在抛出一个异常后,我们可以用try-catch语句捕获和处理它,在try语句中每抛出一个异常,程序就会跳过try中后面的语句,然后开始查找处理这个异常的代码的过程,这个过程称为异常处理器;找到一个异常后直接查找处理异常的方法,从第一个catch查到最后一个catch,查到就执行,若没有catch能捕获这个异常,程序将停止。
eg;
try{ statements; } catch(Exception1 ex1){ handler for exception1; } catch(Exception2 ex2){ handler for exception2; } ...... catch(ExceptionN exN){ handler for exceptionN; }
一个通用的异常可以派生出各种异常类,如果一个异常能被父类catch捕获,那他就能被他的子类catch捕获,故catch块中捕获异常是有顺序的,如果父类的catch块是放在子类catch块前面的,将出现编译错误。
从JDK7开始能使用新的多捕获特征来简化代码,eg:
catch(Exception1 | EXception2 | Exception3 ......| ExceptionN){
}
在java.lang.Throwable类中提供了一些方法能显示异常的信息,eg:
getMessage():放回描述给异常对象的信息,例如如果除数为0,则返回/ by zero
toString():返回三个字符串的链接:异常类的全名 + ": " + getMessage()方法
printStackTrace():在控制台上打印Throwable对象和它的调用堆栈(内存,即c语言中地址)信息
相关文章推荐
- 【深入spring】IoC容器的实现
- java之文件
- 回归基础系列-快速排序[JAVA]
- 回归基础系列-选择排序[JAVA]
- java中getResourceAsStream(String path)与getClassLoader.getResourceAsStream(String path)
- 回归基础系列-插入排序[JAVA]
- 回归基础系列-冒泡排序-[JAVA]
- JavaEE_4_1_jsp的四个内置对象作用域
- Java使用SSLSocket通信
- MyBatis中配置Spring的事物
- 在eclipse中如何产看源码
- Java泛型入门
- Spring中属性文件properties的读取与使用
- Java 构造器之访问子类对象的实例变量
- Spring 如何读取properties文件内容
- MyEclipse、eclipse代码自动补全(联想输入)
- Java jacob调用打印机打印word文档
- Java-二进制
- Java for Web学习笔记(十八):Session(2)Session的使用
- Java 正则表达式的匹配