异常的捕获与处理

常见的异常类型:

  • ArrayIndexOutOfBoundsException 数组下标越界异常
  • NullPointerException (NPE) 空指针异常    当引用数据类型没有引用某个内存空间时 它的值就是null,那么如果null值去使用方法、属性则会报出此异常
  •  ClassCastException 类型转换异常   多态时尤其可能出现,不确定多态的具体类型时 转换可能会出现问题
  • ClassNotFoundException 类找不到异常
  • ArithmeticException 算术异常    除数为0
  •  InputMismatchException 输入不匹配异常

一、了解异常的概念

异常是指在程序(生活/计算机)的运行过程中所发生的不正常的事件,它会中断正在运行
的程序。

public class ExceptionDemo01 {
public static void main(String[] args) {
System.out.println(“*计算开始***“);
int i = 10;
int j = 0;
int temp = i/j; //此处产生异常
System.out.println(temp);
System.out.println(“*计算结束***“);
}
}
// 运行结果:*计算开始***
/*Exception in thread “main” java.lang.ArithmeticException: / by zero
at Exp.ExceptionDemo01.main(ExceptionDemo01.java:8)*/

一旦产生异常之后,异常之后的语句并不会执行,而是直接结束程序,并将错误报告给用户,
如果使用if语句,来判断是否有异常出现,程序可读性就差了很多

为什么使用异常?
更加快速的发现代码中的错误,定位错误,以便程序的修改和调试。

二、Java异常处理机制


1.异常处理
Java提供了一套异常处理机制来解决我们使用过多的if判断问题(补不全、代码维护性变差、阅读困难)。
由下方的这些关键词可以让我们的程序遇到异常时候更加健壮。
Java处理异常的五个关键字:try、catch、finally、throw和throws

2.使用try-catch处理异常
try{
    // 可能会出现异常的代码
}catch(异常类型){
    // 对异常的修复/处理
}

public static void main(){
Scanner input = new Scanner(System.in);
try {
    // 可能出现问题的代码
    System.out.print("请输入第一个整数:");
    int num1 = input.nextInt();
    System.out.print("请输入第二个整数:");
    int num2 = input.nextInt();
    // 计算除法
    int num3 = num1 / num2;
    System.out.println(num1+"/"+num2+"="+num3);
}catch(Exception e) { // 能捕获的异常类型
    System.out.println("出现错误:被除数和除数必须是整数,除数不能为0!");
}
}

3.使用try-catch-finally处理异常
try{
    // 可能会出现异常的代码
}catch(异常类型){
    // 对异常的修复/处理
}finally{
    // 最终执行的代码
}

4.使用多重catch处理异常
try{
    // 可能会出现异常的代码
}catch(异常类型1){
    // 对异常的修复/处理
}catch(异常类型2){
    // 对异常的修复/处理
}....

public static void main(){
Scanner input = new Scanner(System.in);
try {
    // 可能出现问题的代码
    System.out.print("请输入第一个整数:");
    int num1 = input.nextInt();
    System.out.print("请输入第二个整数:");
    int num2 = input.nextInt();
    // 计算除法
    int num3 = num1 / num2;
    System.out.println(num1+"/"+num2+"="+num3);
}catch(InputMismatchException e) { // 能捕获的异常类型
    System.out.println("对不起!请输入整数!");
}catch (ArithmeticException e) {
    System.out.println("对不起!除数不能为0!");
}catch (Exception e) {
    System.out.println("服务器繁忙!");
}
}
System.out.println("程序结束!");

5.使用throw和throws抛出异常
在Java程序中使用throws声明抛出异常:

public static void main(String[] args) {
        try {
            divide();
        }catch(InputMismatchException e){
            System.out.println("被除数和除数必须是整数。");
        }catch(ArithmeticException e) {
            System.out.println("除数不能为零。");
        }catch(Exception e) {
            System.out.println("其他未知异常。");
        }finally {
            System.out.println("感谢使用本程序!");
        }
    }
    public static void divide()throws Exception{
        Scanner in = new Scanner(System.in);
        System.out.print("请输入被除数:");
        int num1 = in.nextInt();
        System.out.print("请输入除数:");
        int num2 = in.nextInt();
        System.out.println(String.format("%d/%d=%d",num1,num2,num1/num2));
    }

throw和throws的区别?

  • throw表示抛出异常  抛出异常后面要跟随异常的对象  用于告知调用者异常的信息(异常对象)后期常用来抛出自定义异常。
  • throws表示声明异常  它是在方法声明上进行指定的,一般表示此方法不处理异常而是向上抛出

6.自定义异常

三、使用日志记录异常的情况

步骤:

  •     下载相应的工具包(sdk):他们一般帮助我们将其打成了jar包
  • 在Java项目中创建一个文件夹(lib)存放jar包

  • 将jar包引入为类库(在jar包上右键 ->  build path -> add to build path)

  • 根据要求和使用说明进行使用
    • 准备一个日志配置文件`log4j.properties`配置日志运行的规则
    • 使用API来进行日志记录
      1. info() 记录普通信息
      2. debug() 记录方便我们调试的信息
      3.  error() 记录错误信息
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值