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();
}
}

输出结果为:

1
Exception in thread "main" 2
java.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(); }
}

输出结果如下:

1
2
3
5

可见,由于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();
}
}

输出结果如下:

1
2

可见,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----catch
java.lang.NullPointerException
at myProject.ExceptionTest.test(ExceptionTest.java:11)
at myProject.ExceptionTest.main(ExceptionTest.java:21)

thows,thow和try catch的区别的更多相关文章

  1. Promise.then的第二个参数与catch的区别

    1.异常捕获 getJSON("/post/1.json").then(function(post) { return getJSON(post.commentURL); }).t ...

  2. SQL Server 致程序员(容易忽略的错误)

    标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...

  3. Spring中的AOP

    什么是AOP? (以下内容来自百度百科) 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...

  4. SQL Server 容易忽略的错误

    一.概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见问题,还有一些平时收集的其它一些问题,这也是很多人容易忽视的问题,在以后收集到的问题会补充在文章末尾,欢迎关注,由于收集 ...

  5. promise第一篇-简介

    1. 创建一个promise对象 var promise = new Promise(function(resolve, reject){ //异步处理 //处理结束后调用resolve或reject ...

  6. 微信小程序开发 [03] 事件、数据绑定和传递

    1.事件绑定 在微信小程序中,事件的绑定依附于组件,当事件触发时,就会执行事件对应的处理函数. 我们回到前几章中的例子,将index页面调整为首页(app.json中调整pages数组元素的顺序),此 ...

  7. ES6之Promise用法详解

    一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...

  8. 转载SQL容易产生的错误问题

    概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见问题,还有一些平时收集的其它一些问题,这也是很多人容易忽视的问题,在以后收集到的问题会补充在文章末尾,欢迎关注,由于收集的问 ...

  9. SqlServer日常积累(三)

    1.TRUNCATE 和 DELETE TRUNCATE操作没有记录删除操作日志 主要的原因是因为 TRUNCATE 操作不会激活触发器,因为TRUNCATE操作不会记录各行删除操作的日志,所以当你需 ...

随机推荐

  1. Spark kafka flume

    Flume Flume 是一个分布式.可靠.和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,通过监控整个文件目录或者某一个特定文件,用于收集数据:同时Flume也 提供数据写到各种数据接 ...

  2. UVA11732(Trie树)

    鸣谢https://blog.csdn.net/Baoli1008/article/details/4441936,基本都是抄的代码 #pragma GCC optimize(2) #include ...

  3. LeetCode 965. 单值二叉树 (遍历二叉树)

    题目链接:https://leetcode-cn.com/problems/univalued-binary-tree/ 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树. 只有给定的树是 ...

  4. 金蝶云星空Python案例地址

    https://club.kingdee.com/forum.php?mod=viewthread&tid=1235461

  5. 使用ResXmanager实现多语言[转]

    1 多國語系 - 使用RESXMANAGER管理資源檔 1.1 前言 在實作多國語系網站時,針對靜態文字多會使用資源檔(Resource)來對應出各語系所需顯示的內容.由於資源檔可能會依照特定結構放式 ...

  6. 插入jupyter notebook代码

    <iframe src="https://nbviewer.jupyter.org/gist/gaowenxin95/53408e0f1ce268430efaad2cb1f0ca4f& ...

  7. 优化公式排版和Beamer相关知识

    做优化的同学可能会碰到排列形如 max    ******* s.t.   ***** = *        ***** > ***        ...    的格式 既要要求 max 和 s ...

  8. cmd 下sql语句及结果

    Microsoft Windows [版本 10.0.14393](c) 2016 Microsoft Corporation.保留所有权利. C:\Users\李长青>mysql -uroot ...

  9. webservice后台起调试

    https://blog.csdn.net/smile00_0/article/details/72763114

  10. 常用phpstorm快捷键

    欢迎提交你经常使用的快捷键 ctrl+j 插入活动代码提示 ctrl+alt+t 当前位置插入环绕代码 alt+insert 生成代码菜单 ctrl+q 查看代码注释 ctrl+d 复制当前行 ctr ...