thows,thow和try catch的区别
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的区别的更多相关文章
- Promise.then的第二个参数与catch的区别
1.异常捕获 getJSON("/post/1.json").then(function(post) { return getJSON(post.commentURL); }).t ...
- SQL Server 致程序员(容易忽略的错误)
标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...
- Spring中的AOP
什么是AOP? (以下内容来自百度百科) 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...
- SQL Server 容易忽略的错误
一.概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见问题,还有一些平时收集的其它一些问题,这也是很多人容易忽视的问题,在以后收集到的问题会补充在文章末尾,欢迎关注,由于收集 ...
- promise第一篇-简介
1. 创建一个promise对象 var promise = new Promise(function(resolve, reject){ //异步处理 //处理结束后调用resolve或reject ...
- 微信小程序开发 [03] 事件、数据绑定和传递
1.事件绑定 在微信小程序中,事件的绑定依附于组件,当事件触发时,就会执行事件对应的处理函数. 我们回到前几章中的例子,将index页面调整为首页(app.json中调整pages数组元素的顺序),此 ...
- ES6之Promise用法详解
一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...
- 转载SQL容易产生的错误问题
概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见问题,还有一些平时收集的其它一些问题,这也是很多人容易忽视的问题,在以后收集到的问题会补充在文章末尾,欢迎关注,由于收集的问 ...
- SqlServer日常积累(三)
1.TRUNCATE 和 DELETE TRUNCATE操作没有记录删除操作日志 主要的原因是因为 TRUNCATE 操作不会激活触发器,因为TRUNCATE操作不会记录各行删除操作的日志,所以当你需 ...
随机推荐
- Qt中MySQL数据库的操作例程
数据库连接不成功时,要将libmysql.dll放到C:\Qt\Qt5.11.0\5.11.0\mingw53_32\bin和C:\Qt\Qt5.11.0\5.11.0\msvc2017_64\bin ...
- Jquery实现挂号平台首页源码
带二级导航.轮播海报.二级联动.搜索功能.Tab选项卡 按照国际惯例先放图 index.html <!DOCTYPE html> <html lang="zh-cn&quo ...
- PWA - service worker - Workbox(未完)
Get Started(开始) 只有get请求才能cache缓存吗? Create and Register a Service Worker File(创建和注册 Service Worker) B ...
- 已知float后几位,谋几位保留
设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式____. #include "common.h" #includ ...
- ACM-ICPC 2018 焦作赛区网络预赛 Give Candies 题解
ACM-ICPC 2018 焦作赛区网络预赛 Give Candies n个糖果分给n个小朋友 从1到n个小朋友依次给,每次随机给个数,至少一个,知道没有糖果为止. 问糖果的分布情况方案数. 输出方案 ...
- Spring学习笔记-Spring之旅-01
使用Spring简化JAVA开发 Spring的四种关键策略: ●基于POJO的轻量级和最小侵入式编程: ●通过依赖注入(DI)和面向接口实现松耦合: ●基于切面(AOP)和惯例进行声明式编程. ●通 ...
- Win10安装4 —— 通过BIOS进入PE
本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12369367.html 一:"BIOS"与"PE& ...
- windows批量删除同名进程
这里以删除chromedriver.exe 黑窗口执行命令:taskkill /F /IM chromedriver.exe 任务管理器发现,内存使用迅速指数下降
- Numpy | ndarray数组基本操作
搞不懂博客园表格的排版... 说明: 0 ndarray :多维数组对象 1 np :import numpy as np 2 nda :表示数组的名称 1 生成数组 函数名 描述 np.array ...
- LaTeX技巧011:LaTtex中如何产生直立体希腊字母?
%\usepackage{upgreek}\upmu \uppi