异常的概述
理想中你写的代码永远是正确的,用户也永远会规范的输入数据。但是,在现实生活中往往总会有一些问题的出现是不可预见的。
所以在Java中,将程序运行期间发生的不期而至的各种意外状况(除开发过程中的语法错误和逻辑错误)称为异常。
异常的种类
Java异常是Throwable子类的实例化对象。Throwable有两个重要的子类:Exception(异常)和Error(错误)。二者都是Java异常处理的重要子类,各自又都包含大量子类。
1、Error类及其子类对象从技术上说不是异常,它们代表了程序运行时Java系统内部的错误,与程序设计者的操作无关。
2、Java将异常类Exception分为两类:运行时异常(RuntimeException)和编译时异常。运行时异常包含其Runtime Exception类及其子类,而除此之外的Exception类及其子类属于编译时异常。
异常的处理
第一种方式:用户程序自定义异常和应用程序特定的异常,必须借助throw和throws语句来抛出异常
- throws语句
throws用在声明方法时,表示该方法可能要抛出异常,调用者必须作出处理,捕获或者继续抛出异常(直至异常被处理或者异常抛到JVM,程序终止)。
(修饰符)(返回值类型)(方法名)(参数列表)throws Exception1,Exception2...{
...
}
- throw语句
java异常体系中的异常都是在运行时由系统抛出,用户自定义的异常必须自行抛出。
throw语句,它抛出的不是异常类,而是异常对象,每次抛出一个对象(抛出异常是在异常发生之前,起到保护作用),一但抛出,程序终止。
throw new 异常类型;//抛出异常对象
第二种方式:使用try-catch-finally语句进行异常的捕捉。
try{
//可能出现的异常
}catch(异常类型1 变量名1){
//处理异常的方式1
}catch(异常类型2 变量名2){
//处理异常的方式2
}
...
finally{
//一定会执行的语句
}
假设执行try语句块抛出异常,程序马上转到匹配成功的catch语句块执行,完成后会执行finally语句块,结束后再去执行后续代码。
自定义异常
某些特殊问题的处理,需要用到自定义异常并自行处理
自定义异常中至少定义两个构造方,一个是无参的构造方法,另一个是带String对象参数的构造方法,将此对象传递给父类Exception的相同构造方法。
自定义异常在程序中必须通过throw手动自行抛出
public class MyException extends Exception{
private String msj;
public MyException(){
super();
}
public MyException(String msj){
super(msj);
}
}
public class Test {
public void Test()throws MyException{
throw new MyException("抛出自定义异常");
}
}
public class Main {
public static void main(String[] args) throws MyException {
Test t = new Test();
t.Test();
}
}