java中的异常处理及心得

版权声明:本文出自孤星卟哭的博客,原创文章,转载请注明出处。 https://blog.csdn.net/zcy92949/article/details/80074839

前言

先上图,这是我总结的一个关于异常的图,其中包括异常类之间的关系。
异常关系图

1、异常类简单说明

针对上面的图片,首先在java中所有类的父类都是Object,而异常类的父类Throwable继承Object类,同时Throwable下面还包括两个子类Error和Exception,具体解释如下:

  • Error(天灾):个人努力或者计算机系统都无法恢复
  • Eeception(在Java的API中封装了几十个类型):
    1.非检查型异常(还称之为bug,通常是人的问题eg:ArrayIndexOutOfBoundsException)
    编译器在编译时不进行检查,而在运行的时候检查
    2.检查型异常(eg:IoException)
    编辑器在编译时检查
  • 何为非检查型异常,何为检查型异常?
    1.非检查型异常
    调用该方法的方法可以处理可以不处理
    2.检查型异常
    调用该方法的方法需要进行异常处理
  • 总结:我们平时编写的程序极大多数都是非检查型异常,比如数组越界、空指针异常等。

2、异常书写的基本格式

谈到异常及一定要说明一下异常的基本书写格式,以及我当时遇到的坑。
异常基本书写格式
针对异常,最喜欢挖的坑就是关于return,对此,我有一句话总结:
如果try、catch和finally中都有return,finally中的return将覆盖掉其他return语句。
话句话说就是finally中的return必须执行。

3、自定义的异常如何书写?

以下是我当初学习异常时,记录的一个自定义异常。

/**
 * 题目:输出abc时,抛出异常
 * 
 * 说一下整个程序的走向吧,这也是当时我最迷惑的地方。
 * 首先在控制台输入一个字符串,程序会实例化Entity类的对象,调用Entity类中的
 * Letter()方法,并将输入的字符串当做参数传入;如果输入的字符串不是abc,则输出你输
 * 入的内容,如果输入的字符串是abc,则会实例化并调用自定义的异常类,通过throws将这个
 * 异常抛出,之后由catch接收到这个异常对象,之后调用自定义异常类中的getSum()方法。
 * 输出异常,到此结束。呼!!!
 */
public class ExerciseAbnormal {
    public void getSummary() {
        String strLetter = null;
        try {
            @SuppressWarnings("resource")
            Scanner objIn = new Scanner(System.in);
            strLetter = objIn.nextLine();
            Entity objout = new Entity();
            objout.Letter(strLetter);
        }catch(MyException e) {          //catch的作用是抓住异常
            e.getSum();
        }
    }

    public static void main(String[] args) {
        ExerciseAbnormal objSum = new ExerciseAbnormal();
        objSum.getSummary(); 
    }
}

class Entity {
    public void Letter(String r) throws MyException {
        if(r.equals("abc")){
            throw new MyException(); //抛出异常
        }else {
            System.out.print(r);
        }
    }
}

@SuppressWarnings("serial")
class MyException extends Exception {
    public void getSum() {
        System.out.println("输出异常");
    }

}

解题思路以上已经说明,比较容易让人困惑的是throws和throw的区别?

  • throws(用于方法上)代表这个方法可能会抛出异常,如果抛出多个异常,中间可以用逗号隔开
  • throw(用于语句上)代表这里的语句一定需要抛出异常

4、总结

以上就是我对异常的一些基本理解,如有不对之处,希望诸君不吝赐教。

猜你喜欢

转载自blog.csdn.net/zcy92949/article/details/80074839