【JavaEE重点知识归纳】第11节:认识异常

目录

一:异常的概念和体系结构

1.概念

2.体系结构

3.异常分类

二:异常的处理

1.防御式编程

2.异常的抛出

3.异常的捕获

4.异常的处理流程

三:自定义异常


一:异常的概念和体系结构

1.概念

(1)在Java中,在程序执行过程中发生的不正常的行为称为异常

(2)常见的的异常

2.体系结构
3.异常分类

(1)编译时异常(受查异常)

编译时报错

(2)运行时异常(非受查异常)

比如:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException

注意:编译时出现的语法错误不能称为异常

二:异常的处理

1.防御式编程:

(1)LBYL:事前防御型(if)

(2)EAFP:事后认错型(try、catch、finally)

2.异常的抛出

(1)在Java中,异常处理主要的5个关键字:throw、try、catch、final、throws

(2)抛出异常:throw必须写在方法体里面,异常一旦抛出,后面的代码就不会执行

throw new xxxException("异常产生的原因");

3.异常的捕获

(1)异常声明throws:通过throws处理编译时异常

【这个详细代码在后面自定义类型】

(2)try-catch

throws对异常并没有真正处理,而是将异常报告给抛出异常方法的调用者,由调用者处理。如果真正要对异常进行处理,就需要try-catch

语法格式:

try{

//将可能出现异常的代码放在这里

}catch(要捕获的类型 e ){

//如果try中的代码抛出异常了,此处的catch捕获时异常类型与try中跑出的类型一致,或者是try中抛出的异常的父类时,就会被捕获到

//对异常就可以正常处理,处理完毕后,跳出try-catch结构,继续执行后续代码

}

catch(要捕获的类型 e ){

//try中可能抛出多个不同的异常对象,则必须使用多个catch来捕获

}finally{

//此处代码一定会执行

}

//后续代码

//当异常被捕获到了,异常就被处理了,这里的后续代码一定会被执行到

//如果捕获了,但是捕获类型不同,就为白捕获,这里的代码也不会执行到

4.异常的处理流程

(1)程序先执行try中的代码

(2)如果try中的代码出现异常,就会结束try中的代码,看catch中的异常类型是否匹配

(3)如果找到匹配的异常类型,就会执行catch中的代码

(4)如果没有找到匹配的异常类型,就会向上传递到上层调用者

(5)无论是否找到匹配的异常类型,finally中的代码都会被执行到(在该方法结束之前执行)

(6)如果上层调用者没有处理的了异常,就会继续向上传递

(7)一直到main方法也没有合适的代码处理异常,就会交给JVM来进行处理,此时程序就会异常终止

三:自定义异常

1.前提

Java中虽然内置了丰富的异常类,但是并不能完全表示实际开发中遇到的一种异常,此时就需要维护复合实际情况的异常结构

2.具体方式

(1)自定义异常类,然后继承自Exception或RunTimeException

(2)实现一个带有String类型参数的构造方法,参数含义:出现异常的的原因

(3)

复制代码
public class PasswordException extends Exception{
    public PasswordException(String message){
        super(message);
    }
}

public class NameException extends Exception{
    public NameException(String message){
        super(message);
    }
}

public class Login {
    private String name="admin";
    private String password="1234";
    
    public static void loginInfo(String name,String password) throws NameException, PasswordException {
            if(!name.equals(name)){
                throw new NameException("用户名错误");
            }
            if(!password.equals(password)){
                throw new PasswordException("用户名错误");
            }
            System.out.println("登陆成功");
    }
    public static void main(String[] args) {
        try {
            loginInfo("amdin","1234");
        } catch (NameException e) {
            throw new RuntimeException(e);
        } catch (PasswordException e) {
            throw new RuntimeException(e);
        }
    }
}
3.注意事项

继承自Exception的异常默认是受查异常;继承自RunTimeException的异常默认是非受查异常

相关推荐
救救孩子把32 分钟前
Mac 环境下 JDK 版本切换全指南
java·开发语言·macos
路飞雪吖~36 分钟前
【Linux】共享内存
java·linux·服务器
caihuayuan41 小时前
鸿蒙AI开发:10-多模态大模型与原子化服务的集成
java·大数据·sql·spring·课程设计
张哈大1 小时前
【 Redis | 实战篇 秒杀优化 】
java·数据库·redis·笔记·缓存
低维歌者1 小时前
python训练营day27
java·开发语言·python
SuperherRo1 小时前
Web开发-JavaEE应用&SpringBoot栈&SnakeYaml反序列化链&JAR&WAR&构建打包
前端·java-ee·jar·反序列化·war·snakeyaml
大帅不是我1 小时前
Python多进程编程执行任务
java·前端·python
purrrew2 小时前
【Java ee初阶】jvm(3)
java·jvm
Hello World......4 小时前
互联网大厂Java面试:从Spring到微服务的全面探讨
java·spring boot·spring cloud·微服务·面试·技术栈·互联网大厂
拾贰_C4 小时前
【SpringBoot】MyBatisPlus(MP | 分页查询操作
java·spring boot·后端·spring·maven·apache·intellij-idea