我对Java异常的理解

Java异常处理

我们知道在编写程序的过程中,遇到异常是肯定的事情。那么我们会遇到哪些异常呢?下面我们就简单说一下,异常通常是一下几大类:①检查性异常、②运行时异常、③错误。那么我分别说一下这几个情况:

检查性异常:最具代表的是检查性异常是用户错误或问题引起的。这个异常是不能被简单忽略的

运行时异常:运行时异常是最有可能被程序员避免的异常,与检查性异常想法,运行时异常可以编译时被忽略。

错误:是脱离程序员控制的问题。错误在代码中通常被忽略。

具体的一个相关关系我们将上图展示。

Error和Exception

我们都知道Error和Exception都是Java中异常处理的重要子类,我们都知道其包含大量子类,而且这两个类都是继承于Throwable类。

其中Error代表的是错误(编译或系统错误),不允许被捕获。其中OutOfMemoryError和IOError继承Error。

那Exception类中代表Java的异常,可以进行捕获处理。其中Exception中又分为运行异常类和非运行异常类。运行时异常(RuntimeException)其中运行异常类我们都知道主要是以下类型:①NullPointerException(空指针异常)、②ArithmeticException(算术异常)、ClassCastException(对象转换异常)、NumberFormatException(数字格式错误异常)、ArrayIndexOutOfBoundsException(数组下标越界异常)等。运行时异常类主要是程序程序逻辑错误造成的:非运行类时异常(必须处理):其分类主要是IOException、SQLException等以及用户自定义的Exception异常。我们必须对其进行处理,否则程序没有办法编译成功。

那我们刚刚说到的自定义异常是啥,是我们在进行异常处理时总会遇到Java没有内置的异常,此时我们需要通过继承Exception的子类来进行实现。用新定义的异常来覆盖原有的异常信息的过程。

异常相关的关键字:

try、catch、finally、throw、throws。其中需要着重提的是:throw:是用来扔出一个异常;throws:用来声明一个方法可能抛出一个异常。因为throw和throws很相似,所以很多时候我们容易弄错,所以我这里把具体使用方法用代码展示一下。

public class tangTest
{
  public void test throws RemoteException
  {
    throw new RemoteException();
  }
}

这里我还需要着重提一下关于多重捕获块,有的小伙伴可能还没有听过这个名词,别着急,慢慢给你说。多重捕获块其实和我们判断语句case比较相似,具体使用方法我马上用代码给展示出来。

try{
   // 程序代码
}catch(异常类型1 变量1){
  // 程序代码
}catch(异常类型2 变量2){
  // 程序代码
}catch(异常类型3 变量3){
  // 程序代码
}

除此之外,我们在处理异常的时候有两种情况:主要是自己处理或者进行向上抛出异常(即交给调用者处理)。那怎么区分这两种呢,就是如果我们知道如何处理就进行自己处理,如果不知道如何处理我们就交给调用者处理。

finally和return

关于这个方法是我要着重谈一谈的地方。因为我们知道在进行异常处理的时候,我们会通过throw进行异常抛出,具体我们在抛出异常的时候会使用到try、catch、finally这三个必须有try,剩下两个中选一个。如果try中和catch中存在return的时候,我们return中语句会暂存到内存中,当我们finally语句执行完成之后,我们就会将暂存的return语句进行执行。如果这个时候我们我们finally中也有return语句,那么我就以finally中return来进行执行,执行后将不再执行try或者catch中的return。

try-with-resources

在jdk7之前所有被打开的资源都必须被开发者手动关闭,否则就会造成资源泄露。

在JDK7之后,新增的try-with-resource语法糖来打开资源,并在语句执行完确保每个资源都会自动关闭。具体使用方法如下:

class tangTest {
    public static void main(String[] args) throws IOException{
        try (Scanner scanner = new Scanner(new File("Java.txt"));
            PrintWriter writer = new PrintWriter(new File("JavaScript.txt"))) {
            while (scanner.hasNext()) {
                writer.print(scanner.nextLine());
            }
        }
    }
}

以上都是关于异常比较简单的内容(我理解的),可能存在问题,希望指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值