异常概念
通常大家认为异常就是错误。
但这个错误有很多种:
1.语法错误
2.JVM虚拟机错误
3.平台错误
4.程序运行错误(平台或者资源或者逻辑,数值等错误)
常见的异常
1. java.lang.NullPointerException 空指针
2. java.lang.ArrayIndexOutOfBoundsExcetion 下标越界,只要有IndexOutOfBounds就是下标越界有关
3. java.lang.ArithmeticException 除数不能为零
4. java.lang.ClassCastException 类型转换异常
5. java.lang.NimberFormatException 数字格式化异常
6. java.lang.NoSuchMethodError 调用的方法不存在
7. java.lang.NoSuchMethodException 方法不存在(反射机制)
8 .java.lang.NoSuchFieldError JVM虚拟机出现属性找不到异常
9. java.lang.NosuchFieldException 反射机制中出现属性找不到异常
10.java.lang.NoClassDefFoundError jvm虚拟机运行代码时找不到class类文件
11.java.lang.ClassNoFoundException Class.forName , 这个方法报错的话,查看一下是否缺少文件
12.java.lang.OutOfMemoryError 虚拟机内存不够,需要扩大
13.java.lang.ClassFormatError 类格式错误 看看jdk版本是否有误。
异常捕获处理
try{
代码
}catch( 异常类型 ){
处理代码
} catch( 异常类型 ){
处理代码
}
try里面代码出现异常马上就跳到catch陷阱,但是也要类型匹配才行,要不不然不能跳进去,如果跳不进去又会向外抛.
Try catch 可以嵌套,但是需要注意的时,如果嵌套在try里面,如果嵌套的异常处理不了它可以调到外面的try catch去处理。但如何嵌套在catch异常处理代码中,那样如果嵌套的异常处理不了是不可以调到外面的cry catch中的,只能直接报异常了、
通用陷阱
从上图可看出,异常Throwable是祖先类,下来是延伸细分,Exception(程序代码异常类)和Error(JVM虚拟机异常类)
Exception(程序代码异常类)下面还分出一个RuntimeException类
所以Throwable是最通用的异常,它可以接收全部异常类型,Exception可以接收程序代码全部异常。Error可以接收JVM虚拟机跑出的全部异常。下来就到详细的一一细分的异常类型。
建议:通用陷阱一般不要挖,错误报的越仔细越好。或者通用异常陷阱,要写在最后一个catch后面,这样就会先判断全面的catch,再往后面判断。
注意:catch 里必须写输出代码,要不然没有任何提示,就不知道有没有出现异常了。要么System.out.println 要么printStackTrace。
finally 关键字
终极执行块,无论有没有出现异常,都会执行里面的代码。
try{
代码
}catch( 异常类型 ){
处理代码
}finally{
必执行代码
}
try里发生异常,执行了fianlly代码,如果finally也有异常抛出,这样就会覆盖之前抛出的异常(报新不报旧)
自定义异常
1.throw关键字:抛出异常
2.throws关键字:在方法声明抛出的异常throws后面可以挂很多异常类来提醒程序员可能有一次抛出。方法中可以不写catch陷阱,直接将错误向抛。
RuntimeException 以下的所有异常类(包括自己),都不需要强制书写try catch或者方法声明抛出
自定义异常该继承那个类?
1.如果错误很严重,必须提醒的那你就需要继承 Exception,但必须写 try catch 或者 throws
2.如果错误不严重,而且这种错误经验足了慢慢就避免,你就继承RuntimeException 不强制要求你写 try catch 或者 throws
注意:自定义异常的类名越详细越好
例如:TuiXueQuanXianXiuGaiException