Java异常

本文详细介绍了Java中的异常处理,包括异常的概念、分类(检查性异常、运行时异常和错误)、异常体系结构、异常的处理方式(throw、catch、finally)以及自定义异常的使用。提供了一些实际应用中的技巧和最佳实践。
摘要由CSDN通过智能技术生成

目录

异常

1.什么是异常

2.简单分类

(1)检查性异常:用户错误输入,不可预见但能避免

(2)运行时异常:能被程序员避免,也可以在编译时忽略

(3)错误(error):脱离程序员控制的问题,编译期间检查不到。

3.异常体系结构

4.异常的处理

(1)抛出异常:

(2)捕获异常:

5.自定义异常

6.实际应用技巧


异常

1.什么是异常

异常是指程序运行过程中发生的一些不正常事件

如写的计算程序要求用户输入数字,但用户输入的字符串导致程序出错

2.简单分类
(1)检查性异常:用户错误输入,不可预见但能避免
(2)运行时异常:能被程序员避免,也可以在编译时忽略
(3)错误(error):脱离程序员控制的问题,编译期间检查不到。

3.异常体系结构

Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类

Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。

这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,绝大多数是程序运行不允许出现的状况。

Error发生时,Java虚拟机一般会选择线程终止。

Exception一般是由程序逻辑错误引起的,程序可以捕获这些异常并选择处理或不处理,程序应从逻辑角度避免这类异常的发生。

4.异常的处理

关键字:try,catch,finally,throw,throws

(1)抛出异常:

主动抛出异常:

throw new 要抛出的异常类型;

如果在该方法中不处理异常,可将其抛出,但要注意抛出的异常必须要处理(交给其他方法或直接用trycatch包裹该方法)!

 public void test1(int a) throws 要抛出的异常类型 {
        if (a > 0){
            //一般在方法中使用
            throw new Exception();
        }
    }

(2)捕获异常:
public class ExceptionDemo {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
​
        //try{
        // 需要监视的代码
        // }catch(要捕获什么类型的异常)
        // {异常处理代码}
        //finally{
        //最后必定执行的代码
        // }
        try {
            System.out.println(a/b);
        }catch (Exception e){
            System.out.println("出错了");
        }catch (Throwable e){
            System.out.println("出错了");
        }finally{
            //必定执行的代码,一般是善后工作
        }
    }
}

其中finally可以不要,catch可以多个(范围从小到大)

快捷键:IDEA ctrl + alt + t

5.自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常,用户自定义异常类,只需继承Exception类即可。

在大多数自定义异常,仅需继承RuntimeException即可。

在程序中使用自定义异常类,可分为以下几个步骤

(1)创建自定义异常类

(2)在方法中通过throw关键字抛出异常对象。

(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。

(4)在出现异常方法的调用者中捕获并处理异常

public class CustomException extends Exception{
    //数字<10抛出异常
​
    private int num;
​
    public CustomException(int num) {
        this.num = num;
    }
​
    /**
     *
     * @return 异常信息
     */
    @Override
    public String toString() {
        return "CustomException{" +
                "num=" + num +
                "<10"+'}';
    }
}
public class Test {
    public static void main(String[] args) {
        try {
            new Test().test(5);
        } catch (CustomException e) {
            System.out.println(e.toString());
        }
    }
​
    public void test(int a) throws CustomException {
        if (a < 10){
            throw new CustomException(a);
        }
        System.out.println("OK");
    }
}

6.实际应用技巧

(1)处理运行时异常时,采用逻辑去合理规避同时辅助 try-catch 处理

(2)在多重catch块后面,可以加一个catch (Exception)来处理可能会被遗漏的异常

(3)对于不确定的代码,也可以加上 try-catch ,处理潜在的异常

(4)尽量去处理异常,切忌只是简单地调用 printStackTrace0)去打印输出

(5)具体如何处理异常,要根据不同的业务需求和异常类型去决定

(6)尽量添加finally语句块去释放占用的资源

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值