Java异常处理机制很有意思

版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/43015379

前言:在网络上看到一篇《深入理解Java异常处理机制》,看完感觉自己也有一点小想法,的确在很多Java学者的眼里,异常处理机制不就是try catch finally吗,有啥好理解,很多时候,我也经常忽略这方面的内容,感觉没什么有意思的,那么我们来扎个小马步吧。


1.经过对原作者的例子改造

package mwq;public class T1 {public static void main(String[] args) {boolean b = true;try {b = tb1();} catch (ArithmeticException e) {System.out.println("main catch the value of b : " + b);b = false;throw e;} finally {System.out.println("main finally b : " + b);}}public static boolean tb1() throws ArithmeticException {boolean b = true;try {if (!tb2()) {return false;}} catch (ArithmeticException e) {System.out.println("tb1 catch the value of b : " + b);b = false;throw e;} finally {System.out.println("tb1 finally b : " + b);}return b;}@SuppressWarnings("finally")public static boolean tb2() throws ArithmeticException {boolean b = true;try {System.out.println(1 / 0);} catch (ArithmeticException e) {System.out.println("tb2 catch the value of b : " + b);b = false;throw e;} finally {System.out.println("tb2 finally b : " + b);return b;}}}
2.我自己感觉有意思的例子
package mwq;public class T {public static void main(String[] args) {try {System.out.println(1 / 0);System.out.println("ccccccccccccccccccc");} catch (ArithmeticException e) {System.out.println(1 / 0);System.out.println("aaaaaaaaaaaaaaaaaaa");} finally {System.out.println(1 / 0);System.out.println("bbbbbbbbbbbbbbbb");}}}
第一个例子就不多讲了,如果你的答案如下
tb2 catch the value of b : true
tb2 finally b : false
tb1 finally b : true
main finally b : false
那么,你就不需要你就可以不看原作者的例子了,不过可以读读他那么基础的理论知识。

对于第二个例子,在很多实际的应用中用到的很多,正常流程中,就如try语句,大多数情况下,我们很自觉的加上对应的catch语句,至少是catch Exception,那么这个是没有问题,但是很多时候,我们的catch语句中也有一些逻辑处理,并非简单的输出错误日志,假如我们在catch中再出现错误时,很多时候,catch中我们多数认为是正常的代码,于是我们不再对catch中语句进行catch捕获,那么按照上面的例子,你的答案是这样的吗?


Exception in thread "main" java.lang.ArithmeticException: / by zeroat mwq.T.main(T.java:13)

错误时代码的13行,为什么不是第10行代码的错误呢,因为finally的作用就是,无论catch有没有捕获到错误,finally都要执行,虽然代码的第10行已经抛出异常了,但是程序会先执行finally而不是将catch的错误在堆栈中打印出来,因为finally中已经出错了,程序要先把finally中的错误进行处理,然后程序将错误打印出来后,就终止了,这个时候第10行的错误也就不会输出了,假如程序是这样的
package mwq;public class T {public static void main(String[] args) {try {System.out.println(1 / 0);System.out.println("ccccccccccccccccccc");} catch (ArithmeticException e) {System.out.println(1 / 0);System.out.println("aaaaaaaaaaaaaaaaaaa");} finally {System.out.println("bbbbbbbbbbbbbbbb");}}}
那么此时你认为结果会是怎样呢,结果有两种
bbbbbbbbbbbbbbbb
Exception in thread "main" java.lang.ArithmeticException: / by zeroat mwq.T.main(T.java:10)

Exception in thread "main" java.lang.ArithmeticException: / by zeroat mwq.T.main(T.java:10)
bbbbbbbbbbbbbbbb
为什么会有两种结果呢,大多数情况下,都会先输出bbbbbbbbbbbbbbbbb,然而由于out对象也是输入输出流,JVM在进行处理的时候,少数情况下会将错误信息先打印出来,而后再将out对象的bbbbbbbbbbbbbbb输出出来,这可能是线程调度的原因,但是请小伙伴们怀疑我这种结论,因为我并没有证明是这种情况。

总结:总体而言,我感觉Java异常处理机制是很有意思,而不简单。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你如何去管理你的团队?

一下是我自己也不知道如何去回答的问题,或者只是想着这么解决,写在这里,那一天等我知道答案了再来给自己解答和完善。 作为一个团队负责人,你如何去管理的你团队,你怎么样来做开始启动你的团队,计划&#x…

2019-5-30-websocket下readyState常量

0 (CONNECTING) 正在链接中1 (OPEN) 已经链接并且可以通讯2 (CLOSING) 连接正在关闭3 (CLOSED) 连接已关闭或者没有链接成功转载于:https://www.cnblogs.com/zhangjiajun9404/p/10947697.html

Java自动注入默认_java – 自动注入与Spring

更新:2016年2月自动装配将在Spring Framework 4.3中正式支持。实现可以在这个GitHub commit看到。你不能自动安装的最终原因是Spring的DefaultListableBeanFactory.findAutowireCandidates(String,Class,DependencyDescriptor)方法的实现明确…

摘要

《秦前历史》13章 姜子牙 有一天,武王姬发问姜子牙:“我打算减轻刑罚而又能 树立我的权威,少施行一些赏赐而又能使人们从善,少颁布一些政令法规而民众又都能自觉按一定的规范行事。请问师尚父,怎样做才能实现这一点呢&…

关于ole

在word文档里,当插入一个图片或是电子表格,从而生成一个复合文档,这其中用到ole规范OLE文档:完善了早期的混合文档功能,不仅支持简单链接和嵌入,还支持在位激活、拖放等功能有一片文章你可以看看OLE概述 OL…

Uva489

Hangman Judge UVA - 489 In “Hangman Judge,” you are to write a program that judges a series of Hangman games. For each game, the answer to the puzzle is given as well as the guesses. Rules are the same as the classic game of hangman, and are given as f…

HTML5实现刮奖效果

原文:HTML5实现刮奖效果要实现刮奖效果,最重要的是要找到一种方法:当刮开上层的涂层是就能看到下层的结果。而HTML5的canvas API中有一个属性globalCompositeOperation,这个属性有多个值,而实现刮奖效果要用到的值就是destination…

Java多线程复习_Java多线程复习

一、线程的基本概念简单的说:线程就是一个程序里不同的执行路径在同一个时间点上cpu只会有一个线程在执行Java里的多线程是通过java.lang.Thread类来实现的每个线程都拥有自己独立的方法栈空间二、java线程的创建和启动第一种定义线程类实现Runnable接口Thread myTh…

HTML段落自动换行的样式设置

在HTML的P标记中,默认情况下是自动换行的。 如果你的段落是由中文字符或者英文单词组成的,这基本没什么问题。但是如果你的段落是由不间断的英文字母(浏览器会认为是一个单词)组成,则默认情况下不会换行,将…

DES加密/解密

1 /// <summary>2 /// DES加密(数据加密标准&#xff0c;速度较快&#xff0c;适用于加密大量数据的场合)3 /// </summary>4 /// <param name"EncryptString">待加密的密文</param>5 /// <param name&qu…

Spring中使用Spark连接的DataSource

在Spring中配置Spark hive-thriftserver的连接DataSource与配置其他数据源连接方式是一样的&#xff0c;如一般Oracle数据源配置&#xff0c;使用如下必须的Jar包&#xff1a;使用JDBC程序示例&#xff1a;package com.hadoop.test;import java.sql.Connection; import java.sq…

中文字符匹配java_java正则匹配HTML中a标签里的中文字符示例

java正则匹配HTML中a标签里的中文字符示例发布于 2020-8-12|复制链接摘记: 本文实例讲述了java正则匹配HTML中a标签里的中文字符。分享给大家供大家参考&#xff0c;具体如下&#xff1a;今天群里一位朋友问到了一个正则表达式的问题&#xff0c;有如下内容&#xff1a;xhtml特…

多语言制作工具(2013-01-24更新,支持VS2005、2008、2010、2012)(已开源)

前一段时间&#xff0c;制作了一个多语言资源文件制作工具&#xff0c;现在把这个工具集成到VS2005、VS2008&#xff0c;vs2010中&#xff0c;以增加VS自身资源编辑界面&#xff0c;对多资源编辑的麻烦&#xff0c;简化多语言资源文件的制作。 这个插件是和VS的项目绑定的&…

尚学人工智能课程---1、大数据和人工智能介绍

尚学人工智能课程---1、大数据和人工智能介绍 一、总结 一句话总结&#xff1a; 机器学习是什么&#xff1a;数据背后体现的客观算法&#xff1a;人在电脑上留下的大量日志可以反映人的性格和习惯 深度学习是什么&#xff1a;神经网络如果深度大于3&#xff0c;就是深度学习 神…

Flatten Binary Tree to Linked List (DFS)

Given a binary tree, flatten it to a linked list in-place. For example,Given 1/ \2 5/ \ \3 4 6The flattened tree should look like: 1\2\3\4\5\6代码&#xff1a; class Solution{ public:void flatten(TreeNode *root) {if(rootNULL) return;TreeNode* proot-…

mysql 回表查询优化_MySQL优化:如何避免回表查询?什么是索引覆盖?

转自&#xff1a;https://mp.weixin.qq.com/s?__bizMjM5ODYxMDA5OQ&mid2651962609&idx1&sn46e59691257188d33a91648640bcffa5&chksmbd2d092d8a5a803baea59510259b28f0669dbb72b6a5e90a465205e9497e5173d13e3bb51b19&mpshare1&scene1&srcid&sh…

安装 Windows 自动化 API 3.0 后,Visual Studio 2010 的运行速度更快

安装 Windows 自动化 API 3.0 后&#xff0c;Visual Studio 2010 的运行速度更快 本文适用于以下产品&#xff1a; Microsoft Visual Studio 2010如果未安装 Windows 自动化 API 3.0&#xff0c;则使用 Windows 自动化 API 的应用程序会明显降低 Microsoft Visual Studio Inte…

cocos2d-x3.2创建项目

mac&#xff1a; 1.用终端进入/Users/lixiang/Desktop/cocos2d-x-3.2/tools/cocos2d-console/bin目录执行./cocos.py。 &#xff08;出现Permission denied&#xff0c;是权限问题&#xff0c;可以先使用chmod命令获得权限&#xff0c;输入chmod ux ./cocos.py 回车&#xff0c…

使用ASP.Net WebAPI构建REST服务(一)——简单的示例

由于给予REST的Web服务非常简单易用&#xff0c;它越来越成为企业后端服务集成的首选方法。本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务。 首先创建一个Asp.Net Web应用程序&#xff08;我这里用的是Visual Studio 2013&#xff0c;它已经内置了Web AP…

网页游戏服务器配置

最近要架设一个网页游戏&#xff0c;就到硬件市场配了一台服务器&#xff0c;下面是具体的配置清单&#xff1a; Intel Xeon 5310 1.6G 1350  金士顿4GB DDR2 667(ECC FB DIMM)*2 全缓冲处理内存 680*2  主板 Intel S5000VSA 1750  硬盘 320G SATA*2 450*2   国鑫GX514…