java基础知识——25.异常

这篇具有很好参考价值的文章主要介绍了java基础知识——25.异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章,我们来讲一下java的异常体系

目录

1.异常概述

2 java的异常继承体系

2.1 编译时异常

2.2 运行时异常

2.3 底层原理

2.4 异常的作用

3.异常的处理方式

3.1 JVM默认的处理方式

3.2 自己处理(捕获异常)

3.2.1自己处理的4个问题

3.2.2 异常中的常见方法

3.3 抛出处理

3.3.1 throws

3.3.2 throw

4.小结


1.异常概述

首先,我们来认识一下异常

异常:异常就是代表程序出现的问题

注意:我们学习异常不是让我们以后写代码不出现异常,而是程序出了异常之后,我们应该如何处理

下面举个例子,来看一下异常:

java基础知识——25.异常

 java中有许多异常,上面举的只是两个简单的例子而已

2 java的异常继承体系

java中有许许多多的异常,这些异常组成了java的异常体系,下面来看一下:

java基础知识——25.异常

下面来详细的说一下各个部分

  • Error:代表的系统级别错误(属于严重问题)系统一旦出现问题,sun公司会把这些错误封装成Error对象。Error是给sun公司自己用的,不是给我们程序员用的。因此,我们开发人员不用管它
  • Exception:叫做异常,代表程序可能出现的问题。我们通常会用Exception以及它的子类来封装程序出现的问题
  • 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。运行时出现的异常(如:数组索引越界异常)
  • 编译时异常:编译阶段就会出现异常提醒(如日期解析异常)

 注意:异常体系的最上层父类是Exception,而不是java.lang.Throwable

2.1 编译时异常

编译时异常,就是我们在写代码时,不运行就会出现的错误,idea中会用红色波浪线标记出来,如果我们不出来,则代码运行不了。

下面,我们通过具体的实例来看一下:

java基础知识——25.异常

如上图所示,这就是编译时异常,我们可以进行相应的异常处理:

java基础知识——25.异常

然后就可以正常运行了:

java基础知识——25.异常

 编译时异常是很好解决,我们可以直接在主方法上抛出异常就行

2.2 运行时异常

运行时异常就是RuntimeException及其子类,在编译阶段不会是出现异常提醒的。它运行时出现的异常(如:数组索引越界异常)

 下面还是通过具体实例来看一下:

java基础知识——25.异常

然后,我们运行看一下:

java基础知识——25.异常

就会出现红色错误,然后指出错误类型,指出具体位置

这就是运行时异常。

2.3 底层原理

 下面,我们来看一下为什么会出现编译异常和运行时异常两种异常

java基础知识——25.异常

而我们的编译器在编译阶段,java是不会运行代码的,它只会检查语法是否有错误,或者做一些优化,所以就会出现这两种异常

2.4 异常的作用

下面,讲一下异常的作用

作用一:异常是用来查询bug的关键参考信息

作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

这里就不举具体例子了

3.异常的处理方式

上面讲了异常的概念,异常体系,下面我们来讲一下异常的处理方式

异常的处理方式有三种,分别是:JVM默认的处理方式,自己处理,抛出异常

3.1 JVM默认的处理方式

当我们的代码中有异常的时候,如果我们没有自己处理,没有抛出异常,那么就会采用JVM的默认处理方式来处理

JVM的默认处理方式是这样的:

  • 把异常的名称,异常原因以及异常出现的位置等信息输出在了控制台
  • 程序停止运行,下面的代码就不会运行

下面看一下具体实例:

java基础知识——25.异常

java基础知识——25.异常

3.2 自己处理(捕获异常)

下面我们来看一下异常处理的第二种方式:自己处理

它的格式如下:

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

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

下面通过具体实例来看一下:

java基础知识——25.异常

再看一下结果:

java基础知识——25.异常 

下面,我们就上面的这个代码,来分析一下它的具体执行过程

首先,程序进入到 try 里面,执行try里面的代码,如果出现了异常,它就会创建出相应的异常类对象,比如我们这里出的是索引越界异常,也就是ArrayIndexOutOfBoundsException异常,所以它就会创建一个ArrayIndexOutOfBoundsException异常对象,然后拿着这个对象到catch的小括号中进行比较,看括号中的变量能否接收这个对象(Exception是所有异常的父类),如果可以接收,那么就执行catch里面的代码,如果不可以接收,就会在编译时报错。这就是它的执行流程。

3.2.1自己处理的4个问题

下面,关于自己处理异常这种方式,或者说try { } catch( ) { } 这个方式,提几个问题。

问题一:如果try中没有遇到问题,怎么执行?

答:执行try中的代码,catch中的代码不执行

注意:只有出现异常,才会执行catch中的代码

看实例:

java基础知识——25.异常

java基础知识——25.异常 

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

答:但凡try中出现异常,并且异常被捕获,那么就会执行catch,然后继续执行下面的代码,不会管其他的异常

注意:try中但凡出现一个异常,就会跳过try的部分

看实例:

java基础知识——25.异常

java基础知识——25.异常 

 

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

答:那么程序会报错,以红色字体将错误打印在控制台,并且下面的代码不会继续执行

看实例:

java基础知识——25.异常

java基础知识——25.异常 

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

答:不会继续执行

注意:这种情况就相当于try白写了,异常就会交给JVM默认处理

看实例:

java基础知识——25.异常

java基础知识——25.异常

3.2.2 异常中的常见方法

在上面的案例中,当我们自己捕获到异常时,我们会定义一个异常类的对象e,然后在catch里面随意写点东西,这只是为了演示方便才这样做的。其实异常类里面有许多方法,下面就介绍几个常用的方法:

java基础知识——25.异常

这些方法我们都可以通过异常类对象e来调用,下面演示一个案例:

java基础知识——25.异常 java基础知识——25.异常

3.3 抛出处理

抛出处理就是自己手动写抛出语句,将异常抛出。

抛出处理涉及到2个关键字,分别是 throws,throw;下面分别来看一下

3.3.1 throws

throws:写在方法的定义处,表示声明一个异常,作用是告诉调用者,使用本方法可能会出现哪些异常

注意:编译时的异常必须要写,运行时异常可以不写

格式如下:

public void 方法() throws 异常类名1,异常类名2……{

}

下面看一下具体实例:

java基础知识——25.异常

java基础知识——25.异常

因为没做其他处理,所以就是默认的输出这个异常 

3.3.2 throw

throw:写在方法内,结束方法,它是手动抛出异常对象,交给调用者,方法下面的代码不再执行了

格式如下:

public void 方法{
    throw new 异常类名();
}

下面看一下具体实例:

java基础知识——25.异常

java基础知识——25.异常 

4.小结

这篇文章我们讲了一下异常。介绍了什么是异常,java的异常体系结构,和对异常的三种处理方法。都比较重要,都需要掌握。其实内容很简单,就是出错了,捕获它,匹配它,处理它,然后继续执行后面的代码。一般的处理方式就是输出打印它。文章来源地址https://www.toymoban.com/news/detail-430313.html

到了这里,关于java基础知识——25.异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL速通篇004】这可能最详细的关于MySQL基础知识点的文章了

      👑 作 者 主 页 : CSDN丨博客园 🏆 学 习 交 流: 在下周周ovoの社区 💎 这篇8000多字的博客也是花了我比较久的时间,基本覆盖很大一部分的MySQL知识点,可以说是非常的详细,感谢各位的支持,对于文章中的一些语法,概念,例子等错误,欢迎并感谢各位读者的指出 文

    2024年02月05日
    浏览(91)
  • Python常用基础语法知识点大全合集,看完这一篇文章就够了

    Python 是一门独特的语言,快速浏览一下他的要点: 面向对象:每一个变量都是一个类,有其自己的属性(attribute)与方法(method)。 语法块:用缩进(四个空格)而不是分号、花括号等符号来标记。因此,行首的空格不能随意书写。 注释:行内用“#”号,行间注释写在两

    2023年04月22日
    浏览(59)
  • Python入门教程:掌握for循环、while循环、字符串操作、文件读写与异常处理等基础知识

    在 Python 中,for 循环用于遍历序列(list、tuple、range 对象等)或其他可迭代对象。for 循环的基本语法如下: 其中, 变量 表示每次循环中取出的一个元素, 可迭代对象 表示被遍历的对象。下面是一个 for 循环的例子: 输出结果为: 代码中, fruits 是一个列表, fruit 是当前循

    2024年02月10日
    浏览(60)
  • 【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|

    1.1 索引目的 本篇索引旨在 收藏CSDN全站中有关数字IC领域高价值文章 ,在数字芯片领域中,就算将架构,设计,验证,DFT,后端诸多岗位加在一起的数量,都不及软件类一个细分方向的岗位数量多,反映在社区氛围或是开源资料的丰富度而言,数字IC领域相较于软件/互联网领

    2024年02月03日
    浏览(120)
  • python:基础知识—流程控制—函数与模块—数据结构—类与GUI和Turtle—异常处理与文件,概括全书(上万字最详细版)

    这里是一张夜景,给大家放松一下。 !!无锡南长街 python是一门同时支持 面向过程 与 面向对象 的高级语言,由于开放源码的特性,具有 移植性好,可跨平台,具有丰富的第三方库 。扩展名名为 .py 。 python中常见的数字有三种类型·:整数( integer ),浮点数( float ),与

    2024年02月09日
    浏览(57)
  • Java入门基础知识

    JDK是Java工具开发包,包含了JVM(程序运行环境),核心类库(直接应用即可),开发工具(Javac,java,jdb,jhat…) JRE是Java运行环境,包含了JVM,核心类库,运行工具 JDK包含了JRE,JRE包含了jvm 全部小写(有特定含义的英文字符) class 表示一个类 整数类型 小数类型 字符串类型 :只用\\\"双引

    2024年02月09日
    浏览(73)
  • java基础知识

    java的数据结构有哪些? 线性结构:数组、链表、哈希表;队列、栈 非线性结构有:堆、树(二叉树、B树、B+树、红黑树) 图 常用的集合类有List集合,Set集合,Map集合,其中List集合与Set集合继承了Collection接口, List 有序可重复的集合接口,继承自Collection接口,表示元素按照插入顺

    2024年02月06日
    浏览(56)
  • java基础知识梳理

    虽然已经在实际工作中与java打交道5年之多,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。拉

    2024年02月04日
    浏览(65)
  • java基础知识二

    1.1、基本概念 类是具有相同属性和行为的一组对象的 集合 ,包含数据和操作,数据被称为 成员变量 ,操作被称为方法 对象是类的实例,即 对象 = 数据 + 行为 或者 对象 = 状态 + 操作 类抽象的、概念上的定义,对象是一个具体的、实际存在的个体,即一个实例 1.2、类的特

    2024年02月07日
    浏览(59)
  • Java GC基础知识

    在对象中添加一个 引用计数器 ,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可 能再被使用的 引用计数法的缺陷: 如果使用 引用计数法 , objA 和 objB 除互相引用外没有任何其他引用,但是无法被回收。

    2023年04月13日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包