黑马程序员-Exception

来源:互联网 发布:淘宝物品拍照技巧 编辑:程序博客网 时间:2024/06/07 00:19

                    黑马程序员-Exception

 

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

 

概念:

      异常:在程序运行中出现的不正常情况,就叫异常。java是面向对象的语言,所以在描述异常时也将其封装成了具体的对象。并且将这些异常分为两大类:Error和Exception(都属于Throwable的子类)。

     Error:java中比较严重的错误,比如jvm内存溢出。一般不编写针对性的代码对其处理。

     Exception:java中非严重的异常,这些异常是可以编写代码进行处理的。其中Exception又分为运行时异常和编译时异常。

     运行时异常:在程序运行时被检测的异常,这种异常如果在调用的方法上被声明时,可以不用try{}catch{}处理,如果在方法内部用throw new 抛出该种异常时,可以不用在方法上用thorws关键字声明。

     编译时异常:编译时期被检测的异常,这种异常如果在方法上声明了,那么在调用该方法时必须try{}catch{}处理,否则编译失败。如果在方法内部用throw new 抛出该种异常时,必须在该方法上用throws关键字声明。

     java中异常处理格式:

          try{

                   需要被检测的代码;

                 }

        carch(异常类  变量){

                   处理异常的代码;

                  }

        finally{

                   一定被执行的代码;如释放资源等

                  }

代码及示例:

    异常处理过程:

public class ExceptionDemo {/** * 异常 * @param args */public static void main(String[] args) {        try {int i=4/0;//出现异常后就被虚拟机检测到,直接转向catch代码块,其后面代码不会执行。System.out.println(i);} catch (Exception e) {//将捕获的异常传入System.out.println("出现除数为零!");e.printStackTrace();//调用异常类的方法。java中jvm的默认异常处理机制。}}}

    异常处理方式:

public class ExceptionDemo {/** * 异常 * @param args */public static void main(String[] args)/*throws Exception*/ {        try {int i=div(6, 0);//调用声明异常的方法。                //处理方式可try可抛,可以在调用该功能的方法上用throws关键字抛出System.out.println(i);} catch (Exception e) {System.out.println("出现除数为零!");e.printStackTrace();}}public static int div(int a,int b)throws Exception{//声明该方法存在异常return a/b;}}

   多异常处理方式:
 

public class ExceptionDemo {/** * 异常 * @param args *///java中多异常的处理://1.声明异常时,建议声明更具体的异常,这样处理可以更具体。//2.对调用的方法声明几个异常,就对应几个catch块,不要定义多余的catch块,如果多个catch块中的异常存在继承关系,那么父类的catch块放最下面。public static void main(String[] args){        try {int i=div(4, 0);System.out.println(i);} catch (ArithmeticException e) {//编写针对性的catch块进行处理System.out.println("出现除数为零!");e.printStackTrace();}catch (ArrayIndexOutOfBoundsException e) {//编写针对性的catch块进行处理System.out.println("出现角标越界!");e.printStackTrace();}catch (Exception e) {//父类异常catch块放在最下面e.printStackTrace();}}public static int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException{//声明多个异常int[] arr=new int[a];System.out.println(arr[4]);return a/b;}}

    自定义异常:

public class ExceptionDemo2 {/** * @param args */public static void main(String[] args) {try {div(4,-3);} catch (Exception e) {e.printStackTrace();}}public static int div(int a,int b)throws NewException{if(b<0)throw new NewException("自定义异常");return a/b;}}public class NewException extends Exception{/** * 自定义异常 * @param args *///为什么自定义异常要继承Exception类?//因为异常体系都有一个特点:异常类和异常对象都可被抛出。这个可抛性是Throwable这个体系所独有的。只有这个体系中的类或对象才可以被throws和throw操作。public NewException(String message) {        super(message);//调用父类的构造函数}}

运行时异常:

public class RuntimeExceptionDemo {/** * 运行时异常 * @param args *///RuntimeException的特点://1.在函数内抛出该异常,可以不用再函数上声明。//2.在函数上声明了该异常,在调用该函数时可以不进行异常处理(抛或try)public static void main(String[] args) {       div(2, 2);//调用时并未做处理}public static int div(int a ,int b){//该方法上并没有throws关键字声明异常if(b==0)throw new RuntimeException("除数为零!");return a/b;}}

  throws 和 throw的区别:

   1.throws用在函数上,throw用在函数内。

   2.thorws后面跟的是异常类,可以跟多个,用逗号隔开。而throw后面跟的是异常对象。

 

总结:

   在编写自定义异常时,应该注意该抛运行时异常或是编译时异常。如果某个功能在定义时可能存在异常,同时又不希望调用者在调用时由于手动处理而将问题隐藏掉,那么此时抛运行时异常,反之抛编译时异常。

 

 

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

 
 


 

0 0