java基础之异常

924 阅读2分钟

一.java异常体系

java-basic-exception-1.png Throwable 是 Java 语言中所有错误与异常的超类。

  • Error类及其子类:表示程序中出现了无法处理的严重错误
  • Exception :程序本身可以捕获并且可以处理的异常。Exception 这种异常又分为两类:RuntimeException(运行时异常)和非RuntimeException(编译时异常)。
    • RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
    • 非RuntimeException(编译异常):编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了。

二.异常处理

如果程序出现了异常需要我们自己来处理,有两种方案。

  • try...catch..
  • throws

1.使用try...catch...处理异常

  • 格式
try{
     可能出现的异常名
 }catch(异常类名 变量名){
      异常的代码处理;
 }
  • 执行流程:程序从try里面的代码开始执行,出现异常,会自动生成一个异常类对象,该异常对象将被提交给java运行时系统。当Java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理,执行完毕后,程序可以继续往下执行。

2.使用throws处理异常

虽然我们通过try...catch...可以对异常进行处理,但是并不是所有的情况我们都有权限进行异常的处理。也就是说,有些时候可能出现的异常是我们处理不了的,这个时候该怎么办呢?针对这种情况,java提供了throws的处理方案。

  • 格式

throws 异常类名;

  • 示例(若声明多个异常,则使用逗号分隔)
public static void method() throws IOException, FileNotFoundException{
    
}

3.自定义异常

  • 格式:
public class 异常类名 extends Exception{
     无参构造方法
     带参构造方法
     }
  • 范例:
public class ScoreException extends Exception{
    public ScoreException()
    public ScoreException(String message){
    super(message);
    }
  }

4.throws和throw的区别

throwsthrow
用在方法声明后面,跟的是异常类名用在方法体内,跟的是异常对象名
表示抛出异常,由该方法的调用者来处理表示抛出异常,由方法体内的语句处理
表示出现异常的一种可能性,并不一定会发生这些异常执行throw一定抛出了某种异常