java基础回顾--异常

1.java异常结构

Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。
在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。
在这里插入图片描述

  • Error:该类异常由 Java 虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
  • Exception:在Exception分支中有一个重要的子类RuntimeException(运行时异常),该类型的异常自动为你所编写的程序定义ArrayIndexOutOfBoundsException(数组下标越界)、NullPointerException(空指针异常)、ArithmeticException(算术异常)、MissingResourceException(丢失资源)、ClassNotFoundException(找不到类)等异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生;而RuntimeException之外的异常我们统称为非运行时异常,类型上属于Exception类及其子类,从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
  • 区别:Error这一类异常是程序无法处理的。Exception这一类异常我们可以通过try/catch异常捕获或者抛异常进行处理。

2.异常处理

异常处理有以下三种方法:

  • 1.try/catch/finally
  • 2.throw
  • 3.throws抛出异常

try/catch/finally

	 try {
             //代码。。。。
        }catch (xxxx e1){
			//处理异常
        }catch (xxxx e2){
			//异常处理
        }finally {
            //....
        }

注意多个catch时,前面的放小异常,后面放大异常,否则放在后面的小异常会被前面的大异常覆盖。
finally括号中的代码是一定会执行的(如对于使用IO流时,发生异常在finally中把流关闭)。

throw

throw是语句抛出一个异常,一般是在代码的内部,当程序出现某种逻辑错误时同程序主动抛出某种特定类型的异常。

 public static void main(String[] args) {
        String user = "";
       if(user.length()<=0){
           throw new NullPointerException("用户名不能为空");
       }
    }

运行结果:

Exception in thread "main" java.lang.NullPointerException: 用户名不能为空
	at com.exception.MyException.main(MyException.java:14)

throws

throws是将方法中可能产生的异常抛出交给上层调用者去处理。

 public static void testThrows() throws NumberFormatException {
        String str = "exception";
        System.out.println(Integer.parseInt(str));
    }
    
    public static void main(String[] args) {
        try {
            testThrows();
        }catch (NumberFormatException e){
            e.printStackTrace();
        }
    }

运行结果:

java.lang.NumberFormatException: For input string: "exception"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at com.exception.MyException.testThrows(MyException.java:12)
	at com.exception.MyException.main(MyException.java:18)

3.自定义异常

自定义异常继承以下三个类都可以:
Throwable
Exception
RuntimeException

这里以继承RuntimeException举例:

public class MyException extends RuntimeException{
    public MyException() {
        super();
    }
    public MyException(String message) {
        super(message);
    }
    public static void main(String[] args) {
        throw new MyException("错误消息");
    }
}

原创文章 139 获赞 52 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_41262903/article/details/104440047