Hello,大家好,我是大家最亲爱的siki老师,今天起每天都会在这里为大家带来一个Java语法中有趣的知识点,Q群175158287,欢迎同大家多多交流哈!
今天给大家带来的是Java中的异常处理
首先我们要明白为什么需要异常处理?
异常是导致程序中断执行的一种指令流。如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以
在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序的正常执行。
一旦产生异常,异常之后的语句并不会被执行,而是直接结束程序,并将错误报告给客户了。
其次要了解异常的基本处理格式try—catch。try中捕获异常,catch中处理对应的异常。
try中捕获异常,出现异常之后的代码将不再被执行,而是跳转到相应的catch语句中执行,用于处理异常。
对于异常,也可以设置其统一的出口,使用fially完成。
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}finally{
// 程序代码
}
了解异常处理基本结构,接下来便随着老师一起了解下Java的异常处理中经典案例吧
一、算数异常
当算术出现/0时的算术错误时会抛出java.lang.ArithmeticException异常
输出:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Cynical_Gary.Gary_Text.main(Gary_Text.java:13)
-1.0/0 = -Infinity
+1.0/0 = Infinity
抛出异常:/ by zero
二、数组下标越界异常
当使用数组超出定义数组下标时会抛出java.lang.StringIndexOutOfBoundsException异常
输出:
array[0]6
array[1]6
array[2]6
array[3]6
array[4]6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Cynical_Gary.Gary_Text.main(Gary_Text.java:11)
三、空指针异常
当使用到空指针时抛出java.lang.NullPointerException异常
输出:
Exception in thread "main" java.lang.NullPointerException
at Cynical_Gary.Gary_Text.main(Gary_Text.java:7)
四、缺少类的异常
当未找到MySQL驱动程序时抛出java.lang.ClassNotFoundException异常
输出:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
五、非法访问异常
当反射获得私有域中与 "hash"相匹配的 int 值时抛出java.lang.IllegalAccessException异常
输出:
java.lang.IllegalAccessException: Class Cynical_Gary.Gary_Text can not access a member of class java.lang.String with modifiers "private final"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(Unknown Source)
at java.lang.reflect.AccessibleObject.checkAccess(Unknown Source)
at java.lang.reflect.Field.getInt(Unknown Source)
at Cynical_Gary.Gary_Text.main(Gary_Text.java:12)
六、文件无法发现异常
当使用File类未找到本地文件时抛出java.io.FileNotFoundException异常
输出:
java.io.FileNotFoundException: d\kira.txt (系统找不到指定的路径。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.(Unknown Source)
at Cynical_Gary.Gary_Text.main(Gary_Text.java:14)
Exception in thread "main" java.lang.NullPointerException
at Cynical_Gary.Gary_Text.main(Gary_Text.java:19)
七、数据库操作异常
当未成功链接数据库时抛出java.lang.ClassNotFoundException异常
输出:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at Cynical_Gary.Gary_Text.main(Gary_Text.java:16)
Exception in thread "main" java.lang.NullPointerException
at Cynical_Gary.Gary_Text.main(Gary_Text.java:24)
这里需要将MySQL数据库驱动包配置到构建路径中,否则将不能抛出SQLException异常,而是抛出ClassNotFoundException异常
八、方法中抛出异常
自定义方法异常类未实现时,抛出java.lang.UnsupportedOperationException异常
输出:
Exception in thread "main" java.lang.UnsupportedOperationException: 此方法尚未实现
at Cynical_Gary.Gary_Text.throwException(Gary_Text.java:6)
at Cynical_Gary.Gary_Text.main(Gary_Text.java:9)
九、方法上抛出异常
不使用try/catch代码块在方法上抛出java.lang.ClassNotFoundException异常
输出
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at CynicalGary.Gary_Text.throwsException(Gary_Text.java:5)
at CynicalGary.Gary_Text.main(Gary_Text.java:10)
注意点:捕获单个异常,Java中捕获异常是通过try...catch...dinally语句来完成的,其中try语句块是必须的,catch和finally语句块可以选择一个或两个。try语句块用来放置可能出现问题的语句,catch语句块用来放置异常后执行的代码,finally语句块用来放置无论是否发送异常都需要执行的代码