您的位置:首页 > 职场人生

黑马程序员_java异常体系

2013-06-12 12:03 232 查看
---------------------- <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,其他任何异常都是其子类,结构是



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>、期待与您交流! 

----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: