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. Windows下Anaconda安装、换源与更新

    Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项.当你尝试pip install xxx时出现各种意外和依赖问题,那么conda就是一 ...

  2. C# WPF 时钟动画(1/2)

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF 时钟动画(1/2) 内容目录 实现效果 业务场景 编码实现 本文参考 源码下载 ...

  3. Spring学习笔记-高级装配-03

    主要内容: ●Spring profile ●条件化的bean声明 ●自动装配与歧义性 ● Spring表达式语言 本章介绍一些高级的装配技术,可实现更为高级的装配功能. 环境与profile 软件开 ...

  4. GitKraken 快速配置 SSH Key

    快速使用 GitKraken 配置SSH keys git是现在最流行的版本管理工具,应用范围非常广泛,推荐一款git的可视化工具,这款 工具特别方便 它的官方如下https://www.gitkra ...

  5. 【pattern】设计模式(1) - 单例模式

    前言 好久没写博客,强迫自己写一篇.只是总结一下自己学习的单例模式. 说明 单例模式的定义,摘自baike: 单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):“保证一个类 ...

  6. 获取redis cluster中所有节点的内存使用情况

    需求:获取redis cluster集群中所有节点的内存使用情况. ip_port=`redis-cli -h $ -p $ -a abc123 -c cluster nodes | awk '{pr ...

  7. Python第三方库requests的编码问题

    PS:这个解决方法可能很简单,但是这是平时的一些细节问题,所以有必要提醒一下! 首先代码不多,就是通过get方法去获取豆瓣首页信息,如图:但是会报UnicodeEncodeError: 'gbk' c ...

  8. Codeforces Round #615 (Div. 3) 补题记录

    第一次搞CF,结果惨不忍睹...还是太菜了 A:要用到全部的钱,所以总数必须是3的倍数,而且初始状态下任意一人的钱数不能超过总数除以3,否则没法分了 (也就这个签到算是在我能力范围之内了....) # ...

  9. (CPSCA's)CPOJC+VIJOS

    Coding Plus System Core Association 建立的Coding Plus Online Judge China 在Vijos上初步落脚,让我们拭目以待,等待暑假期间ACM1 ...

  10. windows10 node-gyp安装

    本机环境:win10,已安装vs2017,Node版本 10.13.0 1.安装node-gyp npm install -g node-gyp 2.安装完毕之后node-gyp list看一下 no ...