标签:except 存在 exti height rem 类关系 main方法 调用 cat
Java提供的是异常处理的抓抛模型(编译时 / 运行时异常均适用)1.try内声明的变量在 { } 外不可见(类似与局部变量),出了 try{ }就不能调用;
2.仅当出现异常时 catch 才执行,无异常不执行;
3.finally是可选的,且finally中的代码一定会被执行(即使 try / catch 中仍有未处理异常或有return语句);
4.以上代码中的“Exception1”指的是异常的类型,可以直接用“Exception”来广泛的抓异常(相当于多态性),也可以用具体的异常类型;
5.catch中的语句是对异常对象的处理,可以自定,也可以直接调用抓住的异常的对象的方法;
6.catch语句之间的关系有点像“ if-else ”,即:从上往下执行,若 catch 匹配了 try 抛出的异常类对象,则传入该异常类对象,执行语句,然后跳出到 finally(如果有的话);同样这也意味着 catch 语句需要“范围小的先声明”,即:如果有存在子父类关系的 Exception,那么子类的应该写上面,如果写反,会报错(“会报错”这一点并不像 if-else )。如果关系为“并列”,那么孰上孰下都可以;
7.如果异常处理了,则其后的代码继续执行;
8.try-catch是可以相互嵌套的。
例:
@Test
public void test5(){
Scanner read = new Scanner(System.in);
int a;
try{
a = read.nextInt();
System.out.println(a);
}catch(Exception e){
System.out.println("输入的不是整数");
}
read.close();
}
处理方式二:
如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显式地抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法语句中产生的异常类型,也可以是它的父类。(注意是
类)(与
throw区别开),
但是其子类重写此方法时只能抛出该父类的异常类或其子类(否则使用多态性时可能出现编译通过但是catch“罩不住”的情况)。
抛异常只是把问题把上递交了(异常类对象传给调用者),最终还是要解决的,解决的根本方法还是try - catch,如果抛到了main方法还未根本解决 ,那异常会直接给虚拟机。
对于编译时异常来说,必须处理,而运行时异常可以不显式的处理。
异常处理方式
标签:except 存在 exti height rem 类关系 main方法 调用 cat
原文地址:http://www.cnblogs.com/chendifan/p/6535722.html