11.2 捕获异常
要想捕获一个异常,必须设置 try/catch 语句块.最简单的 try 语句块如下所示:try
{
code
more code
more code
}
catch(ExceptionType e)
{
handler for this type
}
如果在 try 语句块中的任何代码抛出了一个在 catch 子句中说明的异常类,那么
1.程序将跳过 try 语句块的其余代码
2.程序将执行 catch 子句中的处理器代码.
如果在 try 语句块中的代码没有抛出任何异常,那么程序将跳过 catch 子句.
如果方法中的任何代码抛出了一个在 catch 子句中没有声明的异常类型,那么这个方法就会立刻退出.
为了演示捕获异常的处理过程,下面给出一个读取文本的典型程序代码:
public void read(String filename)
{
try
{
InputStream in = new FileInputStream(filename);
int b;
while((b = in.read()) != -1)
{
process input
}
}
catch(IOException exception)
{
exception.printStackTrace();
}
}
注释:在Java与C++众,捕获异常的方式基本相同.严格地说,下列代码
catch (Exception e) // Java
与
catch (Exception &e) // C++
是一样的.
在Java中,没有与C++众 catch() 对应的东西.由于Java中的所有异常类都派生于一个公共的超类,所以没有必要使用这种机制.
11.2.1 捕获多个异常
在一个 try 语句块中可以捕获多个异常类型,并对不同类型的异常做出不同的处理.可以按照下列方式为每个异常类型使用一个单独的 catch 子句:try
{
code that might throw exception
}
catch (FileNotFoundException e)
{
emergency action for missing files
}
catch (UnknownHostException e)
{
...
}
异常对象可能包含与异常本身相关的信息.要想获得对象的更多信息,可以试着使用
e.getMessage()
得到详细的错误信息.或者使用
e.getClass().getName()
得到异常对象的实际类型.