java08
java08异常(Exception)处理方式之一:捕获异常处理方之二:声明异常(throws子句)自定义异常错误ErrorIDEA调试debug
异常(Exception)
-
是程序可以处理的异常
-
分为运行时异常(RuntimeException)和已检查异常(CheckedException)
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; //测试CheckException(已检查异常,编译器曝错) public class Test02 { public static void main(String[] args) { FileReader reader = null; try { reader = new FileReader("d:/a.txt"); char c = (char)reader.read(); char c2 = (char)reader.read(); char c3 = (char)reader.read(); System.out.println(""+c+c2+c3); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { System.out.println("Test02.main.finally"); try { if (reader!=null){ reader.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
-
本质:当程序出现异常,程序安全退出,处理完后继续执行
处理方式之一:捕获异常
-
try:当碰到异常处理的代码结束以后,不会回到try语句去执行尚未执行的代码
-
catch:每一个try语句可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象
catch捕获异常时的捕获顺序:如果异常类之间有继承关系,先捕获子类异常在捕获父类异常
-
finally:不论发生什么异常,都会执行
public class Test01 { public static void main(String[] args) { System.out.println("111"); try { int a = 1 / 0; }catch (Exception e){ e.printStackTrace(); } System.out.println("222"); } }
处理方之二:声明异常(throws子句)
-
jdk新特性:try-with-resource自动关闭Closable接口的资源并且在编译时自动转换成try-catch-finally语句
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; //测试throws声明式处理异常 public class Test03 { public static void main(String[] args) throws IOException { FileReader reader = null; try { reader = new FileReader("d:/a.txt"); char c = (char)reader.read(); char c2 = (char)reader.read(); char c3 = (char)reader.read(); System.out.println(""+c+c2+c3); } finally { System.out.println("Test02.main.finally"); try { if (reader!=null){ reader.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
import java.io.FileReader; //使用try-with-resource public class Test04 { public static void main(String[] args) { try(FileReader reader = new FileReader("d:/a.txt");){ char c = (char)reader.read(); char c2 = (char)reader.read(); char c3 = (char)reader.read(); System.out.println(""+c+c2+c3); }catch(Exception e){ e.printStackTrace(); } } }
自定义异常
-
自定义异常只需继承Exception类或者它的子类派生的一个子类即可
-
自定义异常包括两个构造器:一个是默认的构造器,另一个是带有详细信息的构造器
public class IllegalAgeException extends Exception{ public IllegalAgeException(){ //默认构造器 } public IllegalAgeException(String message){ //带有详细信息的构造器,信息存储在message super(message); } }
错误Error
-
是程序无法处理的错误
IDEA调试debug
-
调试的核心是断点:
-
设置断点:
-
在行号后面单击即可增加断点
-
在断点上在单击即可取消断点