Java基础进阶-6-Exception

目录

1、继承关系

2、异常处理

3、try/catch块


1、继承关系

我们常见的Exception都继承于Throwable类,除了我们无法控制OOM异常的Error分类外,我们可以接触到的异常主要分为两类:1、运行时异常(非检查异常);2、非运行时异常(检查异常)

2、异常处理

 对于RuntimeException,我们一般是不需要用try/catch块处理的,因为大部分的RuntimeException都是因为逻辑问题导致的,比如ArrayIndexOutOfBoundsException。

try/catch 块是用来处理真正的异常的,也就是检查异常,对于逻辑导致的RuntimeException,我们尽量不用try处理,而应该暴露异常,然后完善逻辑。

下面的ArrayIndexOutOfBoundsException用了try块,只是为了讲解try的作用。

   /**
     * 1、对于检查异常,调用方必须处理该异常
     * 2、处理方式一:加try 块
     * 3、处理方式二:继续抛出异常,让更上一层调用方处理
     */
    private static void testTry2() throws IOException{
        testIOException();
    }

    /**
     * 检查异常:1、我们必须声明一下它可能抛出异常(throws IOException )
     *          2、该异常也一定会抛给调用方
     */
    private static void testIOException() throws IOException {
        throw new IOException ("IO出问题了!");
    }

3、try/catch块

  /**
     * 1、对于非检查异常,我们不加try catch 块也不会报错
     * 2、但是,如果我们不处理异常,程序运行时将直接奔溃
     * 3、在try catch模块中我们可以尝试修复异常,
     */
    private static void testTry() {
        try {
            testException();
            System.out.println("发生异常后,会立马转到catch模块,所以我是不会被打印的");
            return;
        } catch (ArrayIndexOutOfBoundsException e) {
            //尝试修复异常····
            e.printStackTrace(); // 如果无法恢复异常,我们至少应该打印异常信息
        }finally {
            System.out.println("不管有没有return,我都会执行");    // 不管try 或者catch块中有没有return 语句,这里都会执行
        }
        System.out.println("处理异常后,我还能运行!");    //因为我们处理了异常,所以往后的程序还能继续运行
        testTry1();
    }

    private static void testTry1() {
        testException();
        System.out.println("不处理异常,我无法运行!");     //到这里之前程序就奔溃了,所以这行不会打印出来
    }


    /**
     * 非检查异常:我们可以不声明抛出的异常
     */
    private static void testException() {
        throw new ArrayIndexOutOfBoundsException("指针越界了!");
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创文章 120 获赞 34 访问量 28万+

猜你喜欢

转载自blog.csdn.net/qq_34589749/article/details/105289555