Java异常讲解

  • RuntimeException:运行时异常,编译阶段不会出现异常提醒,是运行的时候出现的,也叫非检查异常(Unchecked Exceptions).

  • 非运行时异常: 编译异常 ,也叫检查异常(Checked Exceptions).

java 复制代码
package JavaProjets;  
  
import java.text.SimpleDateFormat;  
import java.util.Date;  
/*  
 * author: Warren */public class Main {  
    public static void main(String[] args) {  
        //编译时异常,必须处理,不然代码报错  
//        String time="2021-09-10";  
//        SimpleDateFormat sdf=new SimpleDateFormat(time);  
//  
//        Date date=sdf.parse(time);  
//        System.out.println(date);  
  
        //运行时异常,编译阶段不需要处理  
//        int []arr={1,2,3};  
//        System.out.println(arr[5]);  
    }  
}

异常的作用:查看bug的信息,或者作为方法的一种特殊的返回值,告诉调用者底层的执行情况.

处理异常
  • jvm处理异常的默认方式:把异常的关键信息打印在控制台,并终止程序的执行,出现异常位置下面的代码不再执行.
  • 捕获异常:使用try....catch,可以让程序继续往下执行而不停止.
java 复制代码
package JavaProjets;  
  
import java.text.SimpleDateFormat;  
import java.util.Date;  
/*  
 * author: Warren */public class Main {  
    public static void main(String[] args) {  
  
        int []arr={1,2,3,4};  
        try{  
            System.out.println(arr[8]);  
        }catch(ArrayIndexOutOfBoundsException e){  
            System.out.println("你的索引有问题");  
        }  
    }  
}
  • 如果try中的代码没有问题,则不会执行catch中的代码.
  • 如果try中代码出现多个错误,则要写多个对应的catch语句与之对应.
  • 如果我们要捕获多个异常,而且这些异常存在父子关系,那么父类异常一定要写在子类异常的下面.
  • 如果try中的异常没有被捕获,会按照 Jvm 默认的处理方式处理异常,终止后面的代码执行.
  • 示例:
java 复制代码
package JavaProjets;  
/*  
 * author: Warren */public class Main {  
    public static void main(String[] args) {  
        int[] arr = {1, 2, 3, 4, 9};  
        System.out.println(getMax(arr));  
  
    }  
    public static int getMax(int[] arr) {  
        if (arr == null || arr.length == 0) {  
            throw new NullPointerException();  
        }  
        if (arr.length == 0) {  
            throw new ArrayIndexOutOfBoundsException();  
        }  
        int max = 0;  
        for (int i = 0; i < 5; i++) {  
            max = arr[0];  
            if (arr[i] > max) {  
                max = arr[i];  
            }  
        }  
        return max;  
    }  
}
常用方法

printStackTrace:只会打印错误信息,不会停止程序的运行.

自定义异常

自定义异常类继承 Exception 类来创建受检异常,或继承 RuntimeException 类来创建非受检异常

自定义检查时异常(继承Exception)
java 复制代码
// 自定义受检异常,继承Exception
public class MyCheckedException extends Exception {

    // 默认构造方法
    public MyCheckedException() {
        super();
    }

    // 带有错误消息的构造方法
    public MyCheckedException(String message) {
        super(message);
    }

    // 带有错误消息和原因的构造方法
    public MyCheckedException(String message, Throwable cause) {
        super(message, cause);
    }

    // 带有原因的构造方法
    public MyCheckedException(Throwable cause) {
        super(cause);
    }
}
自定义非检查异常(继承 RuntimeException
java 复制代码
// 自定义非受检异常,继承RuntimeException
public class MyUncheckedException extends RuntimeException {

    // 默认构造方法
    public MyUncheckedException() {
        super();
    }

    // 带有错误消息的构造方法
    public MyUncheckedException(String message) {
        super(message);
    }

    // 带有错误消息和原因的构造方法
    public MyUncheckedException(String message, Throwable cause) {
        super(message, cause);
    }

    // 带有原因的构造方法
    public MyUncheckedException(Throwable cause) {
        super(cause);
    }
}
相关推荐
就叫_这个吧6 分钟前
Activiti7工作流入门+案例应用
java·activiti7·工作流
Z_W_H_14 分钟前
minikube start --driver=docker --memory=4000mb出现PROVIDER_DOCKER_NEWGRP
java·docker·minikube
折哥的程序人生 · 物流技术专研22 分钟前
第3篇:手写促销策略引擎(满减、打折、立减)
java·设计模式·策略模式·开闭原则·编程实战·扩充系列·促销引擎
阿成学长_Cain23 分钟前
Linux talk 命令详解:经典终端实时聊天工具,无需图形界面即可对话
linux·运维·前端
lichenyang45335 分钟前
从零开始写 HarmonyOS Web 容器:先让 ArkWeb 加载本地 H5
前端
kyriewen42 分钟前
一个看不见的撇号,让Claude Code追踪了中国开发者三个月
前端·ai编程·claude
xxie1237941 小时前
Python装饰器与语法糖
开发语言·python
莫生灬灬1 小时前
DY联系人聊天Web面板支持获取联系人/聊天记录/发送消息
前端·chrome·websocket·c#
郑州光合科技余经理1 小时前
海外外卖平台源码改造实战——多语言核心代码实现
java·开发语言·前端·后端·mysql·架构·php
耀耀_很无聊1 小时前
12_Redis Lua 脚本踩坑:为什么 tonumber(ARGV[x]) 会得到 nil?
java·redis·lua