Java入门之异常处理

Wesley13
• 阅读 601

1.异常概念

异常指的是程序在执行过程中出现的非正常的情况,导致JVM的非正常停止。在Java中,异常是一个类,产生异常就是创建异常对象并抛出一个异常对象。

异常指的并不是语法错误,语法错误,编译不会通过,而是编译通过后,程序执行异常。

异常的作用是帮助我们找到程序中的问题。

2.异常产生过程解析

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

Java入门之异常处理

运行过程解析:

  1. 在 arr 数组中提取索引 3,由于数组没有索引3,导致了运行异常,JVM对这个异常做了识别,并抛出异常给 main 方法。
  2. 由于 main 方法并没有异常处理,main 方法又把异常返回给 JVM。
  3. JVM 收到异常后,打印异常详细信息到控制台,同时中断程序。

3.异常类

java.lang.Throwable 是异常的根类。

Throwable 体系:

  • java.lang.Error:严重错误,不在我们处理范围内。
  • java.lang.Exception:平时所说的异常是此类。我们可以通过修改代码纠正错误,使程序能正常运行。异常又分为checked异常(编译异常)和runtime异常(运行异常)。

Throwable 常用方法:

  • public void printStackTrace():打印异常的详细信息。
  • public String getMessage():获取异常发生的原因。

Java入门之异常处理

 4.异常处理

Java 异常处理的五个关键字: try、catch、finally、throw、throws

  • throw 抛出异常。
  • throws 声明异常。
  • try...catch...finally 捕获异常。

throw:

public class TestException {
    public static  void  main(String[] args){
        int[] arr = {1,2,3};
        int index = 3;
        if (index < 0 || index > arr.length -1){
            throw  new ArrayIndexOutOfBoundsException("数组越界");
        }
        System.out.println(arr[index]);
    }
}

throws 用于方法声明之上,表示当前方法不处理异常,并提醒该方法的调用者来处理异常。

若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。

public class TestException {
    public static  void getIndex(int index) throws ArrayIndexOutOfBoundsException{
        int[] arr = {1,2,3};
        if (index < 0 || index > arr.length -1){
            throw  new ArrayIndexOutOfBoundsException("数组越界");
        }
    }
    public static  void  main(String[] args) throws  ArrayIndexOutOfBoundsException{
        getIndex(4);

    }
}

try-catch 用于对异常有针对性的语句进行捕获,可以对出现的异常进行制定方式处理。finally代码块无论有无捕获异常都会执行。

public class TestException {
    public static  void  main(String[] args){
        int[] arr = {1,2,3};
        //捕获数组越界异常
        try{
            System.out.println(arr[4]);
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();//获取异常详细信息
        }finally{

       System.out.println("程序继续执行");

    }
        //继续执行
        System.out.println(arr[2]);

    }
}

可以写多个catch 捕获多个异常。需要注意的是catch捕获异常不能相同,异常子类一般要写在异常父类上面,否则异常被父类捕获,子类无法捕获详细异常。

在继承关系当中,如果父类抛出异常,那么子类重写父类方法时,抛出和父类相同的异常或者不抛出异常。如果父类没有抛出异常,子类重写父类该方法时也不可抛出异常,若该子类方法产生异常,只能捕获不能声明抛出。

5.自定义异常类

原理:自定义异常类继承 Exception 根类。

//自定义异常类
class CustomException extends Exception{
    //无参构造方法
    public CustomException(){};
    //有参
    public CustomException(String msg){
        super(msg);//继承Exception 构造方法
    }
}
//测试
public class TestCustomException {
    public static  void  main(String[] args){
        int[] arr = {1,2,3};
        int index = 3;
        try{
            if (index<0  || index>arr.length-1){
                throw  new  CustomException("数组越界");
            }
        }catch (CustomException e){
            e.printStackTrace();
        }

    }
}

Java入门之异常处理

温馨提示

  • 如果您对本文有疑问,请在评论部分留言,我会在最短时间回复。
  • 如果本文帮助了您,也请评论关注,作为对我的一份鼓励。
  • 如果您感觉我写的有问题,也请批评指正,我会尽量修改。
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java面试题 IO GC BAT面试题系列 基础篇(十五)
请问运行时异常与受检异常有什么区别?考察点:异常参考回答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译
Wesley13 Wesley13
3年前
03.Android崩溃Crash库之ExceptionHandler分析
目录总结00.异常处理几个常用api01.UncaughtExceptionHandler02.Java线程处理异常分析03.Android中线程处理异常分析04.为何使用setDefaultUncaughtExceptionHandler前沿上一篇整体介绍了crash崩溃
Wesley13 Wesley13
3年前
JAVA运行时异常及常见的5中RuntimeExecption
java运行时异常是可能在java虚拟机正常工作时抛出的异常。java提供了两种异常机制。一种是运行时异常(RuntimeExepction),一种是检查式异常(checkedexecption)。检查式异常:我们经常遇到的IO异常及sql异常就属于检查式异常。对于这种异常,java编译器要求我们必须对出现的这些异常进行catch所以面对这种异
Wesley13 Wesley13
3年前
JAVA学习笔记 之 异常
异常的概述代码在运行时期发生的问题就称之为异常。在java中,异常被封装成为了一个类,当程序出现了异常类中的问题时,异常的信息(如位置和原因)就会被抛出。在java中用Exception来描述异常,publicclassExceptionextendsThrowable则是异常的继承体系。 Throwable是所有错误或异常的
Wesley13 Wesley13
3年前
Java 异常处理
完善的异常处理有利于程序稳定。不要不停的catch异常。什么是异常??定义:异常是一个事件,它发生在程序的执行过程中,会破坏程序的正常执行在一个错误发生会在一个方法时,创建一个Exception对象来处理来保证程序能继续执行下去。当异常发生时,JVM会搜索调用栈上的所有方法,若没有找到合适的异常处理方法,JVM将会终
Stella981 Stella981
3年前
PlayJava Day020
1.异常Exception补充:①错误(Error)指的是致命性错误,一般无法处理②异常以类的形式封装程序可以处理的异常对应的类是java.lang.Exception及其子类运行时异常对应的类是java.lang.RuntimeException错误异常对应的类是java.lang.Error③异常相关类的继承树:java.la
Wesley13 Wesley13
3年前
Java异常处理的最佳实践
Java异常处理的最佳实践为什么要有最佳实践我们在写程序是不可避免的要对代码进行异常处理,但是有时对异常的处理会使我们的程序变的更加糟糕,这是我们所不想看到的。所以,我们再进行异常处理时需要遵循一定的套路,来降低异常处理对我们程序的影响。异常产生的原因一般来说,java中的异常会
Wesley13 Wesley13
3年前
Java异常架构
Java异常简介Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what,where,why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息