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异常处理机制是很有意思,而不简单。

相关文章
|
Java 编译器 数据库连接
Java中的异常处理机制深度解析####
本文深入探讨了Java编程语言中异常处理机制的核心原理、类型及其最佳实践,旨在帮助开发者更好地理解和应用这一关键特性。通过实例分析,揭示了try-catch-finally结构的重要性,以及如何利用自定义异常提升代码的健壮性和可读性。文章还讨论了异常处理在大型项目中的最佳实践,为提高软件质量提供指导。 ####
|
Java 程序员 开发者
Java中的异常处理机制深度解析####
本文将深入浅出地探讨Java编程语言中异常处理的核心概念与实践策略,旨在帮助开发者更好地理解如何构建健壮的应用程序。通过剖析异常体系结构、掌握有效的异常捕获与处理技巧,以及学习最佳实践,读者能够提升代码质量,减少运行时错误,从而增强软件的稳定性和用户体验。 ####
|
Java 数据库连接 UED
java 异常处理机制
java 异常处理机制
105 1
|
监控 Java 程序员
深入理解Java中的异常处理机制
【7月更文挑战第30天】在Java的世界里,异常处理如同一位细心的守门人,时刻监控着程序的运行状态。本文将带领读者走进Java异常处理的大门,探索其设计哲学、分类体系以及最佳实践。我们将从异常的基本概念出发,逐步深入到异常类的层次结构,最后通过实际案例分析,揭示如何优雅地处理异常,确保程序的健壮性和可靠性。
104 2
|
Java 开发者 设计模式
深入理解Java中的异常处理机制
在Java编程世界中,异常处理是代码健壮性的守护神。本文将通过一个独特的视角——将异常处理比作一场戏剧演出,带你深入了解Java的异常处理机制。我们将探索不同类型的异常角色、它们如何登台表演以及我们作为导演(开发者)该如何指导这场戏。准备好,让我们揭开Java异常处理的帷幕,一探究竟。
|
Java 开发者 UED
深入理解Java中的异常处理机制
【7月更文挑战第24天】在Java的世界中,异常处理是维护程序健壮性的关键。本文将探索Java异常处理的核心概念,从基本语法到高级技巧,揭示如何优雅地管理运行时错误。我们将通过实际代码示例,展示捕获、声明和自定义异常的策略,并探讨如何在多线程环境下有效处理异常。
Java中的异常处理机制深度解析
本文旨在深入探讨Java语言中异常处理的机制,从基础概念到高级应用,全面剖析try-catch-finally语句、自定义异常以及异常链追踪等核心内容。通过实例演示和代码分析,揭示异常处理在Java程序设计中的重要性和应用技巧,帮助读者构建更为健壮和易于维护的程序。
|
Java 数据库连接 开发者
Java中的异常处理机制与最佳实践
本文旨在深入探讨Java的异常处理机制,揭示异常处理在程序设计中的重要性及其对软件质量的影响。文章将通过案例分析,阐释异常处理的最佳实践,包括自定义异常类的创建、异常链的使用以及如何避免常见的异常处理陷阱。此外,还将讨论如何利用现代Java版本的特性来优化异常处理策略,提升代码的健壮性和可读性。
|
存储 运维 前端开发
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
131 0
|
Java 编译器 程序员
Java面试题:解释Java中的异常处理机制,包括checked异常和unchecked异常的区别。
Java面试题:解释Java中的异常处理机制,包括checked异常和unchecked异常的区别。
141 0
下一篇
oss云网关配置