Java中派生于Error 类或者RuntimeException类的所有异常成为非受查异常(unchecked)
所有其它的异常都称为受查(checked)异常
受查异常需要声明,比如FileInputStream类的一个构造器的声明
public FileInputStream(String name) throws FileNotFoundException
如果一个方法有可能抛出多个受查异常类型,那么就必须在方法的首部列出所有的异常类。每个异常类之间用逗号隔开。
如
public Image loadImage(String s) throws FileNotFoundException,EOFException
注意,不需要声明java的内部错误,即从Error继承的错误。任何代码都有可能抛出异常,而我们没有对其有任何控制能力。RuntimeException也是同理,比如NullPointerException。我们要做的应该是想办法让我们代码不会出现空指针。而不是试图解决其后遗症。
捕获异常 try/catch语句块
try
{
}
catch(Exception Type)
{
}
如果try语句块中出现异常
则不再执行try语句中内容
而直接执行catch语句块中的内容
否则 程序不会执行catch语句块中的内容
捕获多个异常
比如
try
{
}
catch(FileNotFoundException e)
{
}
catch(UnKnowHostException e)
{
}
catch(IOException e)
{
}
异常对象可能包含与异常本身有关的信息。可以通过e.getMessage()得到详细的错误信息。或者使用
e.getClass().getName()
得到异常对象的实际类型;
带资源的try语句
try(Resource res=…)
{
}
try 语句块退出时,会自动调用res.close()。
比如
读取一个文件中的所有单词
try(Scanner in =new Scanner(new FileInputStream("/words")),"UTF-8")
{
while(in.hasNext())
System.out.println(in.next());
}
这个语句块在正常退出时,或者存在一个异常,都会自己调用in.close()方法,就好像使用了finally块一样。
总之,只要需要关闭资源,就使用这种带资源的try,何乐而不为呢!