异常概述:

  异常是指在程序运行过程中发生的异常事件 , 如I0溢出,数组下标越界,找不到文件等,这些事件发生会导致程序不能正常运行。因此,为了加强程序的健壮性,在进行程序设计时,必须考虑可能发生的异常事件并要做出相应的处理。Java通过面向对象的方法来处理异常/。如果在一个方法的运行过程中发生了异常,则这个方法生成代表该异常的一个对象,并把它交给运行时系统,运行使系统会寻找相应的代码来处理繁盛的异常。我们吧生成异常对象帮把它交给运行时系统这一过程称为抛出(throw)一个异常。

Java 异常体系 :
Error  : 错误  出现错误引发程序崩溃
Exception  : 分为 IOException 和  RuntimeException引起线程中断, 是所有异常的基类。
checked Exception 检测异常,要求必须被捕获处理,比如IOException
Runtime Exception 运行时异常,也叫做unchecked Exception
  
 
异常的处理方式;
一 : 积极的异常处理方式。 
package javaBasics;

public class test5 {

    public static void main(String[] args) {
        int i = 10;
        int j = 0;
        try{
          int temp = i/j;                        //此处会产生异常
          System.out.println("计算结果:"+temp);
        }catch(Exception e){
            System.out.println("出现异常:"+e);    //打印异常信息
            e.printStackTrace();            //打印完整的异常信息
        }finally{
            System.out.println("不管是否出现异常都执行此代码");
        }
        System.out.println("计算结束");
    }

}

积极的异常处理方式的捕获顺序 ;

 
 1 public class ExceptionDemo2 {
 2     public static void main(String[] args) {
 3         String s = "abc";
 4     try{
 5         s.charAt(5);
 6     }catch(StringIndexOutOfBoundsException e){
 7         System.out.println("StringIndexOutOfBoundsException");
 8     }catch(IndexOutOfBoundsException e){
 9         System.out.println("IndexOutOfBoundsException");
10     }catch (Exception e) {
11         System.out.println("Exception");
12     }
13     }
14 }

 

 二  消极的异常处理方式:

public void test() throws Exception{
        // 消极的异常处理方式, 表示当前方法一旦发生异常,则自己不做处理,而将异常交给上级方法进行处理.
}
 
三  Exception和error:
Exception表示程序中遇到的异常,可以用try catch进行捕获
error一般指jvm错误,程序中无法捕获

(拓展:Throwable是Exception的父类,可不可以直接使用Throwable呢?

首先,使用Throwable捕获异常,在代码中是没有任何问题的,但在开发中一般不会使用Throwable处理,因为其有Exception和error两个子类,Error本身不需要程序处理,而程序中需要处理的是Exception 所以没有必要使用Throeable)

四  Throw和Throws关键字 
 Throws:在定义一个方法时,使用Throws关键字声明,表示此方法不处理异常,而是交给调用方法来处理

(注意:不要在main方法中使用throws,main方法为一切方法的起点,一切的操作也是由主方法开始的,所以,如果在主方法中使用throws,则程序出现问题后肯定交由jvm处理,将会导致程序中断。)

Throw:Throw关键字是人为的抛出异常,直接抛出异常的实例化对象。

package javaBasics;

public class test5 {
 
    public static void main(String[] args) {
        try{
            throw new Exception("自己抛出异常");      //抛出异常的实例化对象
        }catch(Exception e){
            e.printStackTrace();                    //捕获异常
        }
    }
 
}

Throw和Throws结合应用范例:

以下代码也是开发中使用较多的处理方式

 
package javaBasics;
 
public class Math {
    public int div(int i,int j) throws Exception{
        int temp = 0;
        try{
          temp = i/j;
        }catch(Exception e){    //捕获异常
            throw e;            //把异常交给被调用处处理
        }finally{
            System.out.println("计算结束");
        }
        return temp;
    }
}

自定义异常:

package javaBasics;

public class MyException extends Exception{     //自定义异常类继承Exception类
    public MyException(String msg){             //构造方法接受异常信息
        super(msg);                             //调用父类中的构造方法
    }
}

public class test5 {
    public static void main(String[] args) {
        try{
            throw new MyException("自定义异常信息");//抛出异常
        }catch(Exception e){                    //异常捕获处理
            e.printStackTrace();
        }
    }
 
}

Exception和runtimeException

Exception在程序中必须使用try。。。catch处理。

RuntimeException可以不用try。。。catch处理,产生异常后直接交给JVM处理。(在开发中最好使用try。。。catch进行处理)。