Java异常处理机制很有意思

简介: Java异常处理机制很有意思

前言:在网络上看到一篇《深入理解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 zero

at 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 zero

at mwq.T.main(T.java:10)


Exception in thread "main" java.lang.ArithmeticException: / by zero

at mwq.T.main(T.java:10)

bbbbbbbbbbbbbbbb

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


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

相关文章
|
1月前
|
Java 程序员
Java中的异常处理机制
【2月更文挑战第22天】在Java编程中,异常处理是一个重要的概念。它允许程序员在程序执行过程中遇到错误时,对错误进行处理,而不是让程序崩溃。本文将介绍Java中的异常处理机制,包括异常的分类、如何捕获和处理异常以及自定义异常等内容。
17 1
|
3月前
|
Java
请解释Java中的异常处理机制,并给出使用try-catch块的示例。
请解释Java中的异常处理机制,并给出使用try-catch块的示例。
|
7月前
|
Java 数据库连接
深入理解Java中的异常处理机制
在Java开发中,异常处理是一项重要的技术。它允许我们识别和处理程序运行时可能出现的错误条件,从而提高程序的稳定性和可靠性。本篇博客将深入探讨Java中的异常处理机制,并介绍如何正确地使用异常处理来编写健壮的代码。
127 0
|
18天前
|
Java 程序员 开发者
深入理解Java异常处理机制
在Java编程中,异常处理是确保程序健壮性与稳定性的重要组成部分。本文旨在深度剖析Java异常处理机制的核心概念、结构及其实际应用策略,帮助开发者更好地理解并运用异常处理来优化程序设计。我们将从Java异常体系结构入手,探讨try-catch-finally语句块的执行流程,分析自定义异常的必要性与实现方式,并通过实例演示如何有效地管理和处理异常情况。
23 3
|
2月前
|
Java 数据库连接
Java中的异常处理机制及其应用
【2月更文挑战第5天】异常处理是Java程序设计中非常重要的一部分。本文将介绍Java中的异常处理机制,包括异常的分类、捕获和处理方式。同时,还将探讨异常处理在实际开发中的应用,并给出一些实例代码。
|
2月前
|
Java 编译器 开发者
Java中的异常处理机制详解
Java中的异常处理机制详解
|
4月前
|
安全 Java 程序员
【Java 异常处理】异常处理机制,内置异常类,如何捕获异常
【Java 异常处理】异常处理机制,内置异常类,如何捕获异常
|
5月前
|
安全 Java 程序员
JAVA异常处理(三种异常处理机制)
异常是程序在编译或执行的过程中可能出现的问题,语法错误不算在异常体系提前处理异常,程序会更加安全Error: 系统级别问题、JVM退出等,代码无法控制Exception: Java.lang包下,称为异常类,它表示程序本身可以处理的问题 Runtime Exception及其子类: 运行时异常,编译阶段不会报错(如空指针,数组索引越界异常) 除Runtime Exception之外所有异常:
72 0
|
6月前
|
Java
超详细的Java异常处理机制知识整理2
超详细的Java异常处理机制知识整理2
|
6月前
|
安全 Java 编译器
超详细的Java异常处理机制知识整理1
超详细的Java异常处理机制知识整理
101 0