1 package com.bytezero.throwable; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.IOException; 7 8 import org.junit.Test; 9 10 /** 11 * 12 * @Description 异常处理 : 13 * @author Bytezero·zhenglei! Email:420498246@qq.com 14 * @version 15 * @date 上午8:35:40 16 * @ 一:异常处理 : 抓抛模型 17 * 18 * 过程一: “抛”:程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成 19 * 一个对应异常类的对象。并将此对象输出。 20 * 一旦抛出对象以后,其后的代码不再执行。 21 * 22 * 23 * 过程二:“抓”:可以理解为 异常的处理方式,:①try-catch-finally ②throws 24 * 25 * 26 * 二:try-catch-finally的使用 27 * 28 * try{ 29 * 30 * //可能出现异常的代码 31 * 32 * }catch(异常类型1 变量名1){ 33 * 34 * //处理异常的方式1 35 * 36 * }catch(异常类型2 变量名2){ 37 * 38 * //处理异常的方式2 39 * 40 * }catch(异常类型3 变量名3){ 41 * 42 * //处理异常的方式3 43 * 44 * } 45 * ..... 46 * finally{ 47 * 48 * //一定会执行的代码 49 * } 50 * 51 * 说明: 52 * 1.finally是可选的。 53 * 2.使用try将可能出现的代码包装起来,在执行过程中,一旦出现异常,就会生成 54 * 一个对应异常的对象,根据此对象的类型,去catch中进行匹配 55 * 3.一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦 56 * 处理完成后,一旦处理完成,就跳出当前的try catc 结构(在没有写finally的情况)。继续 57 * 执行其后的代码 58 * 4.catch中的异常类型 如果没有子父类关系,则说声明在上,都可以 59 * catch中的异常类型 如果满足子父类关系,则要求子类一定声明在父类的上面,否则,报错 60 * 61 * 5.常用的异常对象处理方式:①String getMessage() 62 * ②printStackTrace() 63 * 64 * 6.在try结构中声明的变量,再出了try结构以后,就不能再被调用 65 * 66 * 7.try - catch-finally结构可以相互嵌套。 67 * 68 * 69 * 体会1:使用try-catch-finally处理编译异常时,使得程序在编译时就不在报错,但是运行时仍可能 70 * 报错,相当于我们使用try - catch -finally 将一个编译时可能出现的异常,延迟到运行时出现。 71 * 72 * 73 * 体会2:开发中,由于运行时异常比较常见,所有我们通常就不针对运行时异常编写try-catch-finally了, 74 * 针对于编译时异常,我们说一定要考虑异常的处理。 75 * 76 */ 77 public class ExceptionTest2 { 78 79 80 @Test 81 public void test2() { 82 83 try { 84 85 File file = new File("hello.txt"); 86 FileInputStream fis = new FileInputStream(file); 87 88 int data = fis.read(); 89 while(data != -1) { 90 System.out.println((char)data); 91 data = fis.read(); 92 93 } 94 fis.close(); 95 }catch(FileNotFoundException e){ 96 97 e.printStackTrace(); 98 99 }catch(IOException e) { 100 e.printStackTrace(); 101 } 102 103 } 104 105 106 @Test 107 public void test1() { 108 109 String str = "123"; 110 str = "abc"; 111 int num = 0; 112 try { 113 Integer.parseInt(str); 114 115 System.out.println("Hello----------1"); 116 117 }catch(NullPointerException e) { 118 System.out.println("出现了空指针异常"); 119 120 }catch(NumberFormatException e) { 121 122 // System.out.println("出现 数值转换 异常了"); 123 //String getMessage(): 124 //System.out.println(e.getMessage()); 125 //printStackTrace 126 e.printStackTrace(); 127 128 }catch(Exception e) { 129 130 System.out.println("出现了 异常 "); 131 } 132 133 //System.out.println(num); //不可以调用,因为出了 try 结构 134 135 System.out.println(num); 136 137 System.out.println("Hello----------2"); 138 139 } 140 141 142 143 144 145 }