java异常

异常

异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序

异常处理

try/catch

.....

try{

        //有可能发生异常的代码

}catch(异常类型 e){

    //若发生异常,catch负责捕获(匹配)并处理异常

    //若没有发生异常,则跳过catch

}

.....


异常过程处理

Exception是所有异常类的直接或间接父类

异常类型不匹配时,程序中断运行


try/catch/finally

.....

try{

        //有可能发生异常的代码

}catch(异常类型 e){

        //若发生异常,catch负责捕(匹配)并处理异常

        //若没有发生异常,则跳过catch,执行finally

}finally{

    //finally 用于进行收尾工作(关闭数据库、文件,释放内存等资源)

}

.....

不管是否发生异常,finally都执行

执行finally前,system.exit(0) 正常退出jvm,finally不会执行

catch可以省略,变成try/finally块


return在try/catch/finally块中的执行顺序

顺序执行后返回执行return


异常的分类


Throwable类是 Java 语言中所有错误(Error)或异常(Exception)的父类

Error类表示错误类。仅靠程序本身无法恢复的严重错误

Exception 类表示异常类,可以通过java 异常处理机制处理。


异常分为两种情况

RuntimeException:    运行时异常。不要求程序必须做出处理。是所有运行时异常的父类。

CheckedException:    检查时异常。要求程序必须处理,不处理编译不通过。


运行时异常和检查时异常的区别

运行时异常:包括RuntimeException及其所有子类。不要求程序必须对它们作出处理,比如InputMismatchException、ArithmeticException、NullPointerException等。即使没有使用try-catch或throws进行处理,仍旧可以进行编译和运行。如果运行时发生异常,会输出异常的堆栈信息并中止程序执行。

Checked异常(非运行时异常):除了运行时异常外的其他异常类都是Checked异常。程序必须捕获或者声明抛出这种异常,否则出现编译错误,无法通过编译。


声明异常

一个方法可能存在异常,而此时自身又无法更好的处理,可以交给外界处理。此时用throws声明并抛出异常。

如:public   staticint   div(inta,int b)    throws    ArithmeticException{

}

用throws声明后,调用处需要处理该异常,若是不知道如何处理异常,可继续声明异常,这个过程称为异常上抛


声明异常和方法重载的关系

方法重载与声明异常无关


声明异常和方法重写的关系

1.父类方法声明了异常,子类可不声明任何异常

可以认为父类方法抛出异常,子类在重写过程中把该异常处理掉了,所以子类方法不用声明异常。

2.父类声明了异常(检测时或运行时),子类声明完全一样的异常


手动抛出异常

除了系统自动抛出异常外,有些问题需要开发者手动抛出异常。

而手动抛出异常需要使用关键字throw

public class Student {

     private String name;

     private String gender;


     public String getName() {

         return name;

     }


     public void  setName(String name) {

         this.name = name;

     }


     public String getGender() {

         return gender;

     }


     public void  setGender(String gender) throws  Exception{

         if(gender.equals("男") || gender.equals("女")) {            

              this.gender = gender;

         }else {

              throw new Exception("性别不合法!");

         }

     }


     public  Student(String name, String gender) {

              super();

              this.name = name;

              this.gender = gender;

     }


     public  Student() {

         super();

     }


}

--------------------------------------------

public class Test01 {

     public static void  main(String[] args){

         Studentstu = new Student();

         stu.setName("二狗");

         try {

              stu.setGender("xxx");

         }catch (Exception e) {

              System.out.println(e.getMessage());

         }

     }

}

自定义异常

如果开发者需要手动抛出的异常在系统不存在,可以自定义异常。

如果要自定义异常,首先要确定异常类型,如果异常是运行时异常,必须继承RuntimeException或其子类;如果异常是检查时异常,必须继承Exception或其子类。

异常的命名方式,参考系统命名方式,以Exception结尾。

public classAgeExceptionextends Exception{


     public AgeException(){

         super();

     }


     publicAgeException(Stringmessage) {

         super(message);

     }


}

你可能感兴趣的:(java异常)