[Java]--java异常

🍓作者@ 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 Exception
2. Error 指的是 Java 虚拟机无法解决的严重问题,比如: JVM 的内部错误、资源耗尽等,一旦发生必须修改程序;
3. Exception 异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说的异常就是Exception
4.在Java中,异常处理主要的5个关键字: throw、try、catch、fifinal、throws。
异常的抛出和捕获:

throws:

        (在方法上声明抛出异常)
通过throws关键字可以声明你想要抛出的异常: 

通过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)
        急急急急急急急急急急急急急急急急急
*/

【注意事项】:

  1. 这个异常不会上报,自己把这个事儿处理了,异常抛到此处为止,不再上抛了。
  2. 只要异常没有捕捉,采用上报的方式,此方法的 后续代码不会执行
  3. try语句块中的某一行出现异常,该行 后面的代码不会执行
  4. 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 {
    //此处的语句无论是否发生异常,都会被执行到
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Autumn60

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值