【Java基础】[异常处理]try,catch,finally

简介: 【Java基础】[异常处理]try,catch,finally

一、什么是异常处理?


我们做的程序需要有健壮性,即,程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素导致程序不能正常运行。


  异常处理(ExceptionHandling)就是一种解决这一问题的机制,当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。


二、使用if…else做异常处理


if(一切正常){


    //业务实现代码…


     }


     else{


           alert 输入不合法


           goto retry


     }


  但是“一切正常”是很抽象的,无法转换成计算机可识别的代码,于是,出现:如果程序可以顺序完成,则“一切正常”。把系统的业务实现代码放在try块中定义,所有的异常处理逻辑放在catch块中处理。


  常见语法结构:


  try{


       //业务实现代码…


}


  catch(Exception e){


     alert 输入不合法


  goto retry


      }


三、关于try catch finally    

如果执行try块的业务逻辑代码出现异常,系统会自动生成一个异常对象,该异常对象被提交给Java运行时环境,称为抛出(throw)异常。


   Java运行时环境收到异常对象,会寻找处理改异常对象的catch块,如果找到合适的catch块,则把该异常对象交给catch块处理,称为捕获(catch)异常;如果找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。


   有时,程序在try块中打开了一些物理资源(数据库连接,网络连接,磁盘文件等)这些物理资源需要被显式回收。那么,在哪里回收呢?


   在Java的垃圾回收机制?NO,Java的垃圾回收机制只能回收堆内存中对象所占内存。


   在try块中回收?NO,当某语句执行时出现异常,该语句后面的其他语句不会获得执行机会,则该语句之后的资源得不到回收语句的执行,不能被回收。


   在catch块中回收?NO,catch块完全有可能得不到执行,物理资源仍可能不能及时被回收。


   所以,finally出现了~总会被执行!


   finally块位于所有的catch块后,无论try块是否出现异常, catch块是否被执行,或try,catch块中执行了return语句,finally都会被执行!


   


try{


      //业务实现代码…


}


catch(Exception e){


    //异常处理块1


      }


Catch(Exception e){


     //异常处理块2


    }


        finally{


            //资源回收块


        }


 


四、当异常处理遇到return


通常情况下,一旦在方法里执行到return语句的地方,程序将立即结束该方法,但在异常处理中,仍会先执行完finally块中的代码,才会执行try ,catch中的return语句。所以,尽量不要在finally块中使用return或throw等导致方法终止的语句,一旦使用,将会导致try块,catch块中的return、throw语句失效,得不到执行。


   以上是对异常处理中try块,catch块,finally块的简单的介绍,在后面的博客中,会加入本人更深入的理解,敬请期待。




















相关文章
|
11天前
|
Java 编译器
探索Java中的异常处理机制
【10月更文挑战第35天】在Java的世界中,异常是程序运行过程中不可避免的一部分。本文将通过通俗易懂的语言和生动的比喻,带你了解Java中的异常处理机制,包括异常的类型、如何捕获和处理异常,以及如何在代码中有效地利用异常处理来提升程序的健壮性。让我们一起走进Java的异常世界,学习如何优雅地面对和解决问题吧!
|
11天前
|
Java 开发者
Java中的异常处理:从基础到高级
【10月更文挑战第35天】在Java的世界里,异常处理是维护程序健壮性的关键。本文将深入浅出地探讨Java的异常处理机制,从基本的try-catch语句到自定义异常类的实现,带领读者理解并掌握如何在Java中优雅地处理错误和异常。我们将通过实际代码示例,展示如何捕获、处理以及预防潜在的运行时错误,确保程序即使在面临意外情况时也能保持稳定运行。
29 7
|
10天前
|
Java 数据库连接 开发者
Java中的异常处理机制及其最佳实践####
在本文中,我们将探讨Java编程语言中的异常处理机制。通过深入分析try-catch语句、throws关键字以及自定义异常的创建与使用,我们旨在揭示如何有效地管理和响应程序运行中的错误和异常情况。此外,本文还将讨论一些最佳实践,以帮助开发者编写更加健壮和易于维护的代码。 ####
|
13天前
|
Java 数据库连接
深入浅出Java异常处理
【10月更文挑战第33天】在Java编程的海洋中,异常处理就像是救生圈,它不仅能够挽救程序于水深火热之中,还能让代码更加优雅地面对意外。本文将带你领略Java异常处理的魅力,从基础概念到高级技巧,让你的程序在遇到问题时能够从容不迫,优雅地解决问题。
|
Java
Java趣味分享:try/finally
​ 考虑以下四个测试方法,它们会输出什么? public class Test { public static void main(String[] args) { System.
821 0
|
12天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
21天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
8天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
28 9
|
11天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####
|
8天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin