异常处理机制

所有异常类的父类是Throwable
 
面试注意点:
1.Exception=RuntimeException(运行时异常)+CheckedException(检查异常)
  CheckedException常见有IO异常和SQL异常     
  RuntimeException=NullPointerException、ArrayStoreException(数据存储异常)、ClassCastException(类型转换异常)、InexOutOfBoundException(数组越界异常)、BufferOverflowException(缓冲区溢出异常)、ArithmeticException(算数异常)、等
2.异常不停的向上一层抛出直到遇见处理块,多线程由Thread.run()抛出,单线程由main()抛出.抛出之后相应线程或进程退出
3.(1)基类在上层,所以先捕获子类后捕获基类
   (2)尽早抛出异常,能处理就处理不能再抛出,
4.try/catch/finally的组合:(1)try/catch(2)try/finally(3)try/catch..catch/finally
     a.try,finally只能一个,catch可以多个。
     b.先执行try有异常则执行catch(多个catch相当于if else if)最后执行finally。无异常时先try然后finally
     c.jdk1.7允许用管道写多个catch:  catch(IOException|Exception e){}
5.(1)Throwable:public class Throwable extends Object implements Serializable
  (2)Exception:public class Exception extends Throwable
a.(1)是所有异常的超类,(2)是所有异常的父类
b.12都是公共类,因为1可以被序列化(Serializable)所以其子类Exception 也可以被序列化
 
6.捕获一个线程抛出的异常的方法:用UncaughtExceptionHandler(异常捕获处理方法)来捕获线程抛出的异常
.....
7.throw和throws的区别:
throws用在函数头,表示出现异常的可能性但不一定会发生异常。
throw用在函数体,显示的抛出一个异常,若被执行则一定抛出了该异常
例:class test{
    public void f(int i) throws MyException{
    if(i=1)throw new MyException();
    }
 
 
序言
 
Android异常剖析意义:
1、提前预见可能会报错的代码段;
2、提高解决问题的效率。
学习收获:
1、Android常见异常发生的场景;
2、如何快速定位问题、以及怎么分析、解决问题;
3、实际开发中,如何做好常见异常的防范。
 
第一章Android常见异常的分类
大致可以分为以下两类:
1、编译时错误(eg:ClassNotFoundException/layout中找不到ID等);安装过程报错
2、运行时(Runtime)错误。
(eg:数组越界/类型转换异常等)运行过程报差
 
第二章常见异常举例
1.编译期异常(例如找不到类):
(1)找到caused by冒以后的部分
(2)有代码出错的代码行数,可以点击定位查看
*运行期异常(以数组越界为例):定位查看,定位前一句通常也有错误提示
 
第三章 异常解决方案

 

第四章具体案例分析
 
1.空指针
NullPointerException:使用了一个没有被实例化的指

 

 
2.越界
ArrayIndexOutofBoundsException:

 

3.权限不够
SecurityException:权限去AndroidManifest.xml里设置

 

 
第五章Android全局异常捕获处理
1. 全局错误 

 

 
UncaughtExceptionHandler类有相应方法
public class CrashHandler implements Thread. UncaughtExceptionHandler{
private static CrashHandler mInstance;
private crashHandler(){}
//单例
public static crashHandler getInstance(){
if(mInstance==nul1){
synchronized(CrashHandler. class){
if(mInstance==null){
mInstance=new CrashHandler();
return mInstance;}
 
public void uncaughtException(Thread t,Throwable e){
//1,收集错误信息;
//2,保存错误信息;
//3,上传到服务器
}
posted @ 2018-10-29 21:42  StarZhai  阅读(155)  评论(0编辑  收藏  举报