Java 异常处理

一、异常:写代码时出现的编译或者运行的错误

异常包含了错误的类型、原因以及位置

异常的体系结构:

Throwable()(最顶层)

    Error:出现的不能够处理的严重问题

    Exception:可以处理的问题

二、异常处理

1.jvm处理异常的方式:

如果出现异常没有处理,jvm会帮我们处理,会把异常的类型、原因、位置显示在命令行,并且终止程序,异常后面的代码将不在执行

2.异常处理的方式:

(1)捕获处理

try...catch...语句

try{

  有可能出现问题的代码

}catch(异常对象){

  处理异常

}

执行顺序:首先执行try语句,如果发现异常,异常下面的代码不在执行,直接跳入catch语句中

try{
  System.out.println(1);
  System.out.println(2/i);
  System.out.println(2);
}catch(异常对象){
  System.out.println("0不能为除数");
}
System.out.println(3);
如果i = 0,输出 1
                          0不能为除数
                          3
如果i!=0,输出 1
                        2
                        3

(2)抛出异常

当不想处理异常或没有能力处理时,可以选择抛出异常,谁调用方法谁处理异常,使用关键字throws在方法的声明处抛出异常

jvm调用主方法时会处理抛出的异常

3.如何处理多个异常

(1)可以使用多个try...catch...语句

(2)使用一个try和多个catch

  多个catch之间可以有父类

  平级之间没有顺序关系

  如果有父类,父类异常必须放在后面

三、throwable

常用的方法:;

String getMessage():原因

String toString():类型和原因

void printStackTrace():类型、原因和位置

四、finally

组合try...catch使用,用于释放资源等收尾工作,无论try...catch语句如何执行,finally代码一定会执行

try{

  有可能出现问题的代码

}catch(异常对象){

  处理异常

}finally{

  释放资源

  清理垃圾

}

五、异常分类:

1.运行时期异常:RuntimeException的子类就是运行时异常,在编译时期可以选择处理或者不处理

2.编译时期异常:是Exception的子类,非RuntimeException的子类,在编译时期必须处理

3.(1)throws:处理异常的一种方式,把异常抛出,由调用者来处理

(2)throw:制造异常的方式,并且结束方法

注意:如果抛出(throw)的是编译时期异常,必须在方法声明处抛出(throws)

public static void checkSore(int sorce){
  if(score < 0 || score > 100){
      throw new RuntimeException("考试成绩不符合要求");
  }
  System.out.println("成绩输入正确");
}

(3)为什么IO流要抛出异常的原因是:

在它的构造抛出了IOException,如果调用它的构造必须抛出异常

六、创建自己的异常

如何自定义一个异常类:

写一个类去继承Exceptioon或者RuntimeException,然后实现多个构造即可

public class MyException extends RuntimeException{
  public MyException(){
        super();
    }
    public MyException(String message){
        super(message);
    }
}

此为运行时期异常

你可能感兴趣的:(Java 异常处理)