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

相关推荐
Dola_Pan14 分钟前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
wang_book17 分钟前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
蜗牛^^O^1 小时前
Docker和K8S
java·docker·kubernetes
从心归零2 小时前
sshj使用代理连接服务器
java·服务器·sshj
IT毕设梦工厂3 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
Ylucius3 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
七夜zippoe4 小时前
分布式系统实战经验
java·分布式
是梦终空4 小时前
JAVA毕业设计176—基于Java+Springboot+vue3的交通旅游订票管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·源代码·交通订票
落落落sss4 小时前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
码爸4 小时前
flink doris批量sink
java·前端·flink