Java学习笔记之异常的定义和处理
来源:互联网 发布:淘宝充300抢150的攻略 编辑:程序博客网 时间:2024/05/16 01:52
一、Java中,非正常情况分为两种:异常Exception和错误Error。
1.Error错误无法处理,Error错误一般是与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等。
2.Java将异常分为两种:Checked异常和Runtime异常
在Java中,Checked异常都是可以在编译阶段可以被处理的异常,因此Java强制程序处理所有的Checked异常,Runtime异常则无需程序编写人员处理。
3.对Checked异常处理的两种方式:①当前方法明确知道如何处理该异常,使用try...catch块来捕获异常,然后在对应的catch块中修复异常。
②当前方法不知道如何处理该异常,应该在定义该方法时声明抛出该异常。此时可以使用throws关键字声明抛出异常。
该异常将由上一级调用者处理,如果main方法也不知道如何处理异常,也可使用声明抛出异常,交给JVM处理。
JVM将跟踪栈信息打印处理啊,中止运行的程序(example:public void test() throws Exception1,Exception2 {} )。
使用throws抛出异常的一个限制:子类方法声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或相同,
子类方法声明抛出的异常不允许比父类方法声明抛出的异常多。
4.Runtime异常无需显式声明抛出,如果需要捕获Runtime异常也可使用try...catch块。
二、Java异常处理机制的语法结构:
try {
//业务逻辑
} catch(Exception e) {//(Exception e)表示该catch块用于处理该异常类及其子类的异常实例
//进行异常处理
}
1.异常抛出:当try块中的业务逻辑代码执行过程中出现异常时,系统自动生成一个异常对象,
该异常对象被提交Java运行时环境,此为抛出异常。
2.当Java运行时环境接收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,
则将该异常对象交给该catch块处理,此为捕获异常,
如果找不到捕获异常的catch块,则运行时环境终止,程序退出。
3.注意:无论程序是否包含try、catch块,当程序执行过程中出现异常时,系统总会自动生成一个异常对象,
如果没有对异常对象进行处理,运行环境终止,程序退出。
三、多catch块的执行:try块后可以跟多个catch块,方便处理不同的异常类。
程序执行过程中不同的意外情况会产生不同的异常对象,
Java运行时环境接收到异常对象后会依次与catch块中的异常类进行比较,
以决定使用哪个catch块来处理该异常。 如果try块被执行一次,则try块后只有一个catch块会被执行。
在编写异常捕获时,应该把所有父类异常的catch块排在子类异常catch块的后面(先处理小异常,再处理大异常),否则将出现编译错误。
四、对异常信息的访问:异常对象中包含的用于访问异常信息的几个方法:
getMessage():返回该异常的详细描述字符串
printStackTrace():将该异常的跟踪栈信息输出到标准错误输出
printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流
getStackTrace():返回该异常的跟踪栈信息
五、使用finally回收资源:为了保证一定能回收try块中打开的资源,异常处理机制提供了finally块。
无论try块中代码是否出现了异常,也不管哪个catch块被执行,甚至在try块中或catch块中执行了return语句,finally块总会被执行。
注意:如果异常处理代码中使用System.exit(1);语句退出虚拟机,则finally块失去执行机会。
注意:应当尽量避免在finally块中使用return或throw等导致方法终止的语句。
完整的Java异常处理语法结构:
try {
} catch(SubException e) {
//处理异常
} catch(SubException e) {
//处理异常
} finally {
//进行资源回收(数据库连接、网络连接、磁盘文件等)
}
try块出现时,catch块和finally块至少出现其中之一,也可以同时出现,finally块必须位于所有catch块之后。异常处理支持嵌套。
六、使用throw抛出异常:使用throw语句可以完成程序自行抛出异常(throw ExceptionInstance),throw语句可以单独使用,它抛出一次抛出一个异常实例。
当程序执行到出现异常时,将会中止当前的执行流,调到异常对应的catch块,使用throw抛出的异常,亦是如此。
catch和throw同时使用,可以用于完成几个方法协作处理一个异常的工作,在一个方法中进行部分处理,然后再次抛出。
异常转译:程序先捕获异常,然后抛出一个新的业务逻辑,然后新的业务异常包含了对用户的提示信息。
七、Java7中异常处理机制的新特性:多异常捕获、自动关闭资源的try块、增强的throw语句
1.多异常捕获即使用一个catch块捕获多种类型的异常,多种异常类型之间用(|)隔开,异常变量有隐式的fanal修饰
2.自动关闭资源的try块:在try关键字后紧跟一对圆括号,圆括号中可以声明、初始化一个或多个资源,try语句在该语句结束时自动关闭这些资源(这些资源实现类必须实现了 AutoCloseable或Closeable接口)。此时,try语句块相当于包含了隐式的finally块,因此可以既没有catch块和finally块。
3.从Java7开始,Java编译器会检查throw语句抛出异常的实际类型。
例子:public static void main(String[] args) throws FileNotException {//throws Exception
try {
new FileOutputStream("a.txt");
} catch(Exception ex) {
ex.printStackTrace();
throw ex;//在JAVA7以前,编译器会认为可断代码可能抛出Exception异常
}
}
- Java学习笔记之异常的定义和处理
- Java学习笔记之异常处理
- Java之异常处理学习笔记
- JAVA学习笔记之(异常与异常处理)
- Java SE学习笔记:Java的异常机制和异常的处理
- java异常处理的学习笔记
- Java学习笔记之异常、处理异常、异常抛出、自定义异常、异常链
- java 异常处理学习笔记
- java学习笔记 异常处理
- Java学习笔记(异常处理)
- 学习java异常处理笔记
- java异常处理学习笔记
- Java学习笔记--------异常处理
- 【Java学习笔记】异常处理
- 《Java异常处理》学习笔记
- Java学习笔记--异常处理
- 【Java学习笔记】异常处理
- Java Web 学习笔记之十一:RestEasy统一处理异常
- 作用域public,private,protected详解
- 这样拆墙就可以吗?
- POJ 2694 逆波兰表达式
- linux编程--fork() 与vfork() 的区别
- Java连接MYSQL数据库的连接步骤 笔记
- Java学习笔记之异常的定义和处理
- IBM面试题
- linux下用GDB调试可加载模块
- JAVA APP——密码加密后端存储
- Ubuntu系统开机后显示器提示“不能显示此视频模式,请将电脑显示输入设置为1920×1080@60Hz”
- arm嵌入式linux qt入门问答,很经典!!
- log4net 修改日志输出格式的绝对文件路径为相对文件名
- ZOJ 3223 Journey to the Center of the Earth 【二维最短路】
- OS X Mountain Lion 系统配置 Apache+mysql + php