强制性异常(CheckedException)和非强制性异常(UncheckedException)。
而java中除了RuntimeException外,都是强制性异常。
致命错误不用往上抛,直接抛出异常,因为运行不下去了。也可以往上抛,显示一个框。
非致命错误往上抛,也可以就地处理,往上抛浪费性能,抛到view层处理。
所有可抛出的异常都是继承自throwable类
error不用管,那是系统的错误,包括虚拟机错误和awt窗口处理错误等
Exception里分两大类
runtime异常 可以不处理,其它的必须处理,不处理编译时会报错
处理方式
1 . 异常可以抛到上级,让调用者处理 : 在方法定以后加上throws Exception1,Exception2。
2. 就地try catch 处理:
try{
}catch(Exception e){ //是否可以跟超类
System.out.println("e.getMessage() = " + e.getMessage());
e.printStackTrace() //从下往上,从外往里。
}catch(Exception e){ //处理多个异常
}finaly{ //触发异常后也会执行,上边有return之后还能执行,还能return,这里的语句除非虚拟机终止才不会执行
//一般这里放释放资源的语句,即使出错也不会zus饿别的线程。
}
消极处理
try{
}finaly{
//放必须执行的语句,不管异不异常 //一般这里放释放资源的语句,即使出错也不会zus饿别的线程。
}
finally
finally不会执行的情况
•
没有执行到try,那相应的finally也不会执行.
•
在try里执行了System.exit(0),退出了虚拟机
finally会执行的情况
•
在try里执行了return,这里会先将return的值保存,先执行finally里的内容,然后再返回,极不推荐在finally里修改返回值.
自定义异常
然后 需要抛出的时候 throw new myException(“错误信息”);
1. 创建一个继承自Exception类或其子类的类,重写构造函数。
如果继承自runtimeException 的话就可以不接受处理异常。否则必须处理。
public class AgeOutofBoundsException extends Exception {
public AgeOutofBoundsException() {
super();
// TODO Auto-generated constructor stub
}
public AgeOutofBoundsException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
}
2. 在有需要的函数里抛出异常
throw new AgeOutofBoundsException("年龄越界");
3. 在调用函数后处理异常。
throw 和 throws 区别
void test() throws 异常类型{
throw 异常对象
}
是否可以抛出多个异常? 可以,多个异常之间逗号隔开
捕获异常是怎么捕获多个异常? 可以,多写个catch语句就行。不能在一个catch后面捕获两个异常,小范围异常在前
评论区