【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的异常默认是非受查异常

相关推荐
方也_arkling2 分钟前
【Java-Day12】接口
java·开发语言
SimonKing2 分钟前
Java程序员接入AI的另一种姿势:LangChain4j
java·后端·程序员
vensli16 分钟前
消息跨端架构演进:基于 C++ 的多端一致性研发框架实践
java·人工智能·软件工程·安卓
云烟成雨TD16 分钟前
Spring AI Alibaba 1.x 系列【70】思考模式
java·人工智能·spring
逸Y 仙X16 分钟前
文章六:ElasticSearch 集群通信安全权限
java·大数据·服务器·elasticsearch·搜索引擎·全文检索
瑞雪兆丰年兮25 分钟前
[从0开始学Java|第十六、十七天]项目阶段(拼图小游戏)
java·开发语言
AI人工智能+电脑小能手25 分钟前
【大白话说Java面试题 第85题】【Mysql篇】第15题:MySQL 的事务中,幻读是怎么解决的?
java·开发语言·数据库·mysql·面试
清水白石00830 分钟前
Python 变量的本质:从“盒子思维”到“引用思维”,彻底理解赋值到底发生了什么
java·python·ajax
Solis程序员32 分钟前
TreeMap 核心原理与实战
java·数据结构·算法
一 乐40 分钟前
在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·毕设·在线考试管理系统