博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thows,thow和try catch的区别
阅读量:5143 次
发布时间:2019-06-13

本文共 4218 字,大约阅读时间需要 14 分钟。

1、throw是当前方法不处理这个异常,由它的上一级进行处理。并且抛出异常后将停止执行代码。

package myProject;public class ExceptionTest {    //测试throw    public void testThrow() {        try {                        int a=1/0;                    }catch(Exception e){            System.out.println("1");            throw new RuntimeException();        }finally {            System.out.println("2");        }        System.out.println("3");    }    public static void main(String[] args) {        ExceptionTest t=new ExceptionTest();        t.testThrow();    }}

输出结果为:

1Exception in thread "main" 2java.lang.RuntimeException    at myProject.ExceptionTest.testThrow(ExceptionTest.java:11)    at myProject.ExceptionTest.main(ExceptionTest.java:20)

可见,没有打印3,即throw抛出异常后,会执行finally块的代码,但不会再执行后边的代码。调用这种方法时,可以用try catch捕获并处理这个异常,并用finally块达到输出3的目的,见如下代码:

package myProject;public class ExceptionTest {    //测试throw    public void testThrow() {        try {                        int a=1/0;                    }catch(Exception e){            System.out.println("1");            throw new RuntimeException();        }finally {            System.out.println("2");        }        System.out.println("3");    }    public void test1() {        try {            testThrow();        }catch(Exception e) {            e.printStackTrace();        }finally{
       System.out.println("3");      } } public static void main(String[] args) { ExceptionTest t=new ExceptionTest(); t.test1(); }}

输出结果为:

1 2 java.lang.RuntimeException 3  at myProject.ExceptionTest.testThrow(ExceptionTest.java:11)  at myProject.ExceptionTest.test1(ExceptionTest.java:19)  at myProject.ExceptionTest.main(ExceptionTest.java:28)

 

2、try catch 是直接处理异常,执行完finally块后,接着执行代码。

package myProject;public class ExceptionTest {    //测试try catch    public void testCatch() {        try {                        int a=1/0;                    }catch(Exception e){            System.out.println("1");        }finally {            System.out.println("2");        }        System.out.println("3");    }    public void test1() {        try {            testCatch();        }catch(Exception e) {            System.out.println("4");            e.printStackTrace();        }finally {            System.out.println("5");        }    }    public static void main(String[] args) {        ExceptionTest t=new ExceptionTest();        t.test1();            }}

输出结果如下:

1235

可见,由于testCatch()已经用try catch处理了异常,那么在test1()方法中的catch块将不会执行,也就不会输出4

3、throws写在方法参数的后边,声明了该方法有可能抛出异常。如果这个方法的确有可能会抛出一个异常,那么编辑器会强制你加上这个throws,见如下代码

package myProject;public class ExceptionTest {    //测试try catch    public void testCatch() throws Exception{                int a=1/0;        }    public void test() {        try {            testCatch();        }catch(Exception e) {            System.out.println("1");        }finally {            System.out.println("2");        }    }    public static void main(String[] args) {        ExceptionTest t=new ExceptionTest();        t.test();    }}

输出结果如下:

12

可见,try catch可以捕获有带throws的方法的异常。

4、try catch 可以捕获try catch捕获的异常

见如下代码:ExceptionTest2类

package myProject;public class ExceptionTest2 {    public void trycatch() {        try {            int i=1/0;        }catch(Exception e){            System.out.println("ExceptionTest2-----catch");            e.printStackTrace();        }    }}

ExceptionTest类:

package myProject;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;public class ExceptionTest {    private static final Logger logger=LogManager.getLogger();     private ExceptionTest2 t;    public void  test() {        try {            t.trycatch();                    }catch(Exception e){                System.out.println("ExceptionTest----catch");             e.printStackTrace();        }    }    public static void main(String[] args) {        ExceptionTest test= new ExceptionTest();        test.test();            }    }

ExceptionTest类中的test()方法调用ExceptionTest2类trycatch()方法,所以test()会捕获trycatch()捕获的异常

输出结果为:

ExceptionTest----catchjava.lang.NullPointerException    at myProject.ExceptionTest.test(ExceptionTest.java:11)    at myProject.ExceptionTest.main(ExceptionTest.java:21)

 

转载于:https://www.cnblogs.com/BonnieWss/p/9225936.html

你可能感兴趣的文章
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
由级别和性格特征将程序员分类 ---看看你属于哪一种
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
OpenFire 的安装和配置
查看>>