【java学习—十】捕获异常(2)

news/2025/1/31 6:01:53/

文章目录

  • 1. 什么是异常
  • 2. 异常处理机制
  • 3. 捕获异常总结
    • 3.1. try 和 catch
    • 3.2. 捕获异常的有关信息:
    • 3.3. finally


    

1. 什么是异常

如果程序运行时,某一行出现异常,将会使程序中断,不在继续执行,举个例子如下:

package day10;public class Test {public static void main(String[] args) {int i = 0;System.out.println(3/i);//由于异常,使中断System.out.println("ok");}
}

运行结果:

在这里插入图片描述

2. 异常处理机制

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

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

Java 提供的是异常处理的抓抛模型(抓表示捕获,抛表示抛出):
    (1)Java 程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给 Java 运行时系统,这个过程称为抛出 (throw) 异常。
    (2)如果一个方法内抛出异常,该异常会被抛到调用方法中。如果异常没有在调用方法中处理,它继续被抛给这个调用方法的调用者。这个过程将一直继续下去,直到异常被处理。这一过程称为捕获(catch) 异常。
    (3)如果一个异常回到 main() 方法,并且 main() 也不处理,则程序运行终止。
    (4)程序员通常只能处理 Exception ,而对 Error 无能为力。

对上面运行异的常代码进行异常处理机制:

package day10;public class Test {public static void main(String[] args) {int i = 0;try {//用try{}来括住一段有可能出现异常的代码段System.out.println(3/i);//由于异常,使中断,可以通过异常处理机制防止程序的中断}catch(Exception e) {//当不知道捕获的是什么类型的异常时,可以直接使用所有异常的父类Exceptione.printStackTrace();//catch的{}中如果什么都不写,就不会显示错误提示信息System.out.println(e.getMessage());//输出错误信息'/ by zero'}System.out.println("ok");}
}

运行结果:
在这里插入图片描述

如果catch的{ }里面什么都不写,运行结果如下:
在这里插入图片描述
异常处理是通过 try-catch-finally 语句实现的

代码样板如下:

try{...... // 可能产生异常的代码}catch(ExceptionName1 e){...... // 当产生 ExceptionName1 型异常时的处置措施}catch(ExceptionName2 e){//可以做多个catch捕获...... // 当产生 ExceptionName2 型异常时的处置措施}//finally可写可不写finally{...... // 无条件执行的语句}

举例说明:

package day10;public class Test {public static void main(String[] args) {int i = 0;try {//用try{}来括住一段有可能出现异常的代码段System.out.println(1);System.out.println(3/i);//由于异常,使中断,可以通过异常处理机制防止程序的中断System.out.println(2);}catch(Exception e) {//当不知道捕获的是什么类型的异常时,可以直接使用所有异常的父类Exception
//			e.printStackTrace();
//			System.out.println(e.getMessage());System.out.println(3);}finally {//这个finally可以写也可以不写,它是捕获异常的体系中最终一段会执行的部分,未来学习io操作和JDBC都会接触System.out.println(4);}System.out.println("ok");}
}

运行结果:
在这里插入图片描述

多个catch进行捕获的例子:

package day10;public class Test {public static void main(String[] args) {String[] strs = new String[] {"a","b"};A a = null;//try catch是为了防止程序可能出现的异常//在捕获异常的代码块中(try{}里的代码),如果前面的代码有异常了,就不会执行后面的try {System.out.println(strs[2]);//数组越界异常System.out.println(a.i);//空指针异常}catch(ArrayIndexOutOfBoundsException e1) {System.out.println(e1.getMessage());}catch(NullPointerException e2) {System.out.println(e2.getMessage());}System.out.println("============");}}class A{int i;
}

运行结果:

在这里插入图片描述

3. 捕获异常总结

3.1. try 和 catch

try
    捕获异常的第一步是用 try{…} 语句块选定捕获异常的范围,将可能出现异常的代放在 try 语句块中。

catch (Exceptiontype e)
    在 catch 语句块中是对异常对象进行处理的代码。每个 try 语句块可以伴随一个多个 catch 语句,用于处理可能产生的不同类型的异常对象。

    如果明确知道产生的是何种异常,可以用该异常类作为 catch 的参数;也可以用父类作为 catch 的参数。

注意:可以用 ArithmeticException 类作为参数,也可以用RuntimeException 类为参数,或者用所有异常的父类 Exception 类作为参数。但不能是与Arithmetixception 类无关的异常,如 NullPointerException ,那么,catch 中的语句不会执行。

3.2. 捕获异常的有关信息:

与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。

  • getMessage( ) 方法,用来得到有关异常事件的信息
  • printStackTrace( ) 用来跟踪异常事件发生时执行堆栈的内容

3.3. finally

finally

  • 捕获异常的最后一步是通过 finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在 try、catch代码块中是否发生了异常事件, finally 块中的语句都会被执行
  • finally 语句是可选的

http://www.ppmy.cn/news/1183519.html

相关文章

阅读JDK源码的经验分享

理论先行。阅读某一个模块时,先搜索它的理论支撑,甚至可以先看别人的阅读经验,有了一个大致的了轮廓之后,自己再去实践。 必须试用。面对一个新的类,最好是先搜索一下它的基本用法,写成一个小的示例&#…

MySQL Server 5.5 软件和安装配置教程

MySQL 5.5.58(32/64位)下载链接: 百度网盘:百度网盘 请输入提取码 提取密码:7act 软件简介: MySQL 是由瑞典MySQL AB 公司开发一个关系型数据库管理系统,目前属于 Oracle 旗下产品。MySQL 是最…

常见的配置文件格式:yaml,json,xml,ini,csv等

目录 1、配置文件的作用 2、什么是硬编码? 3、常见的配置文件格式 1、配置文件的作用 为什么需要配置文件: 主要作用是将应用程序或系统的配置参数和设置从源代码中分离出来,使它们变得易于修改和管理。通过将配置信息存储在配置文件中&#…

计算机网络重点概念整理-第四章 网络层【期末复习|考研复习】

第四章 网络层 【期末复习|考研复习】 计算机网络系列文章传送门: 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 第四章 网络层 【期末复习|考研复习…

Springboot初始化自动生成数据库表结构

记录下Springboot初始化自动生成数据库表结构的配置:Spring.sql.init相关的配置信息和注意事项 配置信息说明 spring:datasource:url: jdbc:mysql://localhost:3306/testdriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootsql:init:## 初始…

Android系统的特性

目录 Android系统的特性 1. 显示布局 2. 数据存储 3. 网络 4. 信息 5. 浏览器 6. 编程语言支持 7. 媒体支持 8. 流媒体支持 9. 硬件支持 10. 多点触控 11.蓝牙 12. 多任务处理 13. 语音功能 14.无线共享功能 15. 截图功能 16. 跨平台 17. 应用程序的安全机制…

centos 8 yum源不能使用问题

问题:新安装的centos 8 不能使用wget就不能下载和安装其他的软件 错误:为仓库 appstream 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist 解决: [rootlocalhost ~]# cd /etc/yum.repos.d [rootlocalhost yu…

SOLIDWORKS参数化设计之格式转换 慧德敏学

现在越来越多的企业开始进行模型的参数化设计规范,不管是使用SOLIDWORKS自带的方程式,还是使用SOLIDWORKS参数化设计插件,参数化的过程其实已经很透明了,都大同小异。 我们之前介绍过SolidKits.AutoWorks软件,可以很方…