子类声明异常的范围不能超过父类声明的范围:

1.父类没有声明异常,子类也不能;
2.不可以抛出原有方法抛出异常类的父类或者上层类
3.抛出的异常"类型"数目不可以比原有方法抛出的还多(注意类型数目)

RuntimeEXcepton编译不要求强制处理异常。

Java中凡是继承自Exception,而不继承自RuntimeException类的异常都是非运行时异常。
注意: 必须抛出的异常为编译时异常, 运行时异常(RuntimeException)不用抛出。也就是说如果抛出的异常是RuntimeException的子类,方法名后不用写throws+异常类名如果Exception(非RuntimeException)的子类,则使用throw关键字抛出异常后需要在方法名后写明throws+异常名

抛出(throws)异常后,调用者的catch语句中参数只能是抛出(throws)异常的继承树,不能是旁支。

当异常处理中存在return时,finally的执行特征:finally块前有return语句,finally依然执行。finally前有System.exit(0),finally不执行。

try catch finally 存在return语句的执行顺序

1.try里面有return, finally里面没有return,返回return保存的值
2.try和finally中均有return 返回finally重新赋的值
3.try里面有return finally里面没有return finally中改变值num,返回try里面的return的值
4.try里面有return,finally里面没有return,finally中改变返回的引用类型的属性值num,返回try里面return保存的值

throw throws区别

throws在方法后边声明异常,其实就是自己不想对异常做出任何的处理,告诉别人自己可能出现的异常,交给别人处理,然别人处理throw:就是自己处理一个异常,有两种方式要么是自己捕获异常try…catch代码块,要么是抛出一个异常(throws 异常)
1. throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。
用在方法声明后面,跟的是异常类名可以跟多个异常类名,用逗号隔开表示抛出异常,由该方法的调用者来处理throws表示出现异常的一种可能性,并不一定会发生这些异常
2. throw:则是用来抛出一个具体的异常类型。
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常