9. 【Java基础】异常处理

文章介绍了在使用Easyexcel时遇到的SLF4J报错及其解决方案,以及Lombok如何简化Java代码,提供了Lombok常用注解的示例。此外,还详细讲解了Java异常的分类,包括运行时异常和编译时异常,并阐述了异常处理机制,如try-catch-finally结构和throw/throws关键字的使用。
摘要由CSDN通过智能技术生成

一:上节课补充知识点

1、运行Easyexcel在控制台报错:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

这个报错不会影响到代码的执行

解决的参考:

This error is reported when the org.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. This happens when no appropriate SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.

2、Lombok使用

在编写实体类时,要写大量的get/set方法及toString方法,如果新增/减少一个属性,那么这些方法又需要重新更改,比较麻烦。

Lombok可以来帮助我们简化一些必须有但显得很臃肿(比如get/set方法)的Java代码的工具,通过使用对应的注解,可以在编译源码的时候自动生成对应的方法。

  • IDEA中,File->Settings->Plugins,搜索Lombok插件下载安装,装好之后重启IDEA
  • Maven的pom.xml文件添加Lombok的依赖坐标
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>
常用Lombok注解
@Data //自动添加get&set方法、toString方法    
@AllArgsConstructor //自动添加有参构造方法
@NoArgsConstructor //自动添加无参构造方法

二:异常及异常处理

异常:代码运行过程中出现的非正常情况,程序本身可以捕获并且可以处理。

例子:除数为0

int i = 10;
int j = 0;
System.out.println(i/j);

上面的代码运行后,没有正常结束退出,而是出现程序异常才退出的。

异常分类

Java中的异常分为了两类:

运行时异常(非检查性异常),继承于RuntimeException

编译时发现不了的问题,但是在代码运行的过程中可能会出现的问题。当出现运行时异常的时候,程序直接就中断了,但是也可以通过异常处理机制,捕捉到异常,恢复程序的继续执行。

  • 不需要强制捕获
  • 常见的有:

NullPointerException:空指针异常
IndexOutOfBoundsException:索引越界异常
ClassCastException:类转换异常
ArithmeticException:算术异常

编译时异常(检查性异常),继承于Exception

编译器在编译你的代码的时候发现你的代码可能会出现的问题,就会提示你要去手动处理这个异常,否则代码编译不通过,所以叫编译时异常。

  • 需要强制捕获,或者用throws声明
  • 常见的有:

InterruptedException:一个线程被另一个线程中断,抛出该异常。
IOException:IO异常
SQLException:SQL异常
ClassNotFoundException:找不到类异常

异常处理

通过try、catch、finally、throw、throws 5个关键字完成

  • try:尝试监听可能抛出的异常代码
  • catch:捕获try语句块中发生的异常
  • finally:最终总是被执行 throw:抛出异常
  • throws:方法后用来声明抛出的异常

当程序出现意外情形,自动生成一个Exception对象通知程序。

方式1:通过try…catch来捕捉异常并进行处理(自己内部处理)

try{
    //可能出现异常的语句
}catch(XXException e){ //异常类 异常对象
    //异常处理
}

方式2:使用throw/throws关键字抛出异常(自己处理不了)

异常直接抛出,给上一级调用者去处理,直到被处理,如果所有上级调用者都不处理就会由java虚拟机处理

throw:在方法里抛出一个捕获的异常或者自己创建的异常

throws:如果方法里发生了一个编译时异常(检查性异常),而代码里面没有将其捕获则必须使用throws关键字将此异常抛出
throws关键字写在方法签名的后面。

finally关键字
可以在 try …catch代码块后面加一个finally的代码块,语法如下:

try{
    ...//代码
}catch(异常类型1 异常的变量名1){
    ...//代码
}catch(异常类型2 异常的变量名2){
    ...//代码
}finally{
    ...//finally代码块
}

无论是否发生异常,finally 代码块中的代码总会被执行
finally中的代码一般用来做收尾工作,如回收资源:数据库的连接释放、文件资源释放…

作业
请为以下程序设计异常处理机制:发生对应异常时将“异常出现”打印到控制台,并将异常抛出给Java虚拟机。

ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("hello");
System.out.println(arrayList.get(1));
Thread.sleep(3000);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值