Java异常处理中try,catch,finally的各种组合用法
2015-10-11 13:00
706 查看
总结一下 java异常处理的各种方式
1.try+catch
程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句
2.try+catch+finally
程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代码。
如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句
3.try+finally
程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。
这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常
共同点:
1.在catch块和finally块中仍然可以再抛出新的异常
例如 throw new Exception("illegal invoked");
如果对于新抛出的异常没有写try的话,则要在方法后面声明抛出异常
反之,如果给catch块或finally块里的异常再套上一层try,catch的话,方法后面就不必声明异常了。
注意点:
每次执行后输出结果的顺序可能都不太相同,这是因为采用不同的流打印的结果,不必太在意
[java] view plaincopy
public class Test1 {
/**
* @param args
* @throws MyException
*/
public static void main(String[] args) {
//public static void main(String[] args) throws MyException {
// TODO Auto-generated method stub
TestException te = new TestException();
/*
* try+catch
*
try{
te.test();
}catch(MyException e){
e.printStackTrace();
}
System.out.println("after exception");
*/
/*
* try+catch+finally
*
try{
te.test();
}catch(MyException e){
e.printStackTrace();
}finally{
System.out.println("entry finally block");
}
System.out.println("after exception");
*/
/*
* try+finally
*
try{
te.test();
}finally{
System.out.println("entry finally block");
}
System.out.println("after exception");
*/
}
}
class TestException {
void test() throws MyException{
throw new MyException("illegal invoked");
}
}
class MyException extends Exception{
MyException(String msg){
super(msg);
}
}
1.try+catch
程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句
2.try+catch+finally
程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代码。
如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句
3.try+finally
程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。
这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常
共同点:
1.在catch块和finally块中仍然可以再抛出新的异常
例如 throw new Exception("illegal invoked");
如果对于新抛出的异常没有写try的话,则要在方法后面声明抛出异常
反之,如果给catch块或finally块里的异常再套上一层try,catch的话,方法后面就不必声明异常了。
注意点:
每次执行后输出结果的顺序可能都不太相同,这是因为采用不同的流打印的结果,不必太在意
[java] view plaincopy
public class Test1 {
/**
* @param args
* @throws MyException
*/
public static void main(String[] args) {
//public static void main(String[] args) throws MyException {
// TODO Auto-generated method stub
TestException te = new TestException();
/*
* try+catch
*
try{
te.test();
}catch(MyException e){
e.printStackTrace();
}
System.out.println("after exception");
*/
/*
* try+catch+finally
*
try{
te.test();
}catch(MyException e){
e.printStackTrace();
}finally{
System.out.println("entry finally block");
}
System.out.println("after exception");
*/
/*
* try+finally
*
try{
te.test();
}finally{
System.out.println("entry finally block");
}
System.out.println("after exception");
*/
}
}
class TestException {
void test() throws MyException{
throw new MyException("illegal invoked");
}
}
class MyException extends Exception{
MyException(String msg){
super(msg);
}
}
相关文章推荐
- Java基础知识强化之IO流笔记44:IO流练习之 复制图片的 4 种方式案例
- java中Math类与Random类的用法
- Java基础知识强化之IO流笔记43:IO流练习之 复制文本文件的 5 种方式案例
- Java 加解密技术系列之 SHA
- Java 加解密技术系列之 BASE64
- Eclipse正在使用Ant扑灭Android数据包错误的解决方案 – Perhaps JAVA_HOME does not point to the JDK
- Java加密解密技术系列之MD5
- java IO流学习总结
- 《编程简介(Java) ·10.3递归思想》
- Java语法糖2:自动装箱和自动拆箱
- eclipse中文乱码修改新方法,在修改了所有的utf-8都没有用就这样修改
- java 枚举
- Hadoop学问Eclipse构建Hadoop工程
- Java继承后子父类的初始化化问题
- java 格式判断
- JavaEE之JDBC编程[详解]
- Git使用教程3:MyEclipse+Egit+GitHub实现代码托管 【上】
- SVN太旧 svn: Working copy 'E:\JAVA\Workspaces\uhr' is too old (format 10,created by Subversion 1.6)
- Java语法糖1:可变长度参数以及foreach循环原理
- 浅谈Java中return和finally的问题