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. 学习postgresql spi(一)

    #include "postgres.h" #include #include "fmgr.h" #include "access/xlog.h&qu ...

  2. css实现带边框的冒泡提示框

    需求是实现这种效果, 因为内容是动态的,使用图片不是很好: 原因: 如果内容确定只是一行,可以效果图裁剪3部分,分别是两侧和中间部分,然后用backgroud插入三张图片,但是要是内容是2行就不好处理 ...

  3. ASP.NET Core SignalR 使用

    SignalR: 实时 Web 功能使服务器端代码能够即时将内容推送到客户端(包括B/S,C/S,Andriod).   SignalR最新版本为3.0(截止2020-02-28)   SignalR ...

  4. [PAT] A1021 Deepest Root

    [题目大意] 给出n个结点和n-1条边,问它们能否形成一棵n个结点的树,如果能,从中选出结点作为树根,使整棵树的高度最大.输出所有满足要求的可以作为树根的结点. [思路] 方法一:模拟. 1 连通.边 ...

  5. ssrf漏洞利用(内网探测、打redis)

    摘要:存在ssrf漏洞的站点主要利用四个协议,分别是http.file.gopher.dict协议. file协议拿来进行本地文件的读取,http协议拿来进行内网的ip扫描.端口探测,如果探测到637 ...

  6. PHP错误日志文件Warning:PHP Startup: Unable to load dynamic library...

    由于我的环境是通过源码编译安装的,安装的时候配置信息和一些其他扩展没安装或设置好: php.err文件一直有这些提示,虽然不影响服务启动,但是看着心好累啊,决定要消灭他们. 问题描述: 出现原因: 上 ...

  7. Deep Clustering Algorithms

    Deep Clustering Algorithms 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 本文研究路线:深度自编码器(Deep Autoen ...

  8. ECMAScript基本语法——⑤运算符 算数运算符

    +-*/%

  9. Vuejs中created和mounted的区别

    created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图. mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作

  10. Piggy-Bank HDU - 1114 完全背包

    #include<iostream> #include<cstring> using namespace std; const int INF=0x3f3f3f3f; ]; s ...