Java研学-异常

news2024/11/16 8:41:41

一 异常

异于正常状态的显示,即控制台显示结果与预期的不一致

// 抛出异常java.lang.ArrayIndexOutOfBoundsException
int[] nums = new int[2];
System.out.print(nums[2]);

二 异常分类

1 检测性异常:有称为非运行时异常,一般是在编写代码的过程中编程软件直接报错

2 非检测性异常:也称运行时异常,java为运行时异常单独封装一个类 – RuntimeException类;是编写代码过程中没问题,但执行并没有获取到预期结果

三 异常类的类结构

1 对于异常信息的解释越详细,异常类的名越长

在这里插入图片描述

2 异常类名分为两部分,Exception前:表示对当前异常出现的详细描述,Exception:表示当前类属于是异常类

3 常见异常解析

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
	at com.play.Play.main(Big.java:12)

Exception:表示当前代码存在异常

in thread “main” :在主线程中

java.long.异常名:当前出现的是什么异常

:值 – 对当前异常是因为什么原因出现的

at…:表示异常出现的代码行数,一定要看at单词后地址是由我们自己定义的

特点:当一旦出现异常,则其后定义的所有代码不会被执行

四 异常处理机制

1 机制:按照java中规定好的指定规则,完成对数据或业务的指定处理,这种操作就叫机制

2 分类

① 处理异常(常用):由作者主动处理(后期可交给Spring框架完成处理)

② 抛出异常:将异常向上抛出,谁调用,谁处理

3 处理异常

//  语法格式
try{
	捕获异常:编写可能出现异常的代码
}catch(异常类1 对象1){
	处理异常:完成对指定异常的处理操作
}catch(异常类2 对象2){
	处理异常:完成对指定异常的处理操作
}
finally{
	编写无论是否出现异常都要执行的代码,一般编写关闭资源的代码
}


// 例子
public class Play {                             
    public static void main(String[] args) {   
        int[] nums = new int[0];               
        try {                                  
            nums = new int[2];                 
            System.out.print(nums[2]);         
        } catch (Exception e) {                
            System.err.println("error");       
        } finally {                            
            System.err.println("ok");          
        }                                      
    }                                          
}                                              

4 执行原则

  当在try块中捕获异常后,则马上执行catch块中的内容,try块中后续的内容都不执行,当catch块执行后,在执行finally;如果try块中没有捕获异常,执行完try块中所有的内容后执行finally块中的代码

5 执行特点

① 组合操作
  try , catch ,finally 可以组合出现

  try , catch 可以组合出现

  try , finally 可以组合出现

  catch , finally 不能组合出现

② 在这三个代码块中间不能编写任何代码,即这三个代码块必须紧密相连

③ try , catch, finally可以嵌套但很少这样使用

④ 当编写多个catch块时,有编写顺序和执行顺序

  catch 块既有编写顺序也有执行顺序;必须是按照异常的详细程度,越详细需要编写在前面;只会执行最匹配的catch块,完成处理

⑤ 打印当前异常信息

public class Play {                                 
    public static void main(String[] args) {       
        int[] nums = new int[0];                   
        try {                                      
            nums = new int[2];                     
            System.out.print(nums[2]);             
        } catch (Exception e) {   
        	// 打印异常信息                 
            e.printStackTrace();                   
        } finally {                                
            System.err.println("ok");              
        }                                          
    }                                              
}                                                  

  java是多线程的编程语言,会随机执行操作,处理异常后,执行的操作结果显示位置有时会不一致

6 抛出异常

  ① throws:抛出一个或多个异常类,定义的位置在参数列表后面,多个异常的时候用 “,” 隔开

  ② throw:抛出指定的某一个异常类对象,定义的位置在方法体中

public class Play {
    public static void main(String[] args) {
        Integer flag=1;
        try {
            if(flag==1){
                // 抛出异常
                throw new RuntimeException("这个是运行时错误");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.err.println("dw");
            fun();
        }
    }
    // 异常声明 谁调用谁解决
    public static void fun() throws RuntimeException,ArrayIndexOutOfBoundsException{
        System.err.println(1/0);
    }
}

7 java中异常处理机制

  ①分两种处理方式:处理异常和抛出异常

  ②通过try块进行异常的捕获,通过catch块对指定的异常进行处理,在finally中去执行无论是否出现异常都要执行的代码

8 final和finally关键字与finalize方法

  ① 相同点:都是修饰符,都表示最终的含义

  ② 不同点 : 修饰的内容不同

  ③ final:能够修饰类(不能被继承),成员字段(必须有初始值),成员方法(不能被重写)

  ④ finally:能够修饰代码块,表示无论是否出现异常都要执行的操作

  ⑤ finalize:Java中的一个方法名。Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没被引用时对这个对象调用的。它是在Object类中定义的,因此所的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的

五 自定义异常类

根据自己业务的异常情况来定义异常类

// 定义除数不能为0的异常类
public class DIYException extends Exception{
    // 通过构造器完成异常类的信息展示
    public DIYException(String message){
        // 调用父类构造器完成参数传递
    }
}

使用自定义的异常类

// 使用自定义的异常类
public class UseException {
    public double div(double num1,double num2)throws DIYException{
        // 满足条件会抛出指定异常信息
        if(num2 == 0){
            throw new DIYException("除数不能为0");
        }
        return num1/num2;
    }
}

测试类进行测试

// 测试类
public class Test {
    public static void main(String[] args) {
        UseException ue = new UseException();
        try {
            // 有异常声明的类需要进行try catch
            System.err.println(ue.div(1,0));
        } catch (DIYException e) {
            e.printStackTrace();
        }
    }
}

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

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

相关文章

用Python写的自动答题脚本,正确率99%,刷课必备

咱们上学的时候,有些课程,不是很重要所以没去看,但是又要刷题,这时候,自动答题脚本就很关键,全程全自动,正确率还嘎嘎高! 所以咱们今天来用Python写一个自动答题脚本,正…

图的建立基本操作

#include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 添加头文件#define MAX_VERTEX_NUM 100 //图中最大顶点数//struct ArcNode* nextarc; //ArcNode* firstarc; //这两个是很有必要的&#xff0c;如果你没有这两个指针&#xff0c;你就无法判…

2.前端--HTML标签1【2023.11.25】

1.基本语法规范 HTML 标签是由尖括号包围的关键词&#xff0c;例如 <html>。HTML 标签通常是成对出现的&#xff0c;例如 和 &#xff0c;我们称为双标签。有些特殊的标签必须是单个标签&#xff08;极少情况&#xff09;&#xff0c;例如 <br />我们称为单标签。 …

2022年12月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 默认小猫角色和气球角色都是显示状态,小猫程序如下图所示,气球没有程序,点击绿旗,舞台上最终显示的效果是?( ) A:可能出现6个不同位置的小猫和6个小球 B:可能出现6个不同位…

Python基于jieba+wordcloud实现文本分词、词频统计、条形图绘制及不同主题的词云图绘制

目录 序言&#xff1a;第三方库及所需材料函数模块介绍分词词频统计条形图绘制词云绘制主函数 效果预览全部代码 序言&#xff1a;第三方库及所需材料 编程语言&#xff1a;Python3.9。 编程环境&#xff1a;Anaconda3&#xff0c;Spyder5。 使用到的主要第三方库&#xff1a;…

P12 C++静态关键字static

目录 01 前言 02 静态变量static 03 extern关键字 04 静态函数 最后的话 01 前言 static 关键字在 C 中有两个意思&#xff0c;这个取决于上下文。 第一种情况是在类或结构体外部使用 static 关键字&#xff0c;另一种是在类或者结构体内部使用 static。 类外面的 static…

vscode运行c++程序如何支持c++11

参考https://zhuanlan.zhihu.com/p/269244754 更改setting.json文件

[环境配置]vscode免密ssh的设置流程

测试环境&#xff1a; windows 11 ubuntu16.04 vmware 第一步&#xff1a;生成密钥 cmd打开输入&#xff1a;ssh-keygen -t rsa 一路回车后可以在C:\Users\用户名\.ssh路径看到id_rsa.pub&#xff0c;我们打开这个文件&#xff0c;用记事本打开即可&#xff0c;然后复制里…

二十一、数组(6)

本章概要 数组排序Arrays.sort的使用并行排序binarySearch二分查找parallelPrefix并行前缀 数组排序 根据对象的实际类型执行比较排序。一种方法是为不同的类型编写对应的排序方法&#xff0c;但是这样的代码不能复用。 编程设计的一个主要目标是“将易变的元素与稳定的元素…

王者荣耀——Java

代码如下&#xff1a; sxt Background package sxt;import java.awt.*; //背景类 public class Background extends GameObject{public Background(GameFrame gameFrame) {super(gameFrame);}Image bg Toolkit.getDefaultToolkit().getImage("C:\\Users\\24465\\Desk…

Hibernate 脏检查和刷新缓存机制

刷新缓存: Session是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的保存,更新,删除和加载java对象的方法,Session具有一个缓存,可以管理和追踪所有持久化对象,对象和数据库中的相关记录对应,在某些时间点,Session会根据缓存中对象的变化来执行相关SQL语句,将对…

【负载均衡】这些内容你需要知道下

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

【刷题宝典NO.4】

目录 公交站间的距离 生命游戏 公交站间的距离 https://leetcode.cn/problems/distance-between-bus-stops/ 环形公交路线上有 n 个站&#xff0c;按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离&#xff0c;distance[i] 表示编号为 i 的车站和编号为 …

Kotlin学习——流程控制,when,循环,range工具 kt里的equals if实现类似三元表达式的效果

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

KVM虚拟机的NAT网络模式原理及过程展示

NAT的方式及原理 NAT方式是KVM安装后的默认方式。 它支持主机与虚拟机的互访&#xff0c;同时也支持虚拟机访问互联网&#xff0c;但不支持外界访问虚拟机。 default是宿主机安装虚拟机支持模块的时候自动安装的。 其中 virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接…

Python编程技巧 – Lambda函数

Python编程技巧 – Lambda函数 Python Programming Skills – Lambda Functions By JacksonML 2023-11-25 在前文介绍过Python函数&#xff0c;一个函数用def关键字声明&#xff0c;不带或带有参数&#xff0c;并以冒号结束&#xff1b;函数块根据结果由解释器确定返回值动态…

【Linux】:信号的产生

信号 一.前台进程和后台进程1.前台进程2。后台进程3.总结 二.自定义信号动作接口三.信号的产生1.键盘组合键2.kill信号进程pid3.系统调用1.kill函数2.raise函数3.abort函数 四.异常五.软件条件六.通过终端按键产生信号 一.前台进程和后台进程 1.前台进程 一个简单的代码演示 …

【Spring集成MyBatis】MyBatis注解开发

文章目录 1. MyBatis的常用注解2. 基于注解的MyBatis增删改查增删改查完整代码加载映射关系测试代码 3. MyBatis的注解实现复杂映射开发一对一操作的实现一对一操作实现的第二种方式一对多操作的实现多对多操作实现 1. MyBatis的常用注解 2. 基于注解的MyBatis增删改查 使用注…

Leetcode—83.删除排序链表中的重复元素【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—83.删除排序链表中的重复元素 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* deleteDuplicates(struct ListNode* head) {i…

张弛语言课,战争电影配音声音细致声音来复原战场

为战争片进行声音配音是一项挑战性的工作&#xff0c;它要求精确再现战场的紧张感和复杂情绪。配音人员和声音设计团队必须创造出真实的战争声景&#xff0c;从战斗的轰鸣声到士兵的呐喊&#xff0c;这些声音元素都需细致打造&#xff0c;以传递战争的惨烈、英勇和人性的复杂。…