当前位置: 首页 > article >正文

【Java】异常处理(一)

🌺个人主页:Dawn黎明开始

🎀系列专栏:Java
每日一句:什么都不做,才会来不及

📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️


文章目录

📋前言

一.🔐什么是异常

1.1🔑案例引入

1.2🔑Throwable类

1.3🔑Throwable类的子类

二.🔐编译时异常与运行时异常

2.1🔑编译时异常

2.2🔑运行时异常


📋前言

     尽管人人希望自己身体健康,处理的事情都能顺利进行,但在实际生活中总会遇到各种状况,比如感冒发烧,工作时电脑蓝屏、死机等。同样,在程序运行的过程中,也会发生各种异常状况,例如,程序运行时磁盘空间不足网络连接中断加载的类不存在等。针对这种情况,Java语言引入了异常,以异常类的形式对这些非正常情况进行封装,通过异常处理机制对程序运行时发生的各种问题进行处理。本文将对异常进行详细讲解。

一.🔐什么是异常

1.1🔑案例引入

     下面通过一个案例认识一下什么是异常,在本案例中,计算以0为除数的 表达式,运行程序并观察程序的运行结果。

代码如下👇🏻

package Example;

public class Example01 {                      
	public static void main(String[] args) {
		int result = divide(4, 0);    // 调用divide()方法,第2个参数为0
		System.out.println(result);    
	}
    	//下面的方法实现了两个整数相除
	public static int divide(int x, int y) { 
		int result = x / y;  // 定义一个变量result记录两个数相除的结果
		return result;        // 将结果返回
	}
 }

   运行结果👇🏻

说明 

 由上图可知,程序发生了算术异常(ArithmeticException),提示运算时出现了被0除的情况。异常发生后,程序会立即结束,无法继续向下执行

1.2🔑Throwable类

     Java提供了大量的异常类,每一个异常类都表示一种预定义的异常,这些 异常类都继承自java.lang包下的Throwable类

     由上图中可知,Throwable类是所有异常类的父类,它有两个直接子类Error类和Exception类,其中,Error类代表程序中产生的错误,Exception类代表程序中产生的异常

1.3🔑Throwable类的子类

(1)Error类称为错误类,它表示Java程序运行时产生的系统内部错误或资源耗尽的错误,这类错误比较严重,仅靠修改程序本身是不能恢复执行的。例如,使用java命令去运行一个不存在的类就会出现Error错误。

(2)Exception类称为异常类,它表示程序本身可以处理的错误,在Java程序中进行的异常处理,都是针对Exception类及其子类的。在Exception类的众多子类中有一个特殊的子类——RuntimeException类,RuntimeException类及其子类用于表示运行时异常。 Exception类的其他子类都用于表示编译时异常。​

二.🔐编译时异常与运行时异常

2.1🔑编译时异常

     在实际开发中,经常会在程序编译时产生异常,这些异常必须要进行处理,否则程序无法正常运行,这种异常被称为编译时异常,也称为checked异常。在Exception类中,除了RuntimeException类及其子类,Exception的其他子类都是编译时异常。编译时异常的特点是Java编译器会对异常进行检查,如果出现异常就必须对异常进行处理,否则程序无法通过编译。

处理编译时期的异常有两种方式,具体如下:

(1)使用try…catch语句对异常进行捕获处理。

(2)使用throws关键字声明抛出异常,调用者对异常进行处理。

2.2🔑运行时异常

     另外还有一种异常是在程序运行时产生的,这种异常即使不编写异常处理代码,依然可以通过编译,因此被称为运行时异常,也称为unchecked异常。RuntimeException类及其子类都是运行时异常。运行时异常的特点是在程序运行时由Java虚拟机自动进行捕获处理的,Java编译器不会对异常进行检查。也就是说,当程序中出现这类异常时,即使没有使用try…catch语句捕获或使用throws关键字声明抛出,程序也能编译通过,只是程序在运行过程中可能报错。

在Java中,常见的运行时异常有多种,具体如下所示。

     运行时异常一般是由程序中的逻辑错误引起的,在程序运行时无法恢复。例如,通过数组的索引访问数组的元素时,如果索引超过了数组范围,就会发生索引越界异常,代码如下所示:      

package Example;

public class Example02 {
	public static void main(String[] args) {
		
		//运行时异常(在编译阶段是不需要处理的,是代码运行时出现的异常)
		int []arr= {1,2,3,4,5};
		System.out.println(arr[5]);
	}

}

分析

      在上面的代码中,由于数组arr的length为5,最大索引应为4,当使用arr[5]访问数组中的元素就会发生数组索引越界的异常。


http://www.kler.cn/a/135860.html

相关文章:

  • 1 软件工程——概述
  • Python入门:4.Python中的运算符
  • 任务2 配置防火墙firewalld
  • 秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现
  • 天地图接口Python代码详解
  • mapStateToProps
  • K8S基础笔记
  • 极域电子教室-教师机无法找到学生机
  • ArcEngine:如何进行缩放图层、属性信息显示、状态栏显示?
  • 关于这个“这是B站目前讲的最好的【Transformer实战】教程!“视频的目前可以运行的源代码GPU版本
  • 采集1688整店商品(店铺所有商品、店铺列表api)
  • 北京君正客户应用案例:掌静脉3D人脸猫眼视屏智能锁
  • 信息机房监控系统(动环辅助监控系统)
  • 4种经典的限流算法与集群限流
  • MAC地址_MAC地址格式_以太网的MAC帧_基础知识
  • IDEA运行thymeleaf的html文件打开端口为63342且连不上数据库
  • pnpm : 无法加载文件 E:\Soft\PromSoft\nodejs\node_global\pnpm.ps1,
  • 理解Android线程基础与多线程编程模型
  • CTFHub Git泄露
  • Spring Framework IOC依赖查找 - 按类型查找解析
  • Linux-CentOS重要模块
  • 编写高效的消息传递代码-对消息进行降维
  • 不同content-type对应的前端请求参数处理格式
  • HTTP四种请求方式,状态码,请求和响应报文
  • 比赛调研资料
  • Apache阿帕奇安装配置