一. Java中异常系统的架构1 .程序发生异常时的正常现象【与人生病相同】
2 .在2.Java中,异常类Throwable【类】是顶级异常类
3.Throwable【类】有两个子类。
(1)错误
)2)扩展【异常】
二、Error与Exception的差异Error是java程序运行过程中无法预料的异常情况,发生这种异常后,会直接导致JVM无法处理或无法恢复的情况。 因此,无法捕获这些异常,例如OutOfMemoryError和NoClassDefFoundError。 【癌症】
Exception是java程序运行中预期的异常,我们可以获取该异常,并对该异常进行业务外处理。 【感冒】
三.运行时异常与非运行时异常的区别非运行时异常—检查性异常应在编写代码时通过try catch捕获。 例如,IOException异常。
运行时异常-未检查的异常可以忽略在代码编写或使用期间可以由规范避免的捕获操作(例如,ArrayIndexOutOfBoundsException )。
四. Java异常处理原理1.问题自己处理不了
如果出现异常,java将根据问题中描述的异常类创建对象(实例)的具体异常对象,并将该对象抛到更高级别【谁调用更高级别】。 具体步骤:
method具体打印异常位置—主的主要方法— jvm虚拟机—发生异常的位置和原因。
2.问题可以自己处理掉通过try-catch代码块处理异常
将可能发生异常的java代码用“try{可能发生异常的代码}catch捕获的异常}{异常处理方式}”块括起来,发生异常try{}时捕获异常并结束代码的执行,捕获到的异常由catch捕获
五. try{}catch(}{}finally{}的用法异常可以自己处理掉 — 通过try-catch代码块处理异常
格式:
try{//可能发生异常的代码(catch )//要捕捉的异常)//异常处理方法(finally )//最终代码)1) try —捕捉可能发生的异常
)2) catch(/要逮捕的异常) )//异常处理方式) -处理异常
catch之后的'() ) )中,确定了特定的异常类型
catch的{}-具体异常的处理过程
(3) finally无论有无异常都要执行的动作
例如:
package com.wangxing.test1; 如果不能确定publicclasstestmain { publicstaticvoidmain (string [ ] args ) )/1.try{}中的哪一个具体异常,则catch块的参数表示exception/system.out.println(RES=='RES ); }catch(exceptione ) {System.out.println ) )处理异常!' ); (//2.1个try )后面可以跟随多个catch块,根据特定的异常等级,每个catch块由低到高的顺序表示try(intnumbers )=new int (new int )2); numbers[0]=10; numbers[1]=0; int num1=numbers[0]; int num2=numbers[1]; int num3=num1/num2; numbers[2]=num3; System.out.println (程序执行完毕! ' ); } catch (indexoutofboundsexceptione3) {System.out.println (处理数组下标越界异常!' ); }处理}catch(ArithmeticexceptionE2) {System.out.println )除数为0的异常! ' ); }catch(exceptionE1 ) system.out.println('exception异常! ' ); }catch(throwablee ) system.out.println('throwable异常! ' ); ) finally(system.out.println ) (“执行所有有无异常的处理”) }运行结果:
如果无法确定try{}的具体异常,可以通过在catch块的参数中定义Exception/Throwable类的对象来代替具体的异常类型。
2 .一个try{}之后可以跟着多个catch块,根据具体的异常等级需要按从低到高的顺序排列多个catch块
3.finally{}-无论有无异常都要执行的操作
4 .当4.try{}catch{}{}finally{}出现在具有返回值的方法中时,finally{}
中的内容实在本方法的return语句之前运行。例如: package com.wangxing.test2;public class TestClass {public int testMehtod() {try {int a=10;return a;}catch(Exception e) {//控制台打印具体异常e.printStackTrace();}finally {System.out.println("有无异常都执行");}return 0;}} package com.wangxing.test2;public class TestMain {public static void main(String[] args) {TestClass tc=new TestClass();System.out.println(tc.testMehtod());}}
运行结果:
六、throws与throw关键字的用法throws —> 声明方法抛出异常给上一级【谁调用谁就是上一级】
格式:访问限制修饰符 返回值类型 方法名称()throws 具体异常类型{ }
当我们无法判断读具体异常类型的时候使用Exception/Throwable代替
例如:
运行结果:
throw —> 手动引发一个具体异常
自定义异常 —> 编写一个新类,继承Exception/Throwable,在构造方法中访问父类的构造方法。
运行结果:
七、Java中常见运行时异常 1. NullPointerException - 空指针引用异常
2. ClassCastException - 类型强制转换异常。
3. IllegalArgumentException - 传递非法参数异常。
4. ArithmeticException - 算术运算异常
5. ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
6. IndexOutOfBoundsException - 下标越界异常
7. NegativeArraySizeException - 创建一个大小为负数的数组错误异常
8. NumberFormatException - 数字格式异常
9. SecurityException - 安全异常
10. UnsupportedOperationException - 不支持的操作异常