异常处理机制

简介: 异常处理机制

常见异常

image.png

在编写程序时,经常要在可能出现错误的地方加上检测的代码, 如进行x/y运算时,要检测分母为0,数据为空,输入的不是数据 而是字符等。过多的if-else分支会导致程序的代码加长、臃肿, 可读性差。因此采用异常处理机制。

Java采用的异常处理机制,是将异常处理的程序代码集中在一起, 与正常的程序代码分开,使得程序简洁、优雅,并易于维护。

异常的处理方式包括两种

方式一:try-catch-finally

方式二:throws + 异常类型

异常处理机制一:try-catch-finally

Java程序的执行过程中如出现异常,会生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出 (throw)异常。

异常对象的生成

  • 由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,如果在当 前代码中没有找到相应的处理程序,就会在后台自动创建一个对应异常类的实例 对象并抛出——自动抛出
  • 由开发人员手动创建:Exception exception = new ClassCastException();——创 建好的异常对象不抛出对程序没有任何影响,和创建一个普通对象一样

异常的抛出机制

image.png

  • 如果一个方法内抛出异常,该异常对象会被抛给调用者方法中处 理。如果异常没有在调用者方法中处理,它继续被抛给这个调用 方法的上层方法。这个过程将一直继续下去,直到异常被处理。 这一过程称为捕获(catch)异常
  • 如果一个异常回到main()方法,并且main()也不处理,则程序运 行终止。
  • 程序员通常只能处理Exception,而对Error无能为力。

语法:

异常处理是通过try-catch-finally语句实现的。

try{
...... //可能产生异常的代码
}
catch( ExceptionName1 e ){
...... //当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e ){
...... //当产生ExceptionName2型异常时的处置措施
}
[ finally{
...... //无论是否发生异常,都无条件执行的语句
} ]

举例:

public class IndexOutExp {
public static void main(String[] args) {
String friends[] = { "lisa", "bily", "kessy" };
try {
for (int i = 0; i < 5; i++) {
System.out.println(friends[i]);
}
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("index err");
}
System.out.println("\nthis is the end");
}
}
程序IndexOutExp.java运行结果:java IndexOutExp
lisa
bily
kessy
index err
this is the end

相关文章
|
关系型数据库 Linux 数据库
|
XML 设计模式 存储
Java Spring IOC容器与依赖注入DI实现原理
本文主要讲解Spring IOC机制和实现过程,依赖注入DI和面向切面编程AOP是Spring框架的核心概念,几乎后续使用到Spring Boot框架的地方都有这两个概念的影子。也是Java面试的考察点,我们会结合实际的例子演示说明 。
|
监控 网络架构 负载均衡
|
6月前
|
SQL 监控 安全
网站部署Web应用防火墙(WAF)的必要性
Web应用防火墙(WAF)是专门保护Web应用的安全工具,能实时监控和过滤HTTP/HTTPS流量,防御SQL注入、XSS等攻击。它不仅是网站安全的第一道防线,也是满足《网络安全法》等合规要求的必要措施。通过阻断DDoS攻击、优化业务连续性,以及提供智能安全态势感知,WAF帮助企业在复杂网络环境中保障数据安全、维护用户信任并确保业务稳定运行。部署WAF已成为网站运营者不可或缺的安全选择。
239 0
|
Dart 前端开发 Android开发
【Flutter前端技术开发专栏】Flutter中的平台特定代码实现
【4月更文挑战第30天】Flutter旨在实现跨平台移动应用开发,但有时需针对iOS或Android编写特定代码。平台通道是关键机制,允许Dart代码与原生代码交互。通过`MethodChannel`等实现跨平台通信,然后在iOS和Android上响应调用。条件编译则在编译时决定特定平台代码。本文展示了如何在Flutter中处理平台特定功能,包括示例代码和总结。
406 0
【Flutter前端技术开发专栏】Flutter中的平台特定代码实现
|
安全 区块链 数据安全/隐私保护
ISO 认证下的 StarTower,区块链的希望之光
2024年,StarTower 成为区块链行业的希望之光,并于9月24日荣获 ISO 国际标准化组织认证,彰显其卓越实力。通过 ISO/IEC 27001、ISO 9001 和 ISO/IEC 25010 认证,StarTower 在信息安全、质量管理及软件质量方面达到极致,为用户提供安全可靠的交易环境。GDPR 合规性和 SOC 2 认证进一步保障用户隐私,使其在信息时代中脱颖而出,为行业注入新活力。
|
缓存 Kubernetes 架构师
一文搞懂 Kubernetes Limits 和 Requests
管理 Kubernetes 集群就像坐镇在大型战场前,指挥千军万马进行火拼。在我们面前有几乎压倒性的旋律和氛围来将斗士气势营造至完美境地,甚至知道从哪里开始似乎都具有挑战性,作为经验丰富的架构师,往往可能很清楚这种感觉。
942 0
|
存储 Linux 开发工具
你知道安装完Git以后要修改哪些配置吗?
你知道安装完Git以后要修改哪些配置吗?
521 0
|
SQL 存储 关系型数据库
OceanBase 4.0解读:从TPC-H性能测评看4.0与3.x差异
OceanBase 4.0解读:从TPC-H性能测评看4.0与3.x差异
915 0
OceanBase 4.0解读:从TPC-H性能测评看4.0与3.x差异
|
SQL 缓存 监控
MySQL高并发场景实战 ——凌洛
MySQL高并发场景实战 ——凌洛
1345 23
MySQL高并发场景实战  ——凌洛