写在前面

Java学习笔记(五)

笔记

RuntimeException

常见的RuntimeException:

  1. ArithmeticException异常
    int a = 0;
    int b = 1;
    //System.out.println(b/a);//ArithmeticException异常
    if(a != 0) {
    System.out.println(b/a);
    }
    
  2. NullPointerException异常(空指针异常:通常是增加非空判断)
    String str = null;
    //System.out.println(str.length());//空指针异常
    if(str != null) {
    System.out.println(str.length());
    }
    
  3. ClassCastException异常(强制转型的时候:先判断类型,再转型)
    class Animal{
    
    }
    class Dog extends Animal{
    
    }
    class Cat extends Animal{
    
    }
    public class Test5 {
       public static void main(String[] args) {
           Animal a=new Dog();
           //Cat c=(Cat)a;//ClassCastException异常
    
           if (a instanceof Cat) {
               Cat c = (Cat) a;
           }
       }
    }
    
  4. ArrayIndexOutOfBoundsException异常(数组越界异常)

  5. NumberFormatException异常( 数字格式化异常:可以引入正则表达式判断是否为数字)

CheckedException异常

try/catch捕获异常

  • try:指定一段代码,这段代码就是异常捕获并处理的范围。执行过程中,任意一条语句产生异常,就会跳过这条语句后面的的代码(即使后面的异常处理代码执行结束,也不会再回到try执行没有执行的代码)。

  • catch:一个try语句可以有一个或多个catch语句,用于处理可能产生的不同类型的异常对象。常用的一些方法都继承自Throwable类。如果异常有继承关系,一般先捕获子类异常再捕获父类异常。

  • finally:不管是否发生异常都会执行的语句,一般会放在finally语句中(关闭文件流、释放数据库连接)。

  • try-catch-finally:首先执行try语句块。如果try语句没有出现异常则在执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。catch语句块执行完后程序会继续执行finally语句块。finally语句如果有的话,则不管是否发生异常,finally语句都会被执行。

    注意

    1. try和catch块中存在return语句时,finally语句也会执行。在执行完finally语句后再通过return退出。
    2. finally语句块只有一种情况是不会执行的,那就是在执行finally之前遇到了System.exit(0)结束程序运行

throws声明异常

  当CheckedException产生时,有些情况下不一定要立刻处理它(或者不能确定如何处理),可以把异常throws出去(在方法首部声明可能抛出的异常,可以将多个可能的异常声明在首部,用逗号隔开)。

  在调用抛出了异常的方法时,必须处理异常或者接着向上层抛出异常,知道main方法抛出给jre。

  子类重写父类方法时,如果父类方法有声明异常,那么子类声明的异常范围不能超过父类声明的范围。


道也者,不可须臾离者也,可离非道也。