异常的概念
异常处理已经成为衡量一门语言是否成语的标准之一,目前的主流程序语言如C++、C#、Python等大都提供了异常处理机制。增加了异常处理机制后的程序有更好的容错性,更加健壮.Java的异常机制主要依赖于try、catch、finally、throw和throws五个关键字,其中try紧跟一个花括弧({})框起来的代码块,简称try块,它里面放置可能引发异常的代码。catch后对应异常类型和一个代码块,用于表明catch块用于处理这种类型的代码块。多个catch块后还可以跟finally块,fanally块用于回收再try块里打开的物理资源,异常机制会保证finally块总被执行,throws关键字主要在方法签名中使用,用于声明该方法可能抛出的异常;而throw用于抛出一个实际异常,throw可以单独作为语句使用,抛出一个具体的异常对象。
try..catch捕获异常
实现代码如下:
try
{
//具体实现代码
}
catch(Exception e)
{
alter 不合法
goto retry
}
如果执行try块里的代码时出现异常,系统会自动生成一个异常对象,该异常对象被调教给Java运行时的环境,这个过程被称为抛出(throw)异常。
当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,则把该异常对象交给该catch块处理,这个过程称为捕获(catch)异常;如果Java运行时环境找不你捕获异常的catch块,则运行时环境终止,Java程序也将退出。
使用throws抛出异常
使用throws声明抛出异常的思路是,当前方法不知道如何处理这种类型的异常,该异常的应该由上一级调用者处理,如果main方法也不知道如果处理这种类型的异常,也可以使用throws声明抛出异常,该异常交给JVM处理。JVM对异常的处理方法是,打印异常的跟踪栈信息,并终止程序运行,这就是前面程序在遇到异常后自动结束的原因。
代码如下
public static void main(String[] args) throws Exception
{
test();
}
public static void test() throws IOException
{
FileInputStream f = new FileInputStream("a.txt");
}
另外,使用throws抛出异常时有一个限制,子类方法声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或相同,子类方法声明抛出的异常不允许比父类方法声明抛出的异常多。