异常体系

Java 异常 无法运行 java运行时的异常_java


我们在系统中有一个基类时throwable,异常包。

然后Error类继承之,Error类描述的是java运行时内部错误或者导致资源耗尽的错误,一旦这种错误出现,不是抛出异常,会直接告知用户并安全终止。比如栈溢出

Exception继承throwable后,又被IOEception和RunningException继承。

IOException表示:书写的程序本身是没有问题的,但是由于出现IO问题导致的异常。比如打开一个不存在的文件。

RunTimeException是运行时异常;是由于程序本身错误导致的。

——————————————————————————————————

除了这种关系,异常还分为受查异常和非受查异常。

非受查异常:就是继承于Error和RunTimeException类的所有异常,不强制用户处理,但是运行会报错终止。

受查异常:Exception以及IOException的子类,会强制用户进行处理。

常见的运行时异常,以及导致原因 --5个

1在数组应用中

因为数组在java中属于引用数据类型所以,必须在使用前初始化,否则编译时不会出错,运行时会爆出异常,NullPointerEXception --空指向异常

Java 异常 无法运行 java运行时的异常_Java 异常 无法运行_02


**(1)**在字符串比较中,如果一个空对象"."调用对应类中成员则会运行时异常nullPointException

String str1 =null;
str1.equals("hello");

2在数组访问中

当访问的数组下标越界时会报一个运行时异常,ArrayIndexOutOfBoundsException–数组访问越界异常

Java 异常 无法运行 java运行时的异常_运行时异常_03


3在多态中

当父类引用需要调用子类填充方法时,需要向下转型。但是向下转型前需要先向上转型,否则会发生运行时异常,ClassCastException–类型转换异常

我们可以通过: 引用名 instanceof 类名 的返回值来判断该引用是否表示该类实例,从而判断是否发生了向上转型。

Java 异常 无法运行 java运行时的异常_java_04

4在包装类中

如果我们利用给基本数值类型的对应的包装类中穿的类型不同则会发生运行时异常NumberFromatException

Java 异常 无法运行 java运行时的异常_java_05

5当数学运算中比如10/0,除0操作就会引用数学运算异常。ArithmeticException

Java 异常 无法运行 java运行时的异常_运行时异常_06

异常处理格式

语法:

try{
//可能出现异常的语句
}catch(异常类 异常对象){
//出现异常后进入catch,这里是解决方案
}
finally{
//异常出口,这里无论是否发生异常都会执行该finally中的代码,即使try或者catch中出现return,依然会执行finally
}

以上是最全的。但是我们在书写过程中可以有选择的搭配try和catch或者finally。

throw throws用法

throws用在方法上,表示此方法中可能发生异常但是内部不处理,将异常抛给调用方,返回后处理。

throw 用在方法中,用来用用户自行产生异常类对象。

语法:throw new Exception("对该方法描述"); 举个例子。

Java 异常 无法运行 java运行时的异常_数组_07

断言

assert 布尔表达式 :“false的藐视”;
eg:assert num != 0 :“错误num不能为0”;
当断言中的布尔表达式返回false时,会抛出异常。
但是断言需要手动开启。运行时 java -ea //开启断言