目录
如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等):则使用 异常三连 try-catch-finally ,语法:
JDK1.7优化后 try-catch-fially (关闭连接,释放资源) 新语法:
Integer.valueOf 方法(实现自动装箱的方法)解读:
【4】关联关系(某人和某人,某物和某物之间建立的连接关系。):
【6】组合关系(什么包含什么,且包含的那个特别重要,无可替代的):
异常:
- 在Java语言中,将程序执行中发生不正常的情况称之为“异常”,(开发过程中的语法错误与逻辑错误与异常无关)。
- Java中 执行过程中可能发生的异常错误 分为两大类:
- Error(错误):JVM 无法解决的严重问题,比如:JVM 内部错误,资源耗尽等严重情况,Error 是严重错误,程序会立即崩溃。比如:OutOfMemoryError,……
- Exception(异常):其他以编程错误或偶然的外在因素 导致的 一般性问题,这种问题可以使用针对性的代码进行解决。异常分为两大类:
- 运行时异常:编译器检查不出来,一般是指编程时的逻辑错误,是开发者应该避免器出现的异常,java.lang.RuntimException类以及它的子类都是运行时异常。对于运行时异常,可以选择性的不作处理,因为运行时异常较为普通,若全处理可能出现的运行时异常可能会对程序的可读性与运行效率产生影响。 比如常见的:NullPointerException,ArithmeticException,NumberFormatException,ArithmeticException,ClassCastException,……
- 编译时异常:是编译器编译时要求必须处理的异常,否则编译不通过。比如:ClassNotFoundException,FileNotFoundException,……
- 异常应该尽量提前避免,异常也无法做到绝对避免的,可能太多种情况,开发者只能提前干预。异常一旦出现了,如果没有提前处理,程序就会退出JVM而终止。
Java中异常体系图一览:
异常处理之 异常三连 try-catch-finally:
try-catch语法:
- 如果异常发生了,则在try语句块中的异常发生后面的代码不会执行了,JVM将异常封装进Exception对象 e中,将 异常传递给 catch,直接进入到catch语句块中。
- 如果异常没有发生,则顺序执行try的代码块,如果try-catch后面还有代码依然会执行。不会进入到catch语句块中。
- 可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前。如果发生异常,只会匹配捕获最先出现的那个异常。(如果父类异常在前,就不管是什么异常都会捕获。)
- 也可以把多个可能处理的异常写在一个catch语句块中。语法:
- 可以使用异常的父类 Exception 或者 Throwable 捕获一切可能出现的异常(使用最多!)。语法:
如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等):则使用 异常三连 try-catch-finally ,语法:
- 说明:就算try语句块中 或者 try语句块外的代码 有return 语句,finally依然也会执行!,只有一种情况finally里面的代码不会执行,那就是在finally语句块上面有 System.exit(0 or 非0); 把JVM干掉,就不会执行!
- 如果try-catch-finally 异常三连下面依然有代码,下面的代码依然会执行!不会因为出现异常而终止,因为已经处理了。
try-finally 语法:
- 说明:try-finally 这种用法相当于没有 捕获异常,因此如果出现异常 程序依然会 直接崩掉 退出。
- try-catch 应用场景(使用极少):不管程序是否发生异常,都必须执行某个业务逻辑。就算有 return 也会执行!
JDK1.7优化后 try-catch-fially (关闭连接,释放资源) 新语法:
- 使用这种语法,JVM 会自动 把 连接或者资源 关闭,不再手动调用关闭资源的API了。 省略了try-catch-finally 的那种繁琐语法。
异常处理之 throws
- throws 处理异常是以方法为单位的处理方式,出现在方法的签名处。
- throws 语法:比如:。
- 使用说明: 如果一个方法 中的语句在执行是 可能生成某种编译时异常,但是并不确定如何处理这个编译时异常,则 此方法 应该显式声明的抛出异常,表明该方法将不对这些异常进行处理, 而是由 该方法的 调用者 负责处理。(就是无情甩锅)。最顶级的处理者就是 JVM。(它的处理方法简单粗暴,直接停止程序运行)。
- 在方法声明中 用 throws 语句 可以声明抛出异常的列表,throws 后面的异常类型可以是方法中产生的一个或多个异常类型,异常与异常之间用 , 号隔开,也可以是它的父类。一般都是抛出一个父类异常即可,抛出一切异常。
- throws处理机制:try-catch-finally 和 thorws 二选一。当前两个都可以写,如果两者并存,将会优先处理 try-catch-finally 异常三连语句。
- 如果需要处理的运行时异常,而开发者 又没有显示的处理运行时异常。那么当前这个方法 的签名上 默认隐式 的 有个throw 异常语句。不需要特别关注。
throws 处理机制图:
-
throws 说明:
- 对于编译时异常,程序中必须处理。try-catch-finally 或者 throws
- 对于运行时异常,程序中如果没有处理,默认就是在方法的签名上 throws