JAVA_异常

异常概念理解

程序执行过程中出现的不正常情况,虚拟机会将异常信息打印到控制台上,为了增强程序的健壮性

异常的存在形式

  1. 异常在java中以类的形式存在,每一个异常类都可以创建异常对象

异常发生的时间

  1. 都是发生在运行阶段
  2. 编译时异常是因为必须在编译阶段预先处理,否则会报错,所以叫编译时异常
  3. 异常是以类的形式存在,发生异常时都会new一个异常对象,只有在运行阶段才可以new对象

异常的分类

  1. 主要分为:错误,受控异常,非受控异常
  2. 错误:程序中出现了error,无法恢复,只能重新启动应用程序
  3. 受控异常:出现了这种异常必须处理,不处理的话程序无法编译通过,又称"编译时异常"
  4. 非受控异常:出现了这种异常可以不处理,例如一个数字被0除的异常,又称"运行时异常"

处理异常的手段

  1. 两种方式,分别是使用throws关键字,将异常抛给上级,另一种是使用try...catch语句进行捕捉
  2. 如果持续使用throws关键字进行上抛,最终会抛给main(),然后是JVM,此时程序会直接结束,所以建议在main方法中的异常使用try...catch进行捕捉

注意

  1. 出现编译时异常的时候,需要考虑采用哪种处理方式
  2. 不要在main()方法中使用上抛的处理方式
  3. 使用try...catch的时候,可以将异常信息打印出来
  4. throws可以抛出多个异常,用,隔开
  5. 使用throws时,如果程序发生异常,后续代码无法执行
  6. 使用try...catch时,如果程序发生异常,try语句快中,异常代码的后续代码无法执行,try...catch处理完之后,后续代码可以正常执行
java 复制代码
public class ExceptionTest01 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NumberFormatException nfe = new NumberFormatException("数字格式异常对象");
        System.out.println(nfe);
        // 调用doSome()方法
        // 如果没有在编译的时候处理,编译会报错
        //doSome();
        try {
            doSome();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    /*
    * 该方法使用了throws ClassNotFoundException
    * 表示
    * 1、该方法在执行的时候可能会抛出ClassNotFoundException异常
    * 2、ClassNotFoundException的父类是Exception,属于编译时异常,则在调用的时候需要手动处理
    * */
    public static void doSome() throws ClassNotFoundException{
        System.out.println("HelloWorld");
    }
}

异常对象常用的方法

  1. 获取异常简单的描述信息:String msg = exception.getMessage();
  2. 打印异常追踪的堆栈信息:exception.printStackTrace();
java 复制代码
public class ExceptionTest03 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NullPointerException e = new NullPointerException("空指针异常");
        // 获取异常的简单信息
        String msg = e.getMessage();
        System.out.println(msg);
        // 打印异常堆栈信息,是采用异步线程的方式打印的
        e.printStackTrace();
        System.out.println("HelloWorld");
    }
}

java.lang.NullPointerException: 空指针异常
空指针异常
    at java_SE/com.javase.exception.ExceptionTest03.main(ExceptionTest03.java:9)
HelloWorld

finaly语句

  1. 必须要和try...catch语句一起联合使用
  2. finally子句中的代码是最后执行的,并且一定会执行
  3. 主要用于流的关闭,因为流在使用完之后是一定要关闭的,如果在try语句中关闭,如果出现了异常,异常后面的代码执行不了,有可能没有关闭流

自定义异常

java 复制代码
public class MyException extends Exception {
    public MyException() {
    
    }
    public MyException(String s) {
        super(s);
    }
}
java 复制代码
public class MyExceptionTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyException e = new MyException("用户名不能为空");
        e.printStackTrace();
        String msg = e.getMessage();
        System.out.println(msg);
    }
}
相关推荐
专注API从业者9 分钟前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠26 分钟前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY1 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克31 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠2 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌2 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局2 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
阿丰资源3 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it3 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java
消失的旧时光-19434 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解