黑马程序员_java异常体系

时间:2021-07-31 12:56:27
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! 


一.异常体系

在java中所谓的异常就是在程序运行是出现的不正常的情况。而这些不正常的问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述并封装。

1.  java异常体系;

java中的异常有一个大类Throwable,其他任何异常都是其子类,结构是

黑马程序员_java异常体系

RuntimeException及其子类是一个特殊的异常类,即运行时异常,编译的时候不检测。如果在函数内容抛出该异常,函数上可以不用声明,编译可以通过。

如果在函数上声明了该异常,调用者可以不用处理,编译也通过。

 

在异常的父类中定义了一些常用的方法:

getMessage()     获取异常信息,返回字符串;

   toString()       获取异常类名和信息,返回字符串;

    printStackTrace()获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

2.  java中异常体系的特点;

异常体系中的所有类以及建立的对象都具有可抛性,即可以被throw与throws这两个关键字所操作,这是异常体系独自具有的特点。

3.  异常的种类;

异常有两种:①编译时被检测的异常,该异常在编译时如果没有处理,编译失败

             ②运行时异常,编译时不需要处理,编译时不会检测

               该异常的发生,建议不处理,让程序停止。然后对代码进行修正

4.  关键字的使用及注意事项;

关键字有throw和throws这两个关键字的用法不同:

throw定义在函数内,用于抛出异常对象

throws定义在函数上,用于抛出异常类,可抛出多个,异常类之间用逗号隔开。

5. class MyExceptionextends Exception

{

}

class Demo

{

// 假如此函数运行时有异常

public void method()throws MyException

//throws用在函数上抛出的是类MyException

{

//throw用在method函数内,抛出的是对象new MyException()

    throw new MyException();

 }

}

6.  自定义异常;

定义类继承Exception或者RuntimeException

目的:①为了让该自定义类具备可抛性。

②让该类具备操作异常的共性方法。

当要定义自定义异常的信息时,可以使用父类已经定义好的功能。

将异常信息传递给父类的构造函数。

class MyExceptionextends Exception

{

    MyException(Stringmessage)

    {

       super(message);

    }

}   

自定义的异常也要按照java的面向对象思想,将程序中出现的特有问题进行封装。

二.异常处理机制

1.异常的处理格式

 

异常的处理:

try

{

    需要被检测的代码;

}

catch(异常类 变量)

{

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

}

finally

{

    一定会执行的语句;

}

三种处理结合格式:

1.try

{

 

}

catch ()

{

}

 

2.try

{

}

finally

{

}

3.try

{

}

catch ()

{

}

finally

{

}

注意:

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

②finally只有一种情况不会执行,即执行到System.exit(0)。

2.异常处理原则及注意事项。

①  异常有两种处理方式:捕捉处理(try)或者抛出(throws)

②  当调用到抛出异常的函数时,抛出几个就处理几个,一个try可以对应多个catch。当多个catch时父类的放在最下面。

③  catch内要定义针对性的处理方式。

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

try

{

    throw new XException();

}

catch (XExceptione)

{

    throw e;

Ⅰ.如果捕获到的异常处理不了,但该异常还不是本功能出现的时,需要将该异常转换成与本功能相关的异常后再抛出。

例如:

毕老师用电脑上课,电脑出现冒烟异常,如果将冒烟异常抛出,毕老师处理不了,调用毕老师的主函数也处理不了(不是电脑维修人员),所以将电脑冒烟的异常转换成毕老师不能按时完成授课计划,此时调用毕老师上课的主函数就可以处理了。

class MaoYanExceprionextends Exception

{

  try   

  {

  }

  catch(MaoYanExceprionmye)

  {

     throw new NoPlanException();

  }

}

class NoPlanExceptionextends Excption

{

     try

     {

     }

     catch(NoPlanExceptionnpe)

     {

         //对可是不能继续完成进行处理

         //或者在调用时的主函数处理

     }

}

Ⅱ.异常可以处理,但需要将产生的和本功能相关的异常问题提供出去,让调用者知道并处理。也可以将捕获异常处理后转换新的异常。

例如:银行汇款,当汇款不成功时,必须把产生的异常告诉用户,让用户来决定是否重新汇款。

try

{

  throw new AException();

}

catch (AExceptione)

{

  // Aexception的处理。

  throw new BException();

}

注意:

在子类继承父类或者子类实现父类时,子类抛出的异常必须是父类异常的子类或者子集;如果父类或者接口没有抛异常时,子类覆盖出现异常时,只能在子类内部处理。

 


----------------------
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! 


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