JAVA 特性 异常机制

简介: 当程序抛出一个异常后,从程序中导致异常的代码处跳出,Java虚拟机检测寻找和try关键字匹配的处理该异常的catch块。如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch块,最终运行时报错。

1.异常概述:

异常:指程序在执行过程中,出现的非正常情况,最终导致JVM非正常停止。

  • Error:严重错误问题,无法处理的错误,只能事先避免,比如内存溢出。
  • Exception:称为异常类,它表示程序本身可以处理的问题,比如数组下标越界。

2.异常分类:

  • 编译时异常也称为检查异常,必须显示处理,否则程序就会发生错误,无法通过编译。
  • 运行时异常也称为非检查异常,无需显示处理,也可以和编译时异常一样处理。RuntimeException所有的类及其子类称为运行时异常,其他的异常都是编译时异常。

RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码。

非RuntimeException:编译期就必须处理的,否则程序就不能通过编译,就更不能正常运行了。

3.异常处理机制:

  • 当程序抛出一个异常后,从程序中导致异常的代码处跳出,Java虚拟机检测寻找和try关键字匹配的处理该异常的catch块。
  • 如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。
  • 如果没有找到处理该异常的catch块,最终运行时报错。

格式:

try{
  可能出现异常的代码块;
} catch(异常名 变量名){
  异常的处理代码;
}

执行流程:

  • 程序从try里面的代码开始执行
  • 出现异常,回自动生成一个异常类对象,该异常对象将提交给Java运行时系统
  • 当运行时系统接收到异常对象时,回到catch中去找匹配的异常类,找到之后会进行异常的处理
  • 执行完毕之后,程序还可以继续往下执行

异常处理可以有多个catch:

  • 每个try语句块可以伴随一个或者多个catch语句,用于处理可能产生的不同类型的异常
  • 捕获的异常类型由上至下的捕获异常类型的顺序应该是子类到父类
try{
  可能出现异常的代码;
} catch(NullPointException e){
  ......
} catch(RunException e){
  ......
} catch(Exception e){
  ......
}

子类型异常在前,父类型异常在后,这样的顺序依次捕获,否则编译不通过!!!

Finally:

  • finlly语句为异常处理提供的一个统一的出口,使得在控制流程到程序其他部分之前,能够对程序的状态作统一管理。
  • 无论try所指的程序块中是否抛出异常,finally所指定的代码都要被执行
  • 通常finally在语句中可以进行资源的释放工作,如关闭打开的文件,关闭数据库连接等
try{
  可能出现异常的代码块;
}Catch(异常名 变量名){
  异常的处理代码;
}finally{
  必须执行的代码;
}
相关文章
|
7天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
18 5
Java反射机制:解锁代码的无限可能
|
2天前
|
安全 IDE Java
Java反射Reflect机制详解
Java反射(Reflection)机制是Java语言的重要特性之一,允许程序在运行时动态地获取类的信息,并对类进行操作,如创建实例、调用方法、访问字段等。反射机制极大地提高了Java程序的灵活性和动态性,但也带来了性能和安全方面的挑战。本文将详细介绍Java反射机制的基本概念、常用操作、应用场景以及其优缺点。 ## 基本概念 ### 什么是反射 反射是一种在程序运行时动态获取类的信息,并对类进行操作的机制。通过反射,程序可以在运行时获得类的字段、方法、构造函数等信息,并可以动态调用方法、创建实例和访问字段。 ### 反射的核心类 Java反射机制主要由以下几个类和接口组成,这些类
9 2
|
7天前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
|
6天前
|
存储 缓存 安全
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
14 3
|
7天前
|
安全 Java UED
深入理解Java中的异常处理机制
【10月更文挑战第25天】在编程世界中,错误和意外是不可避免的。Java作为一种广泛使用的编程语言,其异常处理机制是确保程序健壮性和可靠性的关键。本文通过浅显易懂的语言和实际示例,引导读者了解Java异常处理的基本概念、分类以及如何有效地使用try-catch-finally语句来处理异常情况。我们将从一个简单的例子开始,逐步深入到异常处理的最佳实践,旨在帮助初学者和有经验的开发者更好地掌握这一重要技能。
14 2
|
9天前
|
Java 数据库连接 开发者
Java中的异常处理机制####
本文深入探讨了Java语言中异常处理的核心概念,通过实例解析了try-catch语句的工作原理,并讨论了finally块和throws关键字的使用场景。我们将了解如何在Java程序中有效地管理错误,提高代码的健壮性和可维护性。 ####
|
11天前
|
安全 Java 程序员
深入浅出Java中的异常处理机制
【10月更文挑战第20天】本文将带你一探Java的异常处理世界,通过浅显易懂的语言和生动的比喻,让你在轻松阅读中掌握Java异常处理的核心概念。我们将一起学习如何优雅地处理代码中不可预见的错误,确保程序的健壮性和稳定性。准备好了吗?让我们一起踏上这段旅程吧!
22 6
|
8天前
|
存储 运维 Java
💻Java零基础:深入了解Java内存机制
【10月更文挑战第18天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
21 1
|
9天前
|
存储 安全 Java
如何避免 Java 中的“ArrayStoreException”异常
在Java中,ArrayStoreException异常通常发生在尝试将不兼容的对象存储到泛型数组中时。为了避免这种异常,确保在操作数组时遵循以下几点:1. 使用泛型确保类型安全;2. 避免生类型(raw types)的使用;3. 在添加元素前进行类型检查。通过这些方法,可以有效防止 ArrayStoreException 的发生。
|
10天前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
24 2