目录
一、Java异常简介
1、Exception和Error
2、NoClassDefFoundError 和 ClassNotFoundException 有什么区别?
二、trycatch语法
1、try语句
2、catch语句
3、finally语句
4、throws语句
5、throw语句
6、抛出异常
7、捕获异常
三、trycatch的执行顺序
四、异常处理原则
首页 Java java教程 完全掌握java异常处理机制原理和应用

完全掌握java异常处理机制原理和应用

Mar 29, 2022 pm 12:03 PM
java

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于异常处理机制的原理和应用相关问题,包括了Exception和Error、trycatch语法、trycatch执行顺序等等,希望对大家有帮助。

完全掌握java异常处理机制原理和应用

推荐学习:《java学习教程

一、Java异常简介

大家对trycatch可能并不陌生,也都使用的非常熟练了。

当程序运行过程中发生错误时,就会抛出异常,抛出异常总比终止程序来的好的多。

也可以在已知某个错误要发生时,进行trycatch操作,异常时进行某些特有操作。

1、Exception和Error

Exception和Error都继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出或捕获,它是异常处理机制的基本组成类型。

Exception是可预料的异常情况,可以获取到这种异常,并对其进行业务外的处理。

Error是不可预料的异常,error发生后,会直接导致JVM不可处理。

Exception分为检查性异常、非检查性异常。

检查性异常,必须在编写代码时,使用try catch捕获(比如:IOException异常)。

非检查性异常,编译器不会发现这个地方是否会产生一次,比如空指针异常,这种异常是在代码编写或者使用过程中通过规范可以避免发生的。比如sts的findbugs功能就可以检测到代码的空指针异常。

2、NoClassDefFoundError 和 ClassNotFoundException 有什么区别?

NoClassDefFoundError是JVM运行时通过classpath加载类时,找不到对应的类而抛出的错误。

ClassNotFoundException:如果在编译过程中可能出现此异常,在编译过程中必须将其抛出。

NoClassDefFoundError的发生场景:

  1. 类依赖的class或jar不存在
  2. 类文件存在,但是在不同的域中,简而言之,就是找不到

ClassNotFoundException的发生场景:

  1. 调用class的forName方法时,找不到指定的类
  2. ClassLoader中的findSystemClass() 方法时,找不到指定的类
public static void main(String[] args) {
    try {
        Class.forName("test");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }}
登录后复制

二、trycatch语法

1、try语句

try语句用大括号包含一段代码,该段代码可能会抛出一个或多个例外。

2、catch语句

catch语句的参数类似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。

catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。

3、finally语句

不管try中是否会抛出例外,finally语句中的代码都会执行,finally 语句块的最重要的作用应该是释放申请的资源。

4、throws语句

throws总是出现在函数头后,用来标明该方法可能抛出的异常。

5、throw语句

与throws异曲同工,只是位置不同,throw放在catch模块中,程序会在throw执行后立即终止,throw后的代码不执行了,finally除外。

6、抛出异常

public void test() throws Exception{
    throw new Exception();};
登录后复制

7、捕获异常

try{
    //代码区}catch(Exception e){
    log.error("error: {}", e);}finally{
    //最后必须执行的部分}
登录后复制

三、trycatch的执行顺序

从try中第一行代码开始执行,执行到出现异常的代码,JVM会创建一个异常对象。
判断catch是否能捕获到jvm创建的异常对象,

如果捕获到就跳到catch代码块中,不会结束程序,继续从catch中的代码逻辑;

如果捕获不到,直接打印异常信息并结束程序。

如果try中没有异常,则执行完try中代码,跳过catch,进入finally代码块。

四、异常处理原则

方法内如果抛出需要检测的异常,那么方法上必须要声明,否则必须在方法内用try-catch捕捉,否则编译失败。
如果调用了声明异常的函数,要么try-catch要么throws,否则编译失败。
什么时候catch,什么时候throws?功能内容可以解决,用catch,解决不了,用throws告诉调用者,有调用者解决。
如果一个功能抛出了多个异常,那么调用时必须有对应多个catch进行针对性的处理。

推荐学习:《java教程

以上是完全掌握java异常处理机制原理和应用的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java 中的完美数 Java 中的完美数 Aug 30, 2024 pm 04:28 PM

Java 完美数指南。这里我们讨论定义,如何在 Java 中检查完美数?,示例和代码实现。

Java 中的随机数生成器 Java 中的随机数生成器 Aug 30, 2024 pm 04:27 PM

Java 随机数生成器指南。在这里,我们通过示例讨论 Java 中的函数,并通过示例讨论两个不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。这里我们通过示例讨论简介、如何使用weka java、平台类型和优点。

Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

Java 史密斯数指南。这里我们讨论定义,如何在Java中检查史密斯号?带有代码实现的示例。

Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

在本文中,我们保留了最常被问到的 Java Spring 面试问题及其详细答案。这样你就可以顺利通过面试。

突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

Java 中的时间戳至今 Java 中的时间戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的时间戳到日期指南。这里我们还结合示例讨论了介绍以及如何在java中将时间戳转换为日期。

创造未来:面向零基础的 Java 编程 创造未来:面向零基础的 Java 编程 Oct 13, 2024 pm 01:32 PM

Java是热门编程语言,适合初学者和经验丰富的开发者学习。本教程从基础概念出发,逐步深入讲解高级主题。安装Java开发工具包后,可通过创建简单的“Hello,World!”程序实践编程。理解代码后,使用命令提示符编译并运行程序,控制台上将输出“Hello,World!”。学习Java开启了编程之旅,随着掌握程度加深,可创建更复杂的应用程序。

See all articles