Java中 异常只会导致当前线程崩溃 其他线程不干扰 Android会杀死程序
Android 异常
异常关系图
基类 Throwable
----> Error
-->VirtulMachineError
-->StackOverFlowError
-->OutOfMemoryError
-->AWTError
---->Exception
-->:非运行时异常(编译异常,运行时异常以外的异常.语法角度必须处理 不处理不能运行项目)
-->RuntimeException(运行时异常,不处理可以运行)
-->ArrithmeticException
-->MissingResourceException
-->ClassNotFoundException
-->NullPointerException
-->IllegalArgumentException
-->ArrayIndexOutOfBoundException
-->UnkownTypeException
1:Android异常基类是Throwable 分为两大子类 Error(不可捕捉,只能优化) Exception(可捕捉)
1:Error 类异常 被设计成不可捕捉,因为这些异常是JVM产生的,Android开发只能通过优化代码的形式减少此类异常
2:Exception类异常 是java程序运行中阐释的各种异常,可以通过捕捉的方式处理
RuntimeException :
运行时异常 如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,
这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误
引起的,程序应该从逻辑角度尽可能避免这类异常的发生
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,
也没有用throws子句声明抛出它,也会编译通过。
非运行时异常:
运行时异常以外 父类是Exception的异常,语法角度上必须处理的异常 不处理不能运行 IOException SQLException 等异常
问题:OutOfMemoryError 为什么不能捕捉
OOM 父类是Error 是个错误不是异常 它是JVM产生的错误 是不受检查的异常.它是JVM产生的错误 JVM已经不能工作了只能停止不能捕捉
2:异常捕捉机制 try{} catch(){} finally{}
try :用于捕捉的代码块
catch:捕捉的异常
finally:无论是否捕捉最终执行
异常捕捉机制执行顺序
1:无异常:try-->finally
2:有异常catch处理异常:try--->catch-->finally
3:有异常catch 不处理异常:try 出异常 catch没处理异常 会直接抛给JVM finally会执行 但是后面的代码不执行
3:生命异常 throws 声明异常
写方法时觉得会出现异常或者自己没有能力处理异常 可以在方法参数后 写throws +异常类型 将此异常抛给方法调用者 这就是声明异常
public void int method(int a,int b) throws Exception{
return a/b;
}
4:抛出异常 throw new Exception()
程序出于某种逻辑考虑主动抛出异常 中断程序或者中断此段逻辑
public void int method(int a,int b) throws Exception{
throw new NumberFormatException()
return a/b;
}