Java研学-异常

一 异常

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

// 抛出异常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: 2at 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 catchSystem.err.println(ue.div(1,0));} catch (DIYException e) {e.printStackTrace();}}
}

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

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

相关文章

linux rpm安装软件卸载 以卸载mysql为例

查看rpm包 rpm -qa | grep 内容 卸载rpm rpm -e --nodeps rpm名称

Python编程技巧 – Lambda函数

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

Python实现一箭穿心

文章目录 🎄效果🏳️‍🌈Turtle模块🌹代码🌺代码讲解 🎄效果 🏳️‍🌈Turtle模块 Turtle是一个绘图工具,是Python标准库中的一个模块。它提供了一种简单而直观的方式来创…

Datax安装部署及读取MYSQL写入HDFS

一.DataX简介 1.DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址:https://github.com/alibaba/Data…

webpack 打包优化

在vue.config.js中配置 下载 uglifyjs-webpack-plugin 包 const { defineConfig } require("vue/cli-service"); var path require("path");module.exports defineConfig({transpileDependencies: true,filenameHashing: false, // 去除Vue打包后.cs…

递归剪枝题

期中考终于考完了,整道题奖励下自己 我一北大同学问我的,说他递归超时了,叫我想一个办法 后面他说他加了个剪枝就过了,然后我自己尝试了一个方法: 就是先把城市按1到n排列,然后考虑互换,如果互…

图神经网络入门基础

什么是图 要想解释图的概念,就要从著名的七桥问题开始:一个人如何不重复,不遗漏地走完七座桥,并最终回到起点。大数学家欧拉在回答七桥问题时,开创了图论。 由上图可见,图(Graph)是…

3.读取字符串【2023.11.25】

1.问题描述 请使用 input 函数读取一串字符串,然后将其输出。 2.解决思路 输入一行字符串。 将读入的变量输出。 3.代码实现 strinput("请输入一个字符串") print(str)4.运行结果

计数问题+约瑟夫问题(map)

目录 一、计数问题 二、约瑟夫问题 一、计数问题 #include<iostream> #include<map> using namespace std; int main() {int n,x;cin>>n>>x;map<int,int>m;for(int i1;i<n;i){if(i>1 && i<10){m[i];}else{int temp i;while (…

Spring Security 6.1.x 系列(5)—— Servlet 认证体系结构介绍

一、前言 本章主要学习Spring Security中基于Servlet 的认证体系结构&#xff0c;为后续认证执行流程源码分析打好基础。 二、身份认证机制 Spring Security提供个多种认证方式登录系统&#xff0c;包括&#xff1a; Username and Password&#xff1a;使用用户名/密码 方式…

openpnp - 丝杠安装调整的总结

文章目录 openpnp - 丝杠安装调整的总结概述笔记发现的问题 - X轴有回差发现的问题 - 丝杠两边的轴承座中心有高差(不同轴)备注END openpnp - 丝杠安装调整的总结 概述 设备定制回来后, 丝杠没敢动(开始是小白, 也没发现丝杠的相关问题. 因为看到同学自己安装丝杠那么痛苦, 最…