java --- 异常

目录

一、异常体系介绍

二、异常的作用

三、异常处理方式

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]); // ArrayIndexOutOfBoundsExceptionSystem.out.println(2 / 0); // ArithmeticExceptionString 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 6String str = e.toString();System.out.println(str); // java.lang.ArrayIndexOutOfBoundsException:10e.printStackTrace(); // at Exception.ExceptionDemo11.main(ExceptionDemo11.java:8)// 仅仅打印信息,不会停止程序运行}System.out.println("看看我执行了吗");}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

08 v-text指令

概述 v-text指令主要是用来渲染文本内容&#xff0c;和双大括号的效果基本一致&#xff0c;所以使用场景非常少。 一般情况下&#xff0c;我们都会使用双大括号语法去渲染文本内容&#xff0c;而不是使用v-text指令。 基本用法 我们创建src/components/Demo08.vue&#xff…

RocketMQ源码 Broker-PullRequestHoldService 长轮询消息拉取组件源码分析

前言 PullRequestHoldService 继承了ServiceThread类&#xff0c;它本身是一个线程&#xff0c;以后台方式无线循环运行&#xff0c;支持长轮询&#xff08;默认5秒&#xff09;和短轮询&#xff08;默认1秒&#xff09;两种方式&#xff08;CountDownlatch 方式控制&#xff…

安卓端出现https请求失败(转)

背景# 某天早上&#xff0c;正在一个会议时&#xff0c;突然好几个同事被叫出去了&#xff1b;后面才知道&#xff0c;是有业务同事反馈到领导那里&#xff0c;我们app里面某个功能异常。 具体是这样&#xff0c;我们安卓版本的app是禁止截屏的&#xff08;应该是app里做了拦…

Oracle-应用会话集中在RAC集群一个节点问题

问题&#xff1a; 用户一套Oracle19c RAC集群&#xff0c;出现一个奇怪的现象&#xff0c;通过SCAN IP访问的连接会话都集中在节点一实例&#xff0c;而且用户并没有做任何的节点服务访问去控制会话的连接节点&#xff0c;比如常见的通过集群的高可用服务去控制应用访问连接集中…

【BIG_FG_CSDN】*VMware17pro*Linux*Redhit6网络管理(个人向——学习笔记)

物理机中的网络 查看物理网络的方法 “网络连接”—>单点选中网络的选项-->菜单栏中“查看此连接状态”-->“详细信息” “网络连接”中的VM网卡 在主机上对应的有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两块虚拟网卡&#xff0c;它们分别…

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

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

【数据结构】(堆)Top-k|堆排序

目录 概念&#xff1a; 堆的实现 构建 初始化 销毁 插入元素 往上调整 删除堆顶元素 往下调整 返回堆顶元素 返回有效个数 是否为空 堆排序 Top-k问题 ​编辑 创建数据 堆top-k 概念&#xff1a; 堆是将数据按照完全二叉树存储方式存储到一维数组中&#xff…

C语言使用posix正则表达式库

在C语言中&#xff0c;你可以使用 POSIX 正则表达式库&#xff08;regex.h&#xff09;来进行正则表达式的模式匹配。POSIX 正则表达式库提供了一组函数来编译、执行和释放正则表达式。 下面是使用 POSIX 正则表达式库的基本步骤&#xff1a; 包含头文件 <regex.h>&…

Spring Boot 3 + Vue 3 整合 WebSocket (STOMP协议) 实现实时通信

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

【MySQL】数据库基础入门 安装MySQL

目录 介绍&#xff1a; 安装MySQL: 设置 root 账号密码 2.配置环境变量 2.找到 Path 系统变量, 点击 "编辑" 介绍&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种用于管理和存储数据的软件。 安装MySQL: …

前端登录界面网站设计模板--HTML+CSS

🎀登录表单 💖效果展示 💖HTML代码展示 <!DOCTYPE html> <html lang="en" > <head></

Linux驱动(中断、异步通知):红外对射,并在Qt StatusBus使用指示灯进行显示

本文工作&#xff1a; 1、Linux驱动与应用程序编写&#xff1a;使用了设备树、中断、异步通知知识点&#xff0c;实现了红外对射状态的异步信息提醒。 2、QT程序编写&#xff1a;自定义了一个“文本指示灯”类&#xff0c;并放置在QMainWidget的StatusBus中。 3、C与C混合编程与…