异常的分类
Java中的异常时对象。异常继承自java.lang.Throwable类。
检查型异常(Checked exception):Java中最主要的异常,编译器进行检查“方法只抛出它自己声明要抛出的异常”
非检查型异常(unChecked exception):RuntimeException类和Error类
你创建的异常必须是继承Exception类的检查型异常
异常的一般格式
try{
//可能出现异常的语句
}catch(Exception e)
{
e.printStackTrace();
}finally
{
//必须处理的语句(可选)
}
Throws关键字
定义方法时,在方法参数列表后用 throws 关键字声明一下,该函数有可能发生异常及异常的类别。这样,调用者在调用该方法时,就必须用 try...catch 语句进行处理,否则,编译将无法通过。
class Test
{
public int devide(int x, int y) throws Exception
{
int result = x/y;
return x/y;
}
}
public class TestException
{
public static void main(String[] args)
{
try
{
in result = new Test().devide(3,1);
System.out.println("the result is"+result);
}
catch(Exception e)
{
e.printStackTrace();//最好写上
}
}
}
Throw关键字
Java通过 throw 关键字抛出异常对象。在一个方法内使用 throw 关键字抛出异常对象,如果该方法内部没有用 try ... catch 语句对这个抛出的异常进行处理,这此方法应声明抛出异常,而由该方法的调用者负责处理。
class Test
{
public int devide(int x,int y)throws ArithmeticException,DevideByMinusException
{
if(y < 0)
throw new DevideByMinusException("被除数为负",y);
/*
这里抛出的异常对象,就是调用者catch(Exception e){}语句中接收的变量e
*/
int result = x/y;
return x/y;
}
}
自定义异常
必须继承 Exception 类,如下,我们定义这个负数异常类
class DevideByMinusException extends Exception
{
int devisor;
public DevideByMinusException(String msg,int devisor)
{
super(msg);
this.devisor = devisor;
}
public int geDevisor()
{
return Devisor;
}
}
Java7 新特性
多异常处理:可同时捕获多个异常,即可同时使用多个catch子句
try-with-resource:自动关闭资源(在文件部分复习)