IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JAVA入门之异常 笔记(34) -> 正文阅读

[Java知识库]JAVA入门之异常 笔记(34)

一、异常概念引入

package TEXT;

public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println(arr[3]);
    }
}

当我们执行以上java程序的时候,会发现出错了

在这里插入图片描述

这个错误是一个非常简单的错误,只是数组索引出界
而这个也是一种异常,一种可以通过修改代码修复的异常
ArrayIndexOutOfBoundsException
通过查询帮助文档
在这里插入图片描述
ArrayIndexOutOfBoundsException是继承了异常类Throwable的类
在JAVA面向对象中,异常也是被封装成了一个对象,这个对象继承了Throwable类

那么官方术语异常是什么呢?
异常是指在程序运行中代码产生的一种错误。

二、Throwable类

Throwable类是类库java.lang包中的一个类,它派生出两个子类,Error类和Exception类

Error类代表了JAVA内部的错误或者某些硬件的错误,比如内存溢出错误,栈溢出错误,系统内部错误等等,不能通过修改代码来实现解决该错误,
因此,Error类的错误被认为不能恢复的严重错误
所以,我们在写代码的时候,要尽量避免Error类的错误

而Exception类是用户程序能够捕捉到的异常情况,一般情况下,Exception类通过产生它的子类来创建自己异常,而这个异常可以通过修改代码以达到修复该异常的作用

三、异常处理

1. try…catch…finally

try{
可能产生异常的代码
}
catch(Exception e1){
对e1异常的处理
}
catch(Exception en){
对en异常的处理
}
finally{
一定会运行的语句序列
}

在这里插入图片描述

package TEXT;

public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        int[] arr = {1, 2, 3};
        try {
            System.out.println(arr[3]);
        }catch (Exception e){
//            System.out.println("数组索引出界");
            e.printStackTrace();
        }
        System.out.println("结束");
    }
}

在这里插入图片描述

用了这个处理异常之后,当程序遇上异常后,不再像以前那种直接退出程序而是可以继续往下执行,这在我们以后开发软件非常实用,我们开发出来的软件,如果遇到异常后直接退出程序,那么将会给用户不好的体验,因此我们希望的是程序遇到异常可以往下执行,并且把异常报出来。

2. throws

try…catch…可以对异常进行处理,但是不是所有的情况我们都有权限进行异常的处理
也就是说,有些时候可能会出现我们处理不了的,这时候该怎么办呢?
针对这种情况下,JAVA提供了throws的处理方法

格式:
throw 异常类名

注意 :这个格式时跟在方法的括号后面的

package TEXT;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo_1 {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }
    //运行时异常
    public static void method() throws ArrayIndexOutOfBoundsException{
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
    }

}

在这里插入图片描述

通过这个这个的运行结果可以看出来,并没有执行输出”结束“,因此throws处理异常并不是真正处理异常而是只是把这个异常抛出了,如果想要继续往下执行,那么需要对method继续使用try…catch,所以这仅仅时延迟了异常

3.总结

在这里插入图片描述

四、Throwable的成员方法

在这里插入图片描述

1、getMessage——用于输出异常的原因

package TEXT;

public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        int[] arr = {1, 2, 3};
        try {
            System.out.println(arr[3]);
        }catch (Exception e){
//            System.out.println("数组索引出界");
//            e.printStackTrace();
            System.out.println(e.getMessage());//异常的原因
        }
        System.out.println("结束");
    }
}

在这里插入图片描述

2、toString——用于输出异常的类名以及异常原因

package TEXT;

public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        int[] arr = {1, 2, 3};
        try {
            System.out.println(arr[3]);
        }catch (Exception e){
//            System.out.println("数组索引出界");
//            e.printStackTrace();
//            System.out.println(e.getMessage());//异常的原因
            System.out.println(e.toString());//异常类名以及异常原因
        }
        System.out.println("结束");
    }
}


在这里插入图片描述

3、printStackTrace——把异常信息输出

package TEXT;

public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        int[] arr = {1, 2, 3};
        try {
            System.out.println(arr[3]);
        }catch (Exception e){
//            System.out.println("数组索引出界");
            e.printStackTrace();//把异常信息输出
//            System.out.println(e.getMessage());//异常的原因
//            System.out.println(e.toString());//异常类名以及异常原因
        }
        System.out.println("结束");
    }
}


在这里插入图片描述

五、编译异常与运行异常

JAVA中的异常被分为两大类:编译异常和运行异常,也被称为受检异常和非受检异常
所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常

  • 编译时异常:必须显示处理,否则程序就会发生错误,无法通过编译
  • 运行时异常:无需显示处理,也可以和编译时异常一样处理
package TEXT;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo_1 {
    public static void main(String[] args) {
        method();
        method2();
    }
    //运行时异常
    public static void method(){
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    //编译时异常
    public static void method2(){
        try {
            String s = "2020-09-01";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date d = sdf.parse(s);//这里报错只是为了说可能有异常
            System.out.println(d);
        }catch (ParseException e){
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

六、自定义异常

在我们编写程序的时候,会遇到各种各样的异常,但是,并不是所有的异常都是JAVA实现封装成对象的,因此自定义异常的作用就出来了,在自定义异常类中通过编写新的方法来处理相关异常

那么我们怎么创建属于自己的异常呢?
我们只需要在建立异常的时候,继承Exception或者RuntimeException即可

在这里插入图片描述

package TEXT_1;
/*
自定义分数异常
 */
public class ScoreException extends Exception{
    public ScoreException() {
    }

    public ScoreException(String message) {
        super(message);
    }
}

package TEXT_1;
/*
老师对象类
 */
public class Teacher {
    public void checkScore(int score) throws ScoreException{
        if (score < 0 || score > 100){
//            throw new ScoreException();//抛出自定义异常对象,但是一般不给空
            throw new ScoreException("你给的分数有误,应该给0~100!!!");
        }else {
            System.out.println("分数正常");
        }
    }
}

package TEXT_1;
/*
测试类
 */
import java.util.Scanner;

public class TeacherTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入分数:");
        int score = sc.nextInt();

        Teacher t = new Teacher();
        //checkScore方法抛出一个异常,而这个异常继承的时Exception,所有这个时一个编译时异常
        try {
            t.checkScore(score);
        } catch (ScoreException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

七、throws和throw的区别

在这里插入图片描述

注意:抛出异常,不一定会有异常,当出现异常才会有异常

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:13:10  更:2021-09-02 11:13:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:18:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码