异常(上)概述,捕捉异常,try-catch语句的详细使用

news2024/11/11 5:47:55

文章目录

  • 前言
  • 一、异常是什么?
  • 二、捕捉异常
    • 1.自动捕捉异常
    • 2.try-catch语句捕捉异常
      • a.多重try-catch代码块
      • b.异常的中断机制
      • c.finally代码块恢复机制
  • 总结

前言

        该文介绍了Java异常的概述,运行代码时,异常的捕捉,及其使用 try-catch语句的处理。Java自带自动捕捉异常,但try-catch语句可以让我们更加便利地应对代码中的问题。


一、异常是什么?  

        异常概述:

        (1)程序中的异常:程序员没有预料到的情况,或者超出程序员控制的情况。

        (2)异常的分类:

                Exception(非致命异常)

                       定义:Exception 是会影响程序正常运行,但可以被解决的问题。

                       例如:RuntimeException 在Java虚拟机正常运行期间抛出异常的类。

public class Demo{
    public static void main(String[] args){
        Object obj = null;
        //运行时错误:空指针异常
        System.out.println(obj.hashCode());
    }
}

                       运行结果:

                Error(致命错误)

                        定义:不应该试图捕获的严重错误。

                        例如:

                                a.字节码文件无法解析

                                b.Java虚拟机资源耗尽        

                                c.配置文件格式不规范

                      解决方法:1.重新编写程序

                                        2.重新分配系统资源(重启)

                      例如(代码编写时的严重错误):

public class Demo{
    public static void main(String[] args){
    System.out.println(“你好”)
    //致命性错误,没有分号结尾。
    }

}

                 运行结果:

二、捕捉异常

1.自动捕捉异常

        运行后,java API中自动捕捉并在控制台中显示报错的异常

        例如:

2.try-catch语句捕捉异常

         定义:try-catch 语句用于处理代码中可能出现的错误信息。 错误可能是语法错误,通常是程序员造成的编码错误或错别字。 也可能是拼写错误或语言中缺少的功能。

         语法:

try{

    //被捕获的代码

}catch(异常类型 e){

    //对异常的处理

}

          实例:

public class Demo{
	public static void main(String[] args) {
		try {
			for(int i = 0;i<5;i++) {
				System.out.println("输出"+i+"行");
				int a = 1/i;
                //发生运算异常的代码,i = 0 时,除数为0,运算异常。
			}
		}catch(Exception e){
			System.out.println("发生了异常,请管理员尽快处理!");
            //做出代码异常的反馈
		}
}

          运行结果: 

                注:

                       a.只能反馈或修改非致命的异常,Error错误无法解决。

                      b.最好在catch代码块中写入处理异常的代码,不要省懒事,不然发生时很难查找出来。

        catch代码块中处理异常常用的3个函数:

              getMessage()函数:输出错误性质。

              toString()函数:给出异常的类型与性质。

              printStackTrace()函数:指出异常的类型、性质、栈层次及出现在程序中的位置。

        a.多重try-catch代码块        

                语法:

try {
		//some codes
}catch(some Exception1 e){
		//some codes
} catch(some Exception2 e){
		//some codes
} catch(some Exception3 e){
		//some codes
}

         运行逻辑:try语句中发生的每一个异常,依次对照每个catch语句的异常类型,直到输出对应的catch语句,反馈或者解决异常。

        实例:

public class Demo {
	public static void main(String[] args) {
		try {
			int a = 1/0;
			//该行代码具有算数异常
		}catch(NullPointerException e) {
			System.out.println("发生了空指针异常,请管理员及时处理!");
		}catch(ArithmeticException e) {
			System.out.println("发生了算数异常,请管理员及时处理!");
            //对应找到了属于算数异常的catch语句,反馈输出。
		}catch(ClassCastException e) {
			System.out.println("发生了类转换异常,请管理员及时处理!");
		}
	}
}

        输出结果: 

        b.异常的中断机制

                 解释:当try代码块中的语句发生异常时,程序就会调转到对应的catch代码块中执行,反馈或者解决问题,然后继续运行后面的代码

                 示例:

public class Demo {
	public static void main(String[] args) {

		for(int i = 0;i<5;i++) {
			try {
				System.out.println("输出"+i+"行");
				int a = 1/i;
			}catch(Exception e) {
				e.printStackTrace();
				System.out.println("发生了异常,请管理员尽快处理!");
			}
		}
	}
}

                运行结果: 

                 注:由图可见,发生异常反馈后,后续代码仍被执行。Java的异常处理是结构化的,不会因为一个异常影响整个程序的运行

        c.finally代码块恢复机制

                finally代码块:完整的异常处理语句,包含finally语句。无论try-catch语句是否顺利执行完毕,都会执行 finally 语句。往往用于程序崩溃后,保存崩溃前的工作内容。

                语法:

try{
	//被捕获的代码
}catch(异常类型 e){
	//对异常的处理
}finally{
	//最后一定会执行的代码
}

                实例:

public class Demop {
	public static void main(String[] args) {
		try {
			System.out.println("打开连接池");
			int a = 1/0;
			System.out.println("通过连接池读取数据");
		}catch(Exception e){
			System.out.println("打印堆栈跟踪异常,请管理员及时处理!");
			e.printStackTrace();
		}finally {
			System.out.println("系统提示:已保存工作内容");
			System.out.println("关闭连接池");
		}
	}
}

                运行结果: 

                由此可见,当代码运行异常时,finally代码块仍可以正常运行,可以实现及时自动保存的功能。 

finally块一般都会得到执行,但在以下四种情况中不会执行:

  1. finally块中的代码发生了异常。
  2. 在finally块前面中使用了System.exit() 方法,终止了程序运行。
  3. 程序所在线程死亡。
  4. 关闭CPU(电脑关闭)

总结

        以上就是对异常的概述,捕捉异常,try-catch-finally语句的解读。如果有什么疑问或者补充或纠错的内容,欢迎在评论区中留言,博主会及时做出反馈的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 始篇

文章目录 QT图形视图系统介绍开始搭建MainWindow框架设置scene的属性缩放功能的添加加上标尺 QT图形视图系统 介绍 详细的介绍可以看QT的官方助手&#xff0c;那里面介绍的详细且明白&#xff0c;需要一定的英语基础&#xff0c;我这里直接使用一个开源项目来介绍QGraphicsVi…

leetcode 738. 单调递增的数字

2023.8.4 这题用暴力法会超时&#xff0c;我就没试了&#xff0c;采用了个挺巧的方法&#xff0c;为了方便需要先将整数n转换为字符串的形式&#xff0c;然后从后向前遍历&#xff0c;当两个数字非递增时&#xff0c;将前一个数字--&#xff0c;后一个数字的位置记录在index中&…

路由的hash和history模式的区别

目录 ✅ 路由模式概述 一. 路由的hash和history模式的区别 1. hash模式 2. history模式 3. 两种模式对比 二. 如何获取页面的hash变化 ✅ 路由模式概述 单页应用是在移动互联时代诞生的&#xff0c;它的目标是不刷新整体页面&#xff0c;通过地址栏中的变化来决定内容区…

Three.js 创建网格辅助线,坐标轴辅助线,模型骨骼辅助线

three.js中的辅助线使用 1.网格辅助线&#xff08;GridHelper&#xff09; 2.坐标轴辅助线&#xff08;AxesHelper&#xff09; 3.模型骨骼辅助线(SkeletonHelper) 在上一篇 Three.js加载外部glb,fbx,gltf,obj 模型文件 的文章基础上新加入一个创建 辅助线的函数 createHel…

原型链污染例题复现

一、什么是原型链 下面我们通过这个小例子来看看。 可以看到b在实例化为test对象以后&#xff0c;就可以输出test类中的属性a了。这是因为在于js中的一个重要的概念&#xff1a;继承。而继承的整个过程就称为该类的原型链。 在javascript中,每个对象的都有一个指向他的原型(p…

CRM系统哪些功能可以个性化定制?

不同的企业有着不同的业务流程和需求&#xff0c;因此在选型时就需要一款可以个性化定制的CRM系统。下面说说可以个性化定制的CRM系统的功能和优势。 如何实现个性化定制&#xff1f; Zoho CRM支持个性化定制&#xff0c;您可以创建自定义功能模块、字段以及业务流程&#xf…

还在人工管理?太傻了!建筑行业高手给你支一招!

在现代科技日益发展的时代&#xff0c;智慧工地成为建筑行业的新兴趋势。借助先进的技术和数字化解决方案&#xff0c;智慧工地为建筑项目带来了前所未有的效率、安全性和可持续性。 智慧工地不仅提高了建筑施工的效率&#xff0c;也为管理人员提供了更好的决策依据和风险预测能…

MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图

MQTT 概述 MQTT (Message Queue Telemetry Transport) 是一个轻量级传输协议&#xff0c;它被设计用于轻量级的发布/订阅式消息传输&#xff0c;MQTT协议针对低带宽网络&#xff0c;低计算能力的设备&#xff0c;做了特殊的优化。是一种简单、稳定、开放、轻量级易于实现的消息…

DLL的引入方式(DllImport的特殊引入方式)

Dll引入方式有四种&#xff1a; 1.就是普通的比如一个解决方案中有多个项目&#xff0c;将其他项目的引入到该项目中 2.就是软件自带的程序集的引入 3.就是使用dll的引入&#xff08;普通的本身就是VS的dll文件&#xff09; 4.就是使用dll的引入&#xff08;不是属于该语言的…

网络音频终端音频编码解码终端

网络对讲终端SV-7011V 网络对讲终端SV-7011V&#xff0c;采用了ARM音频DSP架构&#xff0c;集网络对讲、网络广播、监听等功能于一身&#xff0c;内置麦克风、配置line out、line in、Mic in功能输出接口&#xff0c;适用于学校&#xff0c;机场&#xff0c;广场等场所。 产品…

解决 MySQL 删除数据后,ID 自增不连续问题

修复前 除了部分数据&#xff0c;导致后续新增的数据&#xff0c;ID 自增不连续 解决方案 执行下方 SQL 语句即可修复此问题&#xff0c;mbs_order为需要修复的表名 SET i0; UPDATE mbs_order SET id(i:i1); ALTER TABLE mbs_order AUTO_INCREMENT0;

NetApp 入门级全闪存系统 AFF A250:小巧而强大

NetApp 入门级全闪存系统 AFF A250&#xff1a;小巧而强大 作为 AFF A 系列中的入门级全闪存系统&#xff0c;AFF A250 不但可以简化数据管理&#xff0c;还能为您的所有工作负载提供令人惊叹的强劲动力&#xff0c;价格也平易近人。 AFF A250&#xff1a;您的新 IT 专家 AFF…

指向字符串常量(字符串右值)的char指针,free的时候为什么会报错?

起因是如下代码 char *p "abc"; free(p);先说结果&#xff0c;这里会报错&#xff0c;会报一个错误如下 一开始还没反应过来&#xff0c;只知道 “test_content” 是一个右值&#xff0c;这是一个指向右值的指针。 但是free的时候为什么会报错呢&#xff1f; 首…

HarmonyOS元服务开发实践:桌面卡片字典

一、项目说明 1.DEMO创意为卡片字典。 2.不同卡片显示不同内容&#xff1a;微卡、小卡、中卡、大卡&#xff0c;根据不同卡片特征显示同一个字的不同内容&#xff0c;基于用户习惯可选择喜欢的卡片。 3.万能卡片刷新&#xff1a;用户点击卡片刷新按钮查看新内容&#xff0c;同时…

NVM保姆级安装配置

nvm安装配置 1、NVM简介2、NVM安装三、NVM使用四、NVM常用命令 1、NVM简介 在项目开发过程中&#xff0c;使用到vue框架技术&#xff0c;需要安装node下载项目依赖&#xff0c;但经常会遇到node版本不匹配而导致无法正常下载&#xff0c;重新安装node却又很麻烦。为解决以上问…

浏览器调式的时候刷新页面network的日志和请求不会消失的解决办法

把“Preserve log”勾选去掉&#xff0c;F5刷新页面时&#xff0c;就是最新的日志&#xff0c;新的请求 把“Preserve log”勾上&#xff0c;F5刷新浏览器页面时&#xff0c;就会有历史日志&#xff0c;而不会消失

基于VR技术的新型实验室教学模式——VR线上生物实验室

随着科技的发展&#xff0c;虚拟现实技术已经逐渐走进了我们的生活。在教育领域中&#xff0c;虚拟现实技术也被广泛应用于各种学科的教学中。其中&#xff0c;VR线上生物实验室是广州华锐互动开发的&#xff0c;一种基于VR技术的新型教学模式&#xff0c;它能够为学生提供更加…

开源免费用|Apache Doris 2.0 推出跨集群数据复制功能

随着企业业务的发展&#xff0c;系统架构趋于复杂、数据规模不断增大&#xff0c;数据分布存储在不同的地域、数据中心或云平台上的现象越发普遍&#xff0c;如何保证数据的可靠性和在线服务的连续性成为人们关注的重点。在此基础上&#xff0c;跨集群复制&#xff08;Cross-Cl…

镜头基础知识

本文介绍镜头基础知识。 1.焦距 焦距指透镜中心到光聚集之焦点的距离&#xff0c;如下图&#xff0c;通常用f表示。 焦距是正值&#xff0c;一束平行光将会聚集在一个点上&#xff0c;焦距是负值&#xff0c;一束平行光在通过透镜之后将会扩散开。 注意&#xff1a; 1)这里…

【Winform学习笔记(五)】引用自定义控件库(dll文件)

引用自定义控件库dll文件 前言正文1、生成dll文件2、选择工具箱项3、选择需要导入的dll文件4、确定需要导入的控件5、导入及使用 前言 在本文中主要介绍 如何引用自定义控件库(dll文件)。 正文 1、生成dll文件 通过生成解决方案 或 重新生成解决方案 生成 dll 文件 生成的…