Java SE day 12 异常

异常(Exception)

使用jdk自带类完成我们的开发. 创建类的对象 有什么方法, 干什么用

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

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

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

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

1. JDK的异常体系结构图

 

2. 对异常处理 优雅的异常处理

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大括号中的代码: 处理异常的代码

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 之外写, 只写一个

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

2) throw / throws 抛出异常

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

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

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

 

异常常用的方法:

public String getMessage()   获取异常的信息
public void printStackTrace()  打印异常的栈跟踪信息

 

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

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

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

 

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

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

自定义异常

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

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

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

步骤:

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

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

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

package com.fs;
​
/**
 * 学号不存在的异常
 *
 */
public class StuNoNotExistsException  extends Exception{
    public StuNoNotExistsException() {
    }
​
    public StuNoNotExistsException(String message) {
        super(message);
    }
​
    public StuNoNotExistsException(String message, Throwable cause) {
        super(message, cause);
    }
​
    public StuNoNotExistsException(Throwable cause) {
        super(cause);
    }
​
    public StuNoNotExistsException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
​
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

在下张仙人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值