【JAVA凝气】异常篇

news2024/11/24 8:51:15

哈喽~大家好呀,这篇来看看JAVA异常篇。

目录

一、前言

二、Exception 异常

1、Java 的非检查性异常

2、Java 检查性异常类

三、Error 错误

四、捕获异常

五、多重捕获块

六、throws/throw 关键字

七、自定义异常类

八、图书推荐


一、前言

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

比如说,你用System.out.println(11 / 0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException 的异常。

Java异常可分为3种:

(1)编译时异常:Java.lang.Exception

(2)运行期异常:Java.lang.RuntimeException

(3)错误:Java.lang.Error

Java.lang.Exception和Java.lang.Error  继承自  Java.lang.Throwable;

Java.lang.RuntimeException   继承自   Java.lang.Exception.

编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。

错误: 一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。

img

二、Exception 异常

1、Java 的非检查性异常

异常名称描述
ArithmeticException当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。
ArrayIndexOutOfBoundsException用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
ArrayStoreException试图将错误类型的对象存储到一个对象数组时抛出的异常。
ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常。
IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数。
IllegalMonitorStateException抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。
IllegalStateException在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
IllegalThreadStateException线程没有处于请求操作所要求的适当状态时抛出的异常。
IndexOutOfBoundsException指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
NegativeArraySizeException如果应用程序试图创建大小为负的数组,则抛出该异常。
NullPointerException当应用程序试图在需要对象的地方使用 null 时,抛出该异常
NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
SecurityException由安全管理器抛出的异常,指示存在安全侵犯。
StringIndexOutOfBoundsException此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。
UnsupportedOperationException当不支持请求的操作时,抛出该异常。

2、Java 检查性异常类

异常名称描述
ClassNotFoundException应用程序试图加载类时,找不到相应的类,抛出该异常。
CloneNotSupportedException当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。
IllegalAccessException拒绝访问一个类的时候,抛出该异常。
InstantiationException当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。
InterruptedException一个线程被另一个线程中断,抛出该异常。
NoSuchFieldException请求的变量不存在
NoSuchMethodException请求的方法不存在

我们来看看常见类的使用

ArithmeticException:算术异常

最常见的就是除以了0的例子,例如 int i = 10 / 0;

ArrayIndexOutOfBoundsException:数组下标越界异常

int a[10];

System.out.println(a[10]);

很明显数组下标明显越界了

ClassCastException:类转换异常

Object o = 10;Integer i = (Integer) o;

NullPointerException:空指针异常

String str = null;

str.length();

NumberFormatException:数字格式化异常

ParseException:解析异常

SimpleDateFormat sdf = new SimpleDateFormat(); sdf.parse("abc");

三、Error 错误

Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。

这种错误我们最常见的可能是栈溢出问题。如何实现呢?直接递归

public class Text {
​
    public static void main(String[] args) throws Exception {
        test();
    }
​
    public static void test() {
        test();
    }
}

img

四、捕获异常

使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。

try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

public class Text {
​
    public static void main(String[] args) throws Exception {
​
        try {
​
        }catch (){
​
        }finally {
​
        }
​
    }
​
}

Try 语句包含要执行的程序代码,Catch 语句包含要捕获异常类型的声明,finally 语句包含了这个程序一定会执行的语句,例如,我们后面要将的 JDBC 连完数据库之后要释放资源,就一定要放到 finally 里面去。

例子

public class Text {
​
    public static void main(String[] args) throws Exception {
​
        try {
            int i = 10 / 0;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            return;
        }
​
    }
​
}

运行结果

java.lang.ArithmeticException: / by zero at com.itxzw.Secondweek.four.Text.main(Text.java:8)

扩:printStackTrace 的意思是打印出异常,但是它还将显示出更深的调用信息。

五、多重捕获块

一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。

看这里是不是有点像 if……else if ?

格式

try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}

例子

    public static void main(String[] args) throws Exception {
​
        try {
            int i = 10 / 0;
        }catch (IndexOutOfBoundsException e){
            e.printStackTrace();
        } catch (NullPointerException e){
            e.printStackTrace();
        }catch (ArithmeticException e){
            e.printStackTrace();
        }finally {
            return;
        }
​
    }

六、throws/throw 关键字

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。

也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

区别:throws 抛出多个异常,throw 抛出一个异常对象。

throws: 跟在方法声明后面,后面跟的是异常类名 throw: 用在方法体内,后面跟的是异常类对象名

示例

public class className
{
  public void deposit(double amount) throws RemoteException
  {
​
    throw new RemoteException();
  }
​
}

七、自定义异常类

在日常开发中,有些业务逻辑对应的异常类,但系统并未进行定义,那么这时就需要我们自定义异常类进行实现。

自定义异常类需满足以下条件: 1.自定义一个编译期异常:自定义类并继承于java.lang.Exception。 2.自定义一个运行时期的异常类:自定义类并继承于java.lang.RuntimeException

这里我们以例题的形式来讲解

img

创建一个异常类要有无参与有参的构造方法,throws 与 throw。

AgeGT150Exception.java

public class AgeGT150Exception extends Exception{
​
    public AgeGT150Exception() {
    }
​
    public AgeGT150Exception(String message) {
        super(message);
    }
}

AgeLT0Exception.java

​
public class AgeLT0Exception extends Exception {
​
    public AgeLT0Exception() {
    }
​
    public AgeLT0Exception(String message) {
        super(message);
    }
}


​

Student.java

​
public class Student {
​
    private String name;
    private int age;
​
    public Student() {
    }
​
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
    }
​
    public void panDuanA() throws AgeLT0Exception{
        if (this.age < 0){
            throw new AgeLT0Exception("年龄小于0岁");
        }
    }
​
    public void panDuanB() throws AgeLT0Exception{
        if (this.age > 150){
            throw new AgeLT0Exception("年龄大于150岁");
        }
    }
​
}


​

Text.java

public class Text {
​
    public static void main(String[] args) {
​
        Student student = new Student("张三",151);
​
        try {
            student.panDuanB();
        }catch (Exception e){
            e.printStackTrace();
        }
​
    }
​
}

运行结果

img

很明显了,和系统类报错打印的一样,这里我们的自定义异常就讲完了。

八、图书推荐

Java28岁了,当打之年,并且还会打很多年。

为即将或正在使用Java的你推荐Java“此生错过必遗憾”系列书单。看看你还缺哪本?请补齐。优惠购书链接就在文中,拿好不谢。

Java核心技术第12版开发基础+高级特性(套装共2册)

Java四大名著”之一Core Java最新版,一键打包全套2册!建议入门小白和准备升级到Java17的开发者购买。本书根据Java17新特性全面升级!赠送作者亲授视频课+海量代码集。

限时秒杀链接

Java核心技术第11版基础知识+高级特性(套装共2册)

Java四大名著”之一Core Java次新版,一键打包全套2册!建议实际生产环境仍在使用Java8Java11开发且暂时没有升级版本打算的开发者购买。本书基于Java9-11编写,赠送作者亲授视频课+海量代码集。

限时秒杀链接

Java编程思想[Thinking in Java]

Java四大名著”之一需要有一定编程基础的人才可阅读,即使很多内容还无法理解,但每次读完一定会有所收获。本书单最前面推荐的《Java核心技术》侧重技术,而《Java编程思想》侧重于“思想”,本书为你剖析Java中各个内容的设计理念。这是一本伴随我们技术成长的好书,买一本放在旁边,摸着就有底气。

限时秒杀链接

Effective Java 中文版(原书第3版)

Java之父James Gosling

“我很希望我10年前就能拥有这本书。有人可能认为我不需要任何Java方面的书籍,但是我需要这本书。”

Java四大名著”之一适合已经掌握Java核心技术的程序员,想更加深入地了解Java编程语言的开发者阅读。针对如何编写高效、设计优良的程序提出了最实用、最权威的指导方针,通过90条简短、独立的经验法则,探索新的设计模式和语言习惯用法,帮你更加有效地使用Java编程语言及其基本类库,指引你少走弯路。这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。是Java开发人员案头上的一本不可或缺的参考书。

限时秒杀链接

Java语言程序设计基础篇+进阶篇(原书第12版)(套装共2册)

本套书相较于《Java核心技术》更加的基础,如果你阅读《Java核心技术》有些吃力,建议从本书读起。畅销20余年的“长城书”一键打包全套!被世界各地的大学选作教材,更新至Java9、10和11。本书通过示例讲解问题求解技巧,提供大量的程序清单,每章配有丰富的复习题和编程练习题,帮助读者掌握编程技术并解决实际开发中遇到的问题。

限时秒杀链接

Java并发编程实战

让注重实战的你更快领悟Java并发编程的要领,快速构建大规模并发应用程序。Java四大名著”之一《Effective Java》的作者Joshua Bloch参与编写。本书是Java并发编程领域的里程碑著作!从并发编程的基本理论入手,逐步介绍了在设计Java并发程序时各种重要的设计原则、设计模式与思维模式。另一本蚂蚁金服方腾飞老师写的《Java并发编程的艺术》也适合一并阅读。

限时秒杀链接

软件架构实践(原书第4版)

让你少走弯路的进阶架构师避坑指南!图书届奥斯卡Jolt大奖双冠王作品!全球10余个国家出版。卡内基梅隆等名校教材,IEEE杂志10佳图书,软件架构图书事实标准。

限时秒杀链接

以上图书当当网全部限时秒杀,满100-50,买的越多,优惠越多!了解更多好书点击

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

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

相关文章

k8s上部署Alluxio:v2.9.1经验总结

1.采用helm安装 配置文件下载地址 https://github.com/Alluxio/alluxio/tree/v2.9.1 直接将如下图所示的文件传到K8s集群的master节点 values.yaml为alluxio的配置文件&#xff0c;在里面可以配置一些属性&#xff0c;如挂载点、文件读写的一些配置、worker存储介质的配置&a…

100天精通Python(可视化篇)——第88天:全网最全Seaborn库常用绘图3万字总结(参数说明+案例实战)

文章目录 一、Seaborn介绍1.1 介绍1.2 安装1.3 风格设置1.3.1 style&#xff08;风格&#xff09;1.3.2 context&#xff08;环境设置&#xff09; 1.4 调色盘设置1.5 数据集下载 二、Relational plots&#xff08;关系图&#xff09;2.1 scatterplot&#xff08;散点图&#x…

常见的几种设计模式——单例、工厂、代理、模板

文章目录 前言一、工厂模式1、介绍2、实现 二、单例模式1.介绍2.实现3、懒汉与饿汉 三、代理模式1、介绍2、实现3、AOP的底层实现 四、模板模式1、介绍2、实现 总结 前言 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过…

某书最新版X-s(2023/5/23更新)

前不久刚写过xhs的x-s, 前几天听一些小伙伴说又更新了,我二话不说还按原先的逆向思路,直接搜function sign,开始施展补环境大法。。。 一顿无用的折腾,补完后,测试发现死活不成功,这真是离了大谱了。 对比了一下,通过补环境,sign生成的x-s: 浏览器的x-s: 很明显…

MySQL-3-创建表、删除表、增删改、约束、索引

一、创建表 语法格式&#xff1a; create table <表名>( 字段名1 数据类型&#xff0c; 字段名2 数据类型&#xff0c; … ); 补充&#xff1a;MySQL中常见的数据类型 int 整数&#xff08;对应Java中的int&#xff09; bigint 长整型&#xff08;对应Java中的long&#…

我叫缺陷,也叫Bug,下面介绍一下我的生命周期

我叫缺陷&#xff0c;从被创建至关闭&#xff0c;到最后做缺陷分析&#xff0c;这是我的完整生命周期。我的整个生命周期贯穿着整个项目的项目周期&#xff0c;因此&#xff0c;掌握我的生命周期&#xff0c;不止是测试人员必修的课程&#xff0c;也是测试人员的灵魂。 缺陷的定…

强化学习系列之Policy Gradient算法

一. 背景 1.1 基础组成部分 强化学习里面包含三个部件:Actor,environment,reward function Actor : 表示角色,是能够被玩家控制的。 Policy of Actor:在人工智能中,Policy π \pi π 可以表示为一个神经网络,参数为 θ \theta

C# MVC 微信支付之小程序红包

最近有个项目增加导游引流功能&#xff0c;因为项目只用的小程序&#xff0c;没有使用公众号&#xff0c;没法用”现金红包“功能&#xff0c;开通商家转账到零钱需要7-14天才能申请下来&#xff0c;暂时先用小程序红包顶上&#xff0c;一路都是坑啊&#xff0c;特此记录下。 官…

docker常规命令使用

docker 操作 命令分类 启动类、镜像、容器 docker服务启动 systemctl start docker docker 版本查看 docker version 列出本机所有镜像 docker images 在远程仓库中查找镜像 docker search --limit 5 redis //从仓库中查找点赞数前5的redis镜像 从远程仓库中拉取镜像 docker …

Wireshark - 过滤表达式的规则

文章目录 1. 过滤 协议2. 过滤 端口3. 过滤 IP4. 过滤 TCP重传数据包5. 包长度过滤6. <未完待续2023.5.23> 1. 过滤 协议 1、TCP - 只显示TCP协议2、!TCP - 排除TCP协议 2. 过滤 端口 1、tcp.port6666 - 显示&#xff08;不分来源或目标&#xff09;端口2、tcp.dstp…

Hadoop完全分布式搭建

主机设置 三台主机关闭防火墙 三台主机关闭SeLinux安全机制 给每台主机修改主机名 配置三台主机地址映射 设置免密登录 安装JDK 解压安装 配置jdk的环境变量 测试安装成功 分发JDK 安装配置 Hadoop 解压安装 Hadoop环境配置文件 - hadoop-env.sh 修改Hadoop…

【电商必备】增长销售和客户在线支持的网站即时聊天(一)

科技的进步无疑令商业世界更加国际化&#xff0c;你的公司一定有来自世界各地的客户。试想一下&#xff0c;你的公司本部在亚洲&#xff0c;但有国外的客户在非工作时间透过Google搜寻到你公司&#xff0c;并有疑问期望实时得到回复&#xff0c;我们可以如何解决时差的问题呢&a…

MySQL 事务篇

事务有哪些特性&#xff1f; 原子性&#xff1a; 一个事务中的所有操作&#xff0c;必须全部执行。要么全部完成要么就不完成。中间如果出现错误&#xff0c;就要回滚到初始状态。 持久性&#xff1a; 事务处理结束后&#xff0c;对数据的修改就是永久的&#xff0c;就是系统故…

使用CSS来实现爱心信封的效果

想必在520大家都和女朋友过了完美的节日&#xff0c;可是博主还没有女朋友鹅鹅鹅&#xff0c;还是写一个爱心信封来维护自己弱小的心灵吧鹅鹅鹅 个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&a…

用友助力中核集团建设财务共享中心新华发电分中心,实现业财融合

企业在进行决策时需要大量的财务信息作为依据&#xff0c;财务共享中心的建设可以帮助企业将财务和业务分离后重新有序融合&#xff0c;使得决策数据更有价值&#xff0c;也帮助企业的管理和决策更加贴合实际。 新华水力发电有限公司&#xff08;简称“新华发电”&#xff09;…

IPEmotion采集J1939协议信号

一 背景 由于商用车相对于乘用车更注重实用性&#xff0c;功能也较单一&#xff0c;且具有产量小的特点&#xff0c;因此在设计开发时需要进行约束&#xff0c;以更大程度实现软硬件的复用和成本的降低&#xff0c;在此需求下J1939协议便随之产生了。 J1939协议是由美国汽车工…

使用Fiddler工具抓取微信小程序中的图片,使用Fiddler工具抓取电脑访问的链接图片

背景&#xff1a; 开发微信小程序的时候&#xff0c;是不是经常看到别人的小程序中某个图标或者图片好看想用&#xff0c;下面小编给大家分享一下怎么获得微信小程序中的图片。 一.什么是Fiddler 官网&#xff1a;https://www.telerik.com/ 下载地址1&#xff1a;Fiddler4_官方…

✨概率论期末速成(三套卷)——试卷①✨

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;概率论期末速成&#xff08;三套卷&#xff09; 目录 ✨一、填空题&#xff08;在下列各题填写正确答案&#xff0c;不填、填错&#xff0c;该题无分&#xff0c;每小题3分&#xff0c;共36分&#xff09;✨二、计算题(本大题6小…

《2023金融科技十大趋势报告》重磅发布:安全成为金融科技发展生命线

5月23日&#xff0c;由腾讯研究院、腾讯云、腾讯安全、微信支付、腾讯广告、腾讯优图实验室、招商银行、中信建投证券联合编制的《2023金融科技十大趋势报告》&#xff08;以下简称《报告》&#xff09;正式发布。《报告》从创新篇、智能篇、普惠篇、安全篇、融合篇五个方面总结…

虎牙直播在微服务改造的实践总结2

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面…