黑马程序员_异常

来源:互联网 发布:网络特性怎么做营销 编辑:程序博客网 时间:2024/06/06 03:59
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

异常:就是程序在运行时出现不正常情况。

异常由来:问题也是现实生活中一个具体的事物,也可以通过java类的形式进行描述。并封装成对象。其实就是java对不正常情况进行描述后的对象体现。

 

异常体系的特点:异常体系中的所有类以及建立对象都具备可抛性。也就是说可以被throwthrows关键字所操作。只有异常体系具备这个特点。

throw throws的用法:

throws使用在函数上。后面跟的是异常类。可以跟多个,用逗号隔开。

throw使用在函数内。后面跟的是异常对象。

 

当函数内容有throw抛出异常对象,并未进行try处理。必须要在函数上声明,否则编译失败。

注意:Exception中有一个特殊的子类异常RuntmeException运行时异常。如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过。之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,

对代码进行修正。

异常有两种:

编译时被检测异常:该异常在编译时,如果没有处理(没有抛也没有try),编译失败。该异常被标识,代表可以被处理。

运行时异常(编译时不检测):在编译时,不需要处理,编译器不检查。该异常的发生,建议不处理,让程序停止,需要对代码进行修正。

 

 

 

2,异常的处理,是通过trycatchfinallythrowthrows五个关键字来处理。

java提供了特有的语句进行处理。

try

{

       需要被检测的代码;

}

catch(异常类变量)

{

       处理异常的代码(处理方式);

}

finally

{

       一定会执行语句。

}

 

注意

1finally中定义的通常是关闭资源代码。因为资源必须释放。

2finally只有一种情况不会执行。当执行到System.exit(0);finally不会执行。

3,对捕获到的异常对象进行常见方法操作。

getMessage                   /by zero

toString                异常名称:异常信息。

printStackTrace            异常名称,异常信息,异常出现的位置.

 

异常的处理好处:

       1,将问题进行封装。

       2,将正常流程代码和问题处理代码相分离,方便于阅读。

异常的处理原则:

       1,处理方式有两种:try或者throws.

       2,调用到抛出异常的功能时,抛出几个,就处理几个。

              一个try对应多个catch

       3,多个catch,父类的catch放到最下面。

       4catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。

              也不要不写。

              当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。

 

异常在子父类覆盖中的体现:

1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。

2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。

3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。

       如果子类方法发生了异常,就必须要进行try处理。绝对不能抛。

 

class Demo

{

       int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException//在功能上通过throws的关键字声明了该功能有可能会出现问题。

       {

              int[] arr = new int[a];

 

              System.out.println(arr[4]);

              return a/b;

       }

}

class ExceptionDemo

{

       public static void main(String[] args)

       {

              Demo d = new Demo();

              try

              {

                     int x = d.div(5,1);

                     System.out.println("x="+x);

              }

              catch (ArithmeticException e)

              {

                     System.out.println("除零了");

                     //System.out.println(e.getMessage());//   /by zero

                     System.out.println(e.toString());//异常名称:异常信息。

 

                     //e.printStackTrace();//异常名称,异常信息,异常出现的位置,

                                                 //其实jvm默认的异常处理机制,就是在调用printStackTrace方法

                                                 //打印异常的堆栈的跟踪信息

              }

 

              catch(ArrayIndexOutOfBoundsException e)

              {

                     System.out.println("角标越界了");

              }

             

       }

}

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