#top 写在最前面
水滴石穿,稳固基础,基础永远是最需要注重的
文章仅作为JAVA编程复习使用
文章参考博主:<遇见狂神说>、<生命是有光的>
定义:程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。
产生异常的原因:
这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。
异常的执行流程
Exception
的异常或者其子类,编译阶段就会报错RuntimeException
的异常或者其子类,编译阶段不报错,但是运行阶段报错ArrayIndexOutOfBoundsException
NullPointerExceptio
ClassCastException
NoSuchElementException
ArithmeticException
NumberFormatException
public class ExceptionDemo { public static void main(String[] args) { System.out.println("程序开始。。。。。。"); /** 1.数组索引越界异常: ArrayIndexOutOfBoundsException。*/ int[] arrs = {10 ,20 ,30}; System.out.println(arrs[2]); // System.out.println(arrs[3]); // 此处出现了数组索引越界异常。代码在此处直接执行死亡! /** 2.空指针异常 : NullPointerException。直接输出没有问题。但是调用空指针的变量的功能就会报错!! */ String name = null ; System.out.println(name); // 直接输出没有问题 // System.out.println(name.length()); // 此处出现了空指针异常。代码在此处直接执行死亡! /** 3.类型转换异常:ClassCastException。 */ Object o = "齐天大圣"; //Integer s = (Integer) o; // 此处出现了类型转换异常。代码在此处直接执行死亡! /** 5.数学操作异常:ArithmeticException。 */ // int c = 10 / 0 ; // 此处出现了数学操作异常。代码在此处直接执行死亡! /** 6.数字转换异常: NumberFormatException。 */ String num = "23aa"; Integer it = Integer.valueOf(num); // 此处出现了数字转换异常。代码在此处直接执行死亡! System.out.println(it+1); System.out.println("程序结束。。。。。。"); } }
Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
编译时异常的处理方式:
方法 throws Exception{ } //在出现编译时异常的地方层层把异常抛出去给调用者,调用者最终抛出给JVM虚拟机,JVM虚拟机输出异常信息,直接干掉程序,这种方式与默认方式是一样的。虽然可以解决代码编译时的错误,但是一旦运行时真的出现异常,程序还是会立即死亡,这种方式并不好
方式二:捕获处理:在出现异常的地方自己处理,谁出现谁处理
try{ // 监视可能出现异常的代码 }catch{异常类型1 变量}{ // 处理异常 }catch{异常类型2 变量}{ // 处理异常 } //第二种方式,可以处理异常,并且出现异常后代码也不会死亡 //但是从理论上来说,这种方式不是最好的,上层调用者不能直接知道底层的执行情况!
方式三:在出现异常的地方把异常一层一层的抛出给最外层调用者,最外层调用者集中捕获处理
try{ // 可能出现异常的代码 }catch(Exception e){ e.printStackTrae(); //直接打印异常栈信息 } //这种方案最外层调用者可以知道底层执行的情况,同时程序在出现异常后也不会立即死亡,这是理论上最好的方案。
try{ //可能出现异常的代码! }catch{Exception e}{ e.printStackTrace(); }finally{ // 无论代码是出现异常还是正常执行,最终一定要执行这里的代码!! }
Closeable
接口的,都自带close()
关闭方法