Java.lang.Throwable
|----Exception:程序可以处理的异常
|----Error:与虚拟机相关问题,系统崩溃,虚拟机问题,内存不足,内存堆栈溢出……建议程序停止。
异常:程序在运行时出现不正常情况,java对不正常情况进行描述后的对象体现。
-------------------------------------------------
常见的处理方法:
|---String getMessage();
|---String toString()
|---void printStackTrace();
(jvm默认的异常处理机制其实就是调用printStackTrace());
-------------------------------------------------
异常的处理:
try { …}
catch(异常类 变量 ) { //处理几个异常就声明几个catch
…
(多个catch块中的异常出现继承关系时,父类catch块要放在子类catch下面)
}finally{ …}//非必须,但声明后一定会执行,一般用于释放资源
Eg:数据库异常时无法关闭数据库,可使用finally,对资源的关闭
例外:System.exit(0)系统退出,jvm结束,finally不执行。
------------------------------------------------
异常的声明(throws)
编写Demo时,代码可能发生异常
通过throws声明功能可能会出现的异常:
Eg: int div(int a ,int b)throws Exception{
Return a/b;//我们知道b=0时会抛出ArithmeticException;
}
public static voidmain(String [] args){
try{ …} catch(Exception e){ …}
}
(catch 处理时,最好要有具体的处理形式,例如异常日志文件等)
-------------------------------------
自定义异常:
项目中会出现持有的问题,而这些问题并未被java所描述并封装对象时,可将这些问题进行自定义的异常封装(自定义类继承异常类)
继承异常的原因:
因为异常类和异常对象都被抛出,他们都具备可抛性,这个可抛性是Throwable体系特点,只有这个体系中的类和对象才可以被throws和throw操作
------------------------------
假设:a/b中,除数如果是负数和0都认为是错的异常描述。
class IException extendsException{
//可重写Exception方法;
//定义构造方法;//与普通类继承基类相似构造;
父类把异常信息操作完成了,子类只要在构造时用super(message)传递信息给父类,即可调用父类方法(getMessage())
}
class Demo{
int div(int a,int b)throwsIException{
if(b<=0)
throw new IException();// 函数内throw 异常,在函数上要
//声明或者在内部处理
return a/b;
}
}
--------------------
throw和throws的区别:
throws使用在函数上,throw使用在函数内,throws后跟若干个异常类,逗号隔开,throw后跟异常对象。
---------------------------------
异常
|----编译时被检测的异常
|----编译时不被检测,运行时异常(RuntimeException以及其子类)
RuntimeException:
特点:函数内抛出,函数上可不声明,编译通过(不需要让调用者处理,当异常发生,希望程序停止,希望停止程序后,由程序员对代码进行验证)
若在函数上声明,调用者可不处理,编译通过。
心得:如果希望某异常发生时程序停止,就让自定义异常继承RuntimeException
-----------------------------------
异常在父类覆盖中的体现:
class AException extends Exception{
…}
class BException extends AException{
…}
class CException extends Exception{
…}
class Fu {
voidshow()throws AException{…}
}
Class Zi extends Fu{
Voidshow()throws AException ,BException{//不能声明CException}
}
(如果子类真发生其他异常,只能try处理,不能抛出)
------------------------------