java --- 异常

news2024/11/29 6:36:19

目录

一、异常体系介绍

二、异常的作用

三、异常处理方式

3.1 捕获异常

2.1 灵魂一问: 如果try中没有遇到问题,如何执行?

2.2 灵魂二问:如果try中可能会遇到多个问题,怎么执行?

2.3 灵魂三问:如果try中遇到的问题没有被捕获,怎么执行?

2.4 灵魂四问:如果try中遇到了问题,那么try下面的其他代码还会执行吗?

3. 抛出异常

四、 异常中常见方法


一、异常体系介绍

Exception:叫做异常,代表程序可能出现的问题。

                     我们通常会用Exception以及他的子类来封装程序出现的问题。

运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。

                     运行时出现的异常。(如:数组索引越界异常

编译时异常:没有继承RuntimeException的异常,直接继承与Exception。

                      编译阶段就会出现异常提醒。(如:日期解析异常

二、异常的作用

  • 作用一:异常时用来查询bug的关键参考信息
  • 作用二:异常可以作为方法内部的一种特殊返回值,以便通知调试者底层的执行情况。

三、异常处理方式

  1. JVM默认的处理方式:把异常信息以红色字体打印在控制台,并结束程序
  2. 捕获异常 try...catch:一般用在调用处,能让代码继续往下运行。
  3. 抛出异常 throw、throws:
  4. 在方法中,出现异常了。
  5. 方法就没有继续运行下去的意义了,采取抛出处理。
  6. 让该方法结束运行并告诉调用者出现了问题。

3.1 捕获异常

格式:

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

目的:当代码出现异常时,可以让程序继续往下执行。

 public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        //System.out.println(arr[10]);

        try{
            System.out.println(arr[10]);
        }
        catch (ArrayIndexOutOfBoundsException e){
            System.out.println("数组越界");
        }

        System.out.println("hhhhhhhh");
    }
2.1 灵魂一问: 如果try中没有遇到问题,如何执行?
  • 会把try里面的所有的代码执行完毕,不会执行catch里面的代码。

注意:只有当出现了异常,才会执行catch里面的代码

这就相当于没有触发异常一样。

2.2 灵魂二问:如果try中可能会遇到多个问题,怎么执行?
  • 会写多个catch与之对应。

细节如果我们要捕获多个异常,这些异常中如果存在父子关系的话,那么父类一定要写在下面。

了解性:在JDK7之后,我们可以在catch中同时捕获多个异常,中间用 | 进行隔开。

public class ExceptionDemo07 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 };
 
		try {
			System.out.println(arr[10]); // ArrayIndexOutOfBoundsException
			System.out.println(2 / 0); // ArithmeticException
			String s = null;
			System.out.println(s.equals("abc"));
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("索引越界");
		} catch (ArithmeticException e) {
			System.out.println("除数不能为0");
		} catch (NullPointerException e) {
			System.out.println("空指针异常");
		} catch (Exception e) {
			//父类异常
			System.out.println("exception");
		}
		System.out.println("看看我执行了吗");
		// 索引越界
		// 看看我执行了吗
	}
}
2.3 灵魂三问:如果try中遇到的问题没有被捕获,怎么执行?
  • 相当于try...catch代码没有执行,最终还是会交给虚拟机进行处理。
public class ExceptionDemo08 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 ,6};
 
		try {
			System.out.println(arr[10]); //ArrayIndexOutOfBoundsException
			// new ArrayIndexOutOfBoundsException();
		} catch (NullPointerException e) {
			System.out.println("空指针异常");
		}
		System.out.println("看看我执行了吗");
	}
}
2.4 灵魂四问:如果try中遇到了问题,那么try下面的其他代码还会执行吗?
  • 不会执行,直接跳转到对应的catch当中,执行catch里面的语句体。
  • 但是如果没有对应的语句体,那么还是会交给虚拟机进行处理。
public class ExceptionDemo09 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 ,6};
 
		try {
			System.out.println(arr[10]); 
			System.out.println("看看我执行了吗...try");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("索引越界");
		}
		System.out.println("看看我执行了吗...其他代码");
		//索引越界
		//看看我执行了吗...其他代码
	}
}

3. 抛出异常

例子:求一个数组中的最大数

public class ExceptionDemo10 {
	public static void main(String[] args) {
		// 需求:定义一个方法求数组最大值
 
		// int[] arr = { 1, 2, 3, 4, 5 };
		// 以下两种数组代码无法运行
		int[] arr = null;
		int max = 0;
		// int[] arr = {};
		// 进行捕获
		try {
			max = getMax(arr);
		} catch (NullPointerException e) {
			System.out.println("空指针异常");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("索引越界异常");
		}
		System.out.println(max);
	}
 
	// public static int getMax(int[] arr) throws
	// NullPointerException,ArrayIndexOutOfBoundsException{
	// 都属于RuntimeException 运行时异常 可以不写
	public static int getMax(int[] arr) {
		if (arr == null) {
			// 手动创建一个异常对象 并把这个异常交给方法的调用者处理
			// 此时方法结束,下面代码不再执行
			throw new NullPointerException();
		}
 
		if (arr.length == 0) {
			throw new ArrayIndexOutOfBoundsException();
		}
		System.out.println("看看我执行了吗");
		int max = arr[0];
		for (int i = 1; i < arr.length; i++) {
			if (arr[i] > max) {
				max = arr[i];
			}
		}
		return max;
	}
}

四、 异常中常见方法

Throwable的成员方法:

方法名称说明
public String getMessage ( )返回此throwable的详细消息字符串
public String toString ( )返回此可抛出的简短描述
public void printstackTrace ( )把异常的错误信息输出在控制台
public class ExceptionDemo11 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 };
 
		try {
			System.out.println(arr[10]);
		} catch (ArrayIndexOutOfBoundsException e) {
			String message = e.getMessage();
			System.out.println(message); // Index 10 out of bounds for length 6
 
			String str = e.toString();
			System.out.println(str); // java.lang.ArrayIndexOutOfBoundsException:10
 
			e.printStackTrace(); // at Exception.ExceptionDemo11.main(ExceptionDemo11.java:8)
			// 仅仅打印信息,不会停止程序运行
		}
 
		System.out.println("看看我执行了吗");
	}
}

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

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

相关文章

眼镜店验光配镜处方单打印管理系统软件教程

一、前言 1、眼镜店原始的手写处方单逐步被电脑打印单取代 2、使用电脑开单&#xff0c;记录可以保存可以查询&#xff0c;而且同一个人配镜可以对比之前的信息 软件下载或技术支持可以点击最下方官网卡片 如上图&#xff0c;该软件有顾客信息模块&#xff0c;旧镜检查模块…

飞天使-docker知识点8-docker的资源限制

文章目录 容器资源限制示例OOM 优先级机制内存限制参数swap 限制 容器资源限制 Docker提供了多种资源限制的方式&#xff0c;可以根据应用程序的需求和系统资源的可用性进行选择。以下是一些常见的Docker资源限制及其使用情况&#xff1a;CPU限制&#xff1a;通过设置CPU的配额…

AUTOSAR ComM模块配置以及代码

ComM模块配置以及代码执行流程 1、基本的一个通道的配置列表 ComMNmVariant 概念的个人理解&#xff1a; FULL&#xff1a; 完全按照AUTOSAR NM方式进行调用 LIGHT &#xff1a;设置一个超时时间&#xff0c;在请求停止通信的时候开始计时&#xff0c;超时之后才会进入FULLCOM…

processon使用及流程图和泳道图的绘画(登录界面流程图,门诊流程图绘制门诊泳道图,住院泳道图,OA会议泳道图),Axure自定义元件

目录 一.processon图形的使用场景介绍 二.流程图绘画 三.泳道图的绘画 1.绘制门诊流程图绘制门诊泳道图 2. 绘制住院泳道图​编辑 3.绘制药库采购入库流程图 4.绘制OA会议泳道图 四.Axure自定义元件 1.Axure载入元件库 一.processon图形的使用场景介绍 二.流程图绘画 示例&…

【案例】注册表简介,新建一个右键菜单打开方式选项

这里写目录标题 来源注册表的介绍注册表编辑器VScode的打开方式菜单![image-20231217201730121](https://img-blog.csdnimg.cn/img_convert/56c02643df9e8ec3afb4f3ac5cc0cdd5.png)如何自定义一个右键菜单备份注册表新建一个菜单选项”右键用记事本打开“ DWORDQWORD可扩充字符…

MySQL数据库,表的增量备份与恢复

1. 从物理与逻辑的角度 数据库备份可以分为物理备份和逻辑备份。物理备份是对数据库操作系统的物理文件&#xff08;如数据 文件&#xff0c;日志文件等&#xff09;的备份。这种类型的备份适用于在出现问题时需要快速恢复的大型重要数据库。 物理备份又可以分为冷备份&#xf…

WPF——命令commond的实现方法

命令commond的实现方法 属性通知的方式 鼠标监听绑定事件 行为&#xff1a;可以传递界面控件的参数 第一种&#xff1a; 第二种&#xff1a; 附加属性 propa&#xff1a;附加属性快捷方式

I/O流的相关内容

首先我们了解一下什么是文件&#xff1a; 文件其实就是让我们用来保存数据的地方&#xff0c;它可以用来保存信息&#xff0c;图片&#xff0c;以及音频等各类数据。 文件流&#xff1a; 那我们是如何通过我们的程序来进行对文件的操作呢&#xff1f;这里我们就要提出一个概…

记录 | gpu docker启动报错libnvidia-ml.so.1: file exists: unknown

困扰了两天的问题&#xff0c;记录一下 问题出在启动一个本身已经安装 cuda 的镜像上&#xff0c;具体来说&#xff0c;我是启动地平线天工开物工具链镜像的时候出现的问题&#xff0c;具体报错如下&#xff1a; docker: Error response from daemon: failed to create task …

【SpringMVC】SpringMVC简介、过程分析、bean的加载和控制

文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步&#xff1a;坐标导入第二步&#xff1a;创建SpringMVC容器的控制器类第三步&#xff1a;初始化SpringMVC环境&#xff0c;设定Spring加载对应的bean第四步&#xff1a;初始化Servlet容器&#xff0c;加载SpringMV…

腾讯技术工程总结-如何写好技术文章?

文章参考&#xff1a;腾讯技术工程《写好一篇高质量的技术文章》 如何写好技术文章&#xff1f; 大家可以先思考一下&#xff0c;为什么要写技术文章&#xff1f; 我们写技术文章的目的是什么呢&#xff1f;面向哪些人呢&#xff1f; 面向人群 写技术文章的目的毫无疑问是为…

linux应急响应基础和常用命令

linux应急响应 linux应急响应基础和常用命令基于linux系统本身进行应急响应。 系统基础信息获取 获取linux服务器基本信息 命令&#xff1a; uname -a内存cpu信息 cat /proc/cpuinfo cat /proc/meminfo lscpu free -m lsmod #查看载入的模块信息进程查看 动态进程查看 …

PDF如何转换制作成翻页电子书

很多朋友想将PDF转换制作成一本翻页电子书&#xff0c;却不知道如何操作。其实&#xff0c;转换翻页电子书的过程并不难&#xff0c;只需要掌握一些基本的技巧和方法就可以了。 基本该怎么操作呢&#xff1f; 1.首先需要一个工具帮助我们成功转换&#xff0c;推荐使用FLBOOK这…

系统架构设计师教程(七)系统架构设计基础知识

系统架构设计基础知识 7.1 软件架构概念7.1.1 软件架构的定义7.1.2 软件架构设计与生命周期需求分析阶段设计阶段实现阶段构件组装阶段部署阶段后开发阶段 7.1.3 软件架构的重要性 7.2 基于架构的软件开发方法7.2.1 体系结构的设计方法概述7.2.2 概念与术语7.2.3 基于体系结构的…

【二分查找】自写二分函数的总结

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的基础知识点 二分查找算法合集 自写二分函数 的封装 我暂时只发现两种&#xff1a; 一&#xff0c;在左闭右开的区间寻找最后一个符合条件的元素&#xff0c;我封装成FindEnd函数。…

Automotive Bionics

汽车仿生学是一种通过模拟生物系统的某些特征来设计汽车的方法。一些典型的汽车仿生学例子包括&#xff1a; 鲨鱼式车型&#xff1a;这种车型的设计灵感来源于鲨鱼的流线型身体&#xff0c;这种设计能够减少空气阻力和水阻力&#xff0c;提高车辆的燃油效率和行驶速度。 甲壳虫…

JavaSE第7篇:封装

文章目录 一、封装1、好处:2、使用 二、四种权限修饰符三、构造器1、作用2、说明3、属性赋值的过程 一、封装 封装就是将类的属性私有化,提供公有的方法访问私有属性 不对外暴露打的私有的方法 单例模式 1、好处: 1.只能通过规定的方法来访问数据 2.隐藏类的实例细节,方便…

HarmonyOS云开发基础认证考试满分答案(100分)【全网最全-不断更新】【鸿蒙专栏-29】

系列文章&#xff1a; HarmonyOS应用开发者基础认证满分答案&#xff08;100分&#xff09; HarmonyOS应用开发者基础认证【闯关习题 满分答案】 HarmonyOS应用开发者高级认证满分答案&#xff08;100分&#xff09; HarmonyOS云开发基础认证满分答案&#xff08;100分&#xf…

DC-4靶场

目录 nmap进行主机发现 尝试反弹shell&#xff1a; 进入交互式shell&#xff1a; Hydra爆破jim用户密码&#xff1a; ssh登录charles &#xff1a; 提权&#xff08;三种方法&#xff09;&#xff1a; exim4提权…

数据高可用架构设计与实现

大型企业如何实现 MySQL 到 Redis 的同步 前面曾提到过 Read/Write Through 和 Cache Aside 这几种更新缓存的模式或者说策略&#xff0c;这几种策略都存在缓存不命中的可能性&#xff0c;如果缓存没有命中&#xff0c;就需要直接访问数据库以获取数据。—般情况下&#xff0c…