exceptions类
派生出许多子类
每一个类代表一个错误条件。
异常对象的可以调用方法。
throwable类中的方法getmessage和toString.
Exception->throwable->getMessage->toString->printStackTrace
division()throws Exception
e.throw抛出异常,给上一级调用时候显示异常。
打印异常发生的轨迹,终止程序的运行。测试方法用。
捕获异常是需要对应抛出异常。需要声明异常类型。
throws声明抛出异常
throw抛出异常
try监听
catch捕获
可以有多个catch语句,捕获多个异常。
抛出的异常类型必须和捕获的异常类型匹配。
所有异常类都是从Exception类派生出来的,要把具体的异常类
放在前面捕获。
RuntimeException 代表程序编写时的一些错误bug
->ArithmeticException
->NullPointerException
->IndexOutOfBoundsException
(自动处理异常类型)
编写者:函数参数是对象。
使用者:传参空引用,
需要显示捕获或抛出。
除了Runtime类异常,编译器都会强制要求去捕获。
public int division(int a,int b) throws Exception
{
try
{
return a/b;
}
catch(ArithmeticException e)
{
e.printStackTrace();
throw new Exception("can't");
throw e;
}
}
自定义异常类型类
class DivisorIsMinusException extends Exception
{
DivisorIsMinusException(String str)
{
super(str);
}
}
调用
if(a<0)
throw new DivisorIsMinusException("minus");
....
可以同时声明抛出多个异常
public int division(int a,int b) throws Exception,DivisorIsMinusException
{
try
{}
catch(Exception e)
{}
catch(DivisorIsMinusException ex)
{}
}
......
finally语句代码
finally
{
......
}
网络连接时,断开要在后面释放资源,数据库读取时候异常,要关闭数据库释放连接资源,
不管是否异常,资源始终要释放的。
System.exist();强制终止。finally不运行。
如果基类抛出多个异常
那么派生类 覆盖方法抛出相同异常,异常类的派生类。
派生类不能抛出新的异常类型。
构造方法例外(本身不被继承)。
子类有新的异常,但是调用方法时,子类对象为参数,那么异常不能被处理。
子类方法抛出的异常范围要小于父类的方法抛出的异常的范围。
在方法声明的时候,声明一个不会抛出的异常,这样调用方法的时候就要处理。
多用于抽象基类和接口当中。
abstract base class和interface



