Try crash总结
1. 开发中,找bug。常用方法有3个:
使用try catch;
拦截所有crash到我指定的地方;
超多的Log,Log有统一的控制开关。
2. Java面向对象------>try{}catch(){}异常
在整个异常处理机制中,异常在系统中进行传递,传递到程序员认为合适的位置,就捕获到该异常,然后进行逻辑处理,使得项目不会因为出现异常而崩溃。
语法格式:
try{
//逻辑代码
}catch(异常类名 参数名){
//处理代码(出现该类型的异常时的处理代码)
}
程序执行到 try-catch 语句时,如果没有发生异常,则完整执行 try语句块内部的所有代码,而 catch 语句块内部的代码不会执行,如果在执行时发生异常,则从发生异常的代码开始,后续的 try 语句块代码不会执行,而跳转到该类型的异常对应的 catch 语句块中。
在实际程序中,也可以根据异常类型的不同进行不同的处理,这样就需要多个 catch 语句块,其结构如下:
try{
//逻辑代码
} catch(异常类名 1 参数名 1){
//处理代码 1
} catch(异常类名 2 参数名 2){
//处理代码 2
}
……
在执行时,按照 catch 语句块书写的顺序从上向下进行匹配。
如果异常类直接存在继承关系,则子类应该书写在上面,父类应该书写在下面,否则将出现语法错误。
如果在程序执行时,所有的异常处理的代码都是一样的,则可以使用Exception 代表所有的异常,而不需要一一进行区分,示例代码如下:
try{
//逻辑代码
}catch(Exception e){
//统一的处理代码
}
在实际使用时,由于 try-catch的执行流程,使得无论是 try 块还是 catch块都不一定会被完全执行,而有些处理代码则必须得到执行,例如文件的关闭和网络连接的关闭等,这样如何在 try 语句块和 catch 语句块中都书写则显得重复,而且容易出现问题,这样在异常处理的语法中专门设计了finally语句块来进行代码的书写。语法保证 finally 语句块内部的代码肯定获得执行,即使在 try或 catch 语句块中包含 return 语句也会获得执行,
语法格式如下:
finally{
//清理代码
}
该语法可以和上面的两种 try-catch语句块匹配,也可以和 try 语句匹配使用,
和 try 语句块匹配的语法格式如下:
try{
//逻辑代码
}finally{
//清理代码
}
这样在执行时,无论 try 语句块中的语句是否发生异常,finally 语句块内部的代码都会获得执行。
而只书写 finally 而不书写 catch 则会导致异常的丢失.
语法:
try{
//逻辑代码
}catch(异常类名 参数){
//异常处理代码
}finally{
//清理代码
}
这样就是整个异常处理部分的逻辑代码、异常处理代码和清理的代码成为一
个整体,使得程序代码更加显得紧凑,便于代码的阅读和使用。
最后,介绍一下使用异常处理语法时需要注意的问题:
1、书写在 try 语句块内部的代码执行效率比较低。所以在书写代码时,只把可能
出现异常的代码书写在 try 语句块内部。
2、如果逻辑代码中抛出的异常属于 RuntimeException 的子类,则不强制书写在
try 语句块的内部,如果抛出的异常属于非 RuntimeException 的子类,则必须进
行处理,其中书写在 try 语句块是一种常见的处理方式。
3、 catch语句块中只能捕获 try 语句块中可能抛出的异常,否则将出现语法错误。
声明自定义异常类
异常类在语法上要求必须直接或间接继承 Exception,可以根据需要选择继承
Exception 或 RuntimeException 类,这样也设定了自定义异常类的类型。如果直
接继承 Exception,则属于必须被处理的异常,如果继承 RuntimeException,则不
强制必须被处理。当然,可以根据需要继承其它 Exception 的子类。
在编码规范上,一般将异常类的类名命名为 XXXException,其中 XXX 用来
代表该异常的作用。
示例代码如下:
/**
* 自定义异常类
*/
public class MyException extends RuntimeException {}