一.异常体系
在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>、期待与您交流!
----------------------