Java--- 异常

目录

1.什么是异常

2.异常的体系结构

3.优雅的异常处理

 4.自定义异常


1.什么是异常

编程通过, 程序运行的时候, 由于一些外部环境变化,或者程序逻辑问题,造成的运行时错误。

关键字: 编译通过, 运行时可能出现的错误,。

语法错误: 编译不通过,编译错误 最低级的错误。

异常类: 本质还是一个类, 给这一类型的类取一个统一名称。


2.异常的体系结构

 Throwable是java语言中所有错误和异常的超类(万物即可抛)。

 Error为错误,是程序无法处理的。

Exception是程序可以处理的异常。


3.优雅的异常处理

IOT --> 智慧型城市

java之父: 詹姆斯·高斯林 优雅

Think in java(java 编程思想): 埃克尔 (Bruce Eckel) 繁琐

spring 之父: 罗宾·约翰逊

异常处理:

1.try -catch - finally 捕获异常并处理

try{  //试一下
    可能出现异常的代码
}catch(异常类型  变量名){  //捕获异常
    //对捕获到这种异常的处理代码
}
  public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        //两个数相除
        System.out.println("请输入被除数:");
        int  num1 = input.nextInt();
        System.out.println("请输入除数:");
        int num2 = input.nextInt();

        System.out.println(num1+"/"+num2+"="+(num1/num2));

    }

 public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        try {
            //两个数相除
            System.out.println("请输入被除数:");
            int  num1 = input.nextInt();
            System.out.println("请输入除数:");
            int num2 = input.nextInt();
            System.out.println(num1 + "/" + num2 + "=" + (num1 / num2));
            System.out.println("程序结束了....");
        }catch(ArithmeticException ex){  //捕获ArithmeticException异常
            System.out.println(" 除数不能为0 ");
            //调用异常相关方法
        }

    }

 代码运行情况:

  • 第一种情况,当程序正常执行,try中的代码执行完,catch中的代码不会执行,catch后面的代码会执行
  • 第二种情况,当程序发生异常,并且异常的类型与catch小括号的异常一样,try中发生异常处之后的代码不会执行,则执行catch中的代码,catch后的代码也会执行.
  • 第三种情况,当程序发生异常, 并且异常的类型与catch小括号的异常不一样, try中发生异常处之后的代码不会执行,也不执行catch中的代码,catch后的代码也不执行.程序会在发生异常区终止程序.

 

try大括号中的代码: 是 业务代码

catch大括号中的代码: 处理异常的代码

try后面可以接多个catch, 进行多种异常的捕获

1) 多个catch, 如果这些异常类型没有父子关系, 顺便任意

2) 多个catch, 如果这些异常类型有父子关系, 先子后父

3) 在jdk1.7之前每个catch代码段只声明一种其能处理的特定类型的异常,并提供处理的方法。 Jdk1.7之后,一个catch代码可以可以声明多个能处理的特定异常的类型,多个类型之间用”|”隔开

前提要求: 这些异常没有父子关系, try中可以产生异常

finally 代码块: 该代码块,不管是否产生异常, 都会执行的

try{
    
    
}catch(异常类型 e){
    
}catch(异常类型 e){
    
}
...
}catch(异常类型 e){
    
}finally{

}   

1) try-catch-finally 这个三个一定全部存在?

try-catch

try-finally

但是try,catch,finally不能单独存在, catch,finally必须跟着try

2) return 写法:

a. try 中写, try-catch-finally 之外写 return;

b. try 中写, 每个catch中写 return

c. finaly 写; 只写一个return, 不推荐

d. 在try-catch-finally 之外写, 只写一个

方法有return 又有finally, finally中的代码是在return之前执行.

2. throw / throws 抛出异常

throw 异常对象; 具体抛出一个异常对象, 写在方法体内部

 throw作用: 1) 返回异常结果  2) 结束方法

throws 异常类1,异常类2,... 写在方法签名上, 声明该方法可能会抛出什么类型的异常

异常常用的方法:

throws 在方法签名上, 表示这个方法可能会抛出什么类型的异常

throw 抛出的异常类型是RuntimeException类型或者子类, 这个方法可以使用throws 声明,也可以省略

throw 抛出的异常类型是编译异常, 这个方法一定使用throws 声明

编译时异常, 代码必须处理的异常,不处理,编译都不通过,

RuntimeException异常, 可以处理,也可以不处理, 编译不会出错


 4.自定义异常

在实际开发中, 根据项目的业务需求, 把某些情况定义为异常:

删除学生: 通过学号删除, 学号不存在作为一种异常来看, 但是jdk没有这个类型的异常

jdk允许我们程序员根据业务需求, 自定义一些异常类:

步骤:

1) 创建一个类(异常类取名: XxxException)

2) 让这个类继承Exception类(推荐),或者Exception子类

3) 根据Exception的构造方法生成自定义异常类的构造方法

  代码实例:

public class MyException extends Exception {
    public MyException() {
        super();
    }
    public MyException(String msg) {
        super(msg);
    }
    public MyException(Throwable cause) {
        super(cause);
    }
    public MyException(String msg, Throwable cause) {
        super(msg, cause);
    }
}

使用自定义异常类

public String[] xxArray(int length) throws MyException {

    if (length < 0) {

        throw new MyException("数组长度小于0,不合法");

    }

    return new String[length];

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zxmm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值