Java:异常(exception)

1.异常体系介绍

**异常:**异常就是代表程序出现的问题
**误区:**不是让我们以后不出异常,而是程序出了异常之后,该如何处理

**Error:**代表的系统级别错误(属于严重问题)系统一旦出现问题,sun公司会把这些错误封装成Error对象。Error是给sun公司自己用的,不是给我们程序员用的。因此我们开发人员不用管它。

**Exception:**叫做异常,代表程序可能出现的问题。我们通常会用Exception以及他的子类来封装程序出现的问题。

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

小结:

2.编译时期异常和运行时期异常

编译时期异常是提醒程序员检查本地信息

运行时异常是代码出错导致程序出现的问题

3.异常的作用

**作用一:**异常是用来查询bug的关键参考信息
**作用二:**异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

例一:空指针异常


例二:

4.异常的处理方式

①JVM默认的处理方式

②自己处理

③抛出异常

(1)JVM默认的处理方式

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

(2)自己处理(捕获异常)

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

java 复制代码
package com.dan.web;

public class ExceptionDemo5 {
    public static void main(String[] args) {
        int[] arr = {0,1,2,3,4};

        try{
            //可能出现异常的代码
            System.out.println(arr[10]);
            //此处出现异常,程序会在这里创建一个ArrayIndexOutOfBoundsException对象
            //拿着这个对象到catch小括号对比,看括号中的变量是否可以接收这个对象
            //如果能被接收,就表示该异常被捕获,执行catch里面对应的代码
            //当catch里面所以的代码执行完毕,继续执行try...catch体系下面的其他代码

        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("索引越界了");
        }

        System.out.println("看看我执行了吗");
    }
}
自己处理(灵魂四问)

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

会把try里面所有的代码全部执行完毕,不会执行catch里面的代码
**灵魂二问:**如果try中可能会遇到多个问题,怎么执行?

可以写多个catch与之对应,父类异常需要写在下面
**灵魂三问:**如果try中遇到的问题没有被捕获,怎么执行?

相当于try..catch白写了,当前异常会交给虚拟机处理
**灵魂四问:**如果try中遇到了问题,那么try下面的其他代码还会执行吗?

不会执行了。try中遇到问题,直接跳转到对应的catch,如果没有对应的catch与之匹配,则交给虚拟机处理

例1:

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

例2:

例3:

只能触发一个异常

Java 的try-catch一旦捕获到第一个异常,就会立刻跳出 try 块,后面的代码根本不会执行!

例4:

例5:

5.异常中常见的方法

Throwable的成员方法

方法名称 说明
public String getMessage() 返回此throwable的详细消息字符串
public String toString() 返回此可抛出的简短描述
public void printStackTrace() 把异常的错误信息输出在控制台(最常用)

例1:

例2:

例3:

public void printStackTrace() 在底层是利用System.err.println进行输出把异常的错误信息以红色字体输出在控制台

细节:仅仅打印信息,不会停止运行

6.抛出处理

(1)throws

注意:写在方法定义处,表示声明一个异常

告诉调用者,使用本方法可能会有哪些异常

  • 编译时异常:必须要写
  • 运行时异常:可以不写

(2)throw

注意:写在方法内,结束方法

手动抛出异常对象,交给调用者

方法中下面的代码不再执行了

7.自定义异常

①定义异常类

②写继承关系

③空参构造

④带参构造

**意义:**就是为了让控制台的报错信息更加见名知意

相关推荐
方也_arkling5 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮5 小时前
Spring Bean作用域与生命周期全解析
java·spring
风吹夏回5 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
Chengbei115 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1125 小时前
web-第一次课后作业
java·开发语言·idea
小熊Coding5 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋95 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本5 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
xiaoshuaishuai86 小时前
C# 内存管理与资源泄漏
开发语言·c#
DIY源码阁6 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse