【java学习】异常

来源:互联网 发布:逻辑思维和编程 编辑:程序博客网 时间:2024/06/06 03:08

1,概念

当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。

1)场景

违反语义规则包括2种情况:
①JAVA类库内置的语义检查
例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。
②JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。
所有的异常都是java.lang.Thowable的子类。

2)好的习惯

使用finally代码块:定义一定执行的代码。通常用于关闭资源。如:数据库关闭。

2,Throwable

异常

1)Error与Exception区别

都是Throwable的子类。
Error表示系统级的错误和程序不必处理的异常,
Exception表示需要捕捉或者需要程序进行处理的异常。

Error表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。

2)检查异常

编译器要求必须处置的异常。
除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。
特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

注意:.try{}catch{}会增加额外的开销。

3)非检查异常

编译器不要求处置的异常。
包括运行时异常(RuntimeException与其子类)和错误(Error)。

3,crash上传到服务器

通过设置CrashHandler来监视应用的crash信息。

当程序crash时会调用CrashHandler的uncaughtException方法。在这个方法中获取crash信息并上传到服务器。

4,其他问题

1)方法数越界

问题:
Android的限制:一个应用的方法数不能超过65536,否则会出现编译错误,程序无法成功安装到手机上。

解决方案一:multidex方案
将一个dex文件拆分为多个dex文件来避免单个dex文件方法数越界的问题。

解决方案二:动态加载。
将部分代码打包到一个单独的dex文件中,并在程序运行时根据需要动态加载dex。此方案实现了程序按需加载,同时提供了应用按模块更新的可能性。

原创粉丝点击