异常
分类
受检异常:写代码时必须处理的异常,必须要捕获
运行时异常
- 对于受检异常中的文件不存在异常,只需要catch 住,继续运行程序就行
- 受检异常程序员是可以处理的,或者说这种异常是允许发生的
- 是一种意料之内的情况
- 从语法上来说,受检异常是exception类的子类但不能是runtimeexception类的子类
- 如果方法里面抛出了受检异常,那么方法的签名必须throws这个异常,调用方也会被强制try-catch处理这个异常,这是编译级别的限制
- 对于非受检异常比如数组越界或者除零异常,
- 这种属于一种程序的bug,按照道理来讲是程序员编程不当导致的,这种bug一旦发生应该消除
- 如果是runtimeexception或者error的子类那就是非受检的,这种异常在方法内抛出不需要在签名处throws
1 public class App { 2 public static void main(String[] args) throws IOException { 3 demo01(); 4 demo02(1); 5 } 6 7 private static void demo02(int num) throws IOException { 8 if(num>5 && num<10){ 9 //抛出运行时异常,依靠关键字throw 10 throw new IllegalArgumentException("运行时异常"); 11 } 12 if(num>10 && num <15){ 13 //抛出受检异常,受检异常抛出的时候得处理他 14 //1.处理第一种方式,使用关键字throws,表示如果有调用demo02()方法的,要处理IOException异常 15 throw new IOException("受检时异常"); 16 //2.第二种处理方式, 17 // try{ 18 // throw new IOException("受检异常抛出") 19 // }catch (IOException e){ 20 // e.printStackTrace(); 21 // } 22 } 23 }
抛异常程序中断
异常捕获
finally是不要写return的,写了后异常和正常数据都拿不到了
1 public class App { 2 public static void main(String[] args) throws IOException { 3 demo01(); 4 demo02(1); 5 demo03(0); 6 } 7 8 //在执行return之前都先执行一遍finally 9 //如果传入的num=0,输出1111, 3333,4444,-2 10 //如果传入的num=1,输出111,222,4444,-2 11 private static int demo03(int num) { 12 try{ 13 //这里是正常的业务代码,要被我处理的代码 14 System.out.println("11111111"); 15 int result = 1024/num; 16 System.out.println("22222222"); 17 return result; 18 }catch (Exception e){ 19 //这里是出来问题怎么处理的 20 System.out.println("33333333"); 21 return -1; 22 }finally { 23 //最后的首尾动作 24 System.out.println("444444444"); 25 return -2; 26 } 27 }
posted on 2019-12-17 23:27 yolanda935 阅读(181) 评论(0) 收藏 举报
浙公网安备 33010602011771号