🍓作者@ Autumn60
🏄欢迎关注:👍点赞🙌收藏✍️留言
👲今日鸡汤:人生没有如果,只有后果和结果,少问别人为什么,多问自己凭什么!
1.什么是异常?
- 程序报错就是异常(就像人会生病)
- 异常的作用:让程序有健壮性
- 健壮性具体指的是系统在不正常的输入或不正常的外部环境下仍能表现出正常的程度.
2.异常的体系结构及分类:
异常可能在编译时发生,也可能在程序运行时发生,根据发生的时机不同,可以将异常分为:
1.编译时异常 / 受查异常 如果你不处理,编译都不会通过;
2.运行时异常 / 非常受查异常
Error和Exception都是继承Throwable;
异常分为受查异常,和受查异常,下面图例上的实现clone接口就是典型的受查异常(编译时期异常)
图例及代码:
代码:
class Student implements Cloneable{ @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } public class Code4_4 { public static void main(String[] args) { Student s1 = new Student(); s1 = s1.clone(); }
[ 注意事项 ] :
1. Throwable : 是异常体系的顶层类,其派生出两个重要的子类 , Error 和 Exception2. Error : 指的是 Java 虚拟机无法解决的严重问题,比如: JVM 的内部错误、资源耗尽等,一旦发生必须修改程序;3. Exception : 异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说的异常就是Exception 。4.在Java中,异常处理主要的5个关键字: throw、try、catch、fifinal、throws。
异常的抛出和捕获:
throws:
(在方法上声明抛出异常)
通过throws关键字可以声明你想要抛出的异常:
![](https://i-blog.csdnimg.cn/blog_migrate/0058ffc788f8c50ec409d5bdd6de7961.png)
通过throws在main方法后面声明抛出异常 :
class Student implements Cloneable{
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class Code4_5 {
public static void main(String[] args) throws CloneNotSupportedException{
//main方法后面通过throws来抛出异常给jvm处理
Student s1= new Student();
s1.clone();
}
throw:
在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者,比如:参数检测。在 Java 中,可以借助 throw 关键字,抛出一个指定的异常对象,将错误信息告知给调用者。
手动抛出一个指定的异常给调用者
public static void main(String[] args) {
int a = 0;
int b = 10;
if (a == 0) {
throw new ArithmeticException("除0异常");
}
}
try catch
语法以及代码示例:
public static void main(String[] args) {
int a = 0;
int b = 10;
try{
int c = b / a;
} catch (ArithmeticException e) {
e.printStackTrace();
}
System.out.println("急急急急急急急急急急急急急急急急急");
}
/*
执行结果
java.lang.ArithmeticException: / by zero
at Code4_5.main(Code4_5.java:91)
急急急急急急急急急急急急急急急急急
*/
【注意事项】:
- 这个异常不会上报,自己把这个事儿处理了,异常抛到此处为止,不再上抛了。
- 只要异常没有捕捉,采用上报的方式,此方法的
后续代码不会执行
。- try语句块中的某一行出现异常,该行
后面的代码不会执行
。- try…catch捕捉异常之后,后续代码可以执行。
自定义异常:
类继承RuntimeException类,就可以自定义异常
public class ChickException extends RuntimeException{
public ChickException() {
}
public ChickException(String message) {
super(message);
}
}
public static void main(String[] args) {
int a = 1;
int b = 10;
ChickException chickException = new ChickException("鸡瘟来袭");
if(a == 1) {
chickException.printStackTrace();
}
System.out.println("急急急急急急急急急急急急急急急急急");
}
/*
执行结果
ChickException: 鸡瘟来袭
at Code4_5.main(Code4_5.java:89)
急急急急急急急急急急急急急急急急急
*/
finally
重点: finally语句一定是程序最后被执行的
有些特定的代码,不论程序是否发生异常,都需要执行,比如程序中打开的资源 :网络连接、数据库连接、IO 流等, 在程序正常或者异常退出时,必须要对资源进进行回收 。另外,因为 异常会引发程序的跳转,可能 导致有些语句执行不到 , fifinally 就是用来解决这个问题的。
try{
//可能会发生异常的代码
} catch (异常类型 e) {
//对捕获到的异常进行处理
} finally {
//此处的语句无论是否发生异常,都会被执行到
}