java中的 try{}catch
1.try{}catch的目的
如果没有try的话,出现异常会导致程序崩溃。而try则可以保证程序的正常运行下去
2.try{}catch的写法
try{
//需要被检测的异常代码
// 可能出错的代码
}catch (Exception e){ //这里表明是什么错误 ---- 重点
//异常处理,即处理异常代码
//几种常见的处理形式
}
举个栗子:
//日志记录错误 + 预判错误形式
logger.error("调用[日志接口]异常", e);
//返回错误时需要的值
obj.setState(1);
obj.setErrmsg("项目配置可能包含重复数据");
return obj;
//在命令行打印异常信息在程序中出错的位置及原因
e.printStackTrace();
//抛出自定义的异常
throw new BusinessException(DescribableEnum.OUTECONOMY_ACCOUNT_AMOUNT_BIZ_DATE);
}finally {
//一定会执行的代码 try之前就已经执行了 后显示
}
}
3.异常类型准确定义
(1)NullPointerException : 空指针异常
(2)ClassNotFoundException : 指定的类不存在异常
①类的名称和路径是否正确
②依赖的包是否正确
③注解错误,调用不到
(3)ArithmeticException : 数学运算异常
①除数为0
(4)ArrayIndexOutOfBoundsException : 数组下标越界
①如:数组有 2 个位置,却调用了第3个
(5)IllegalArgumentException : 方法的参数错误
①比如音量调节方法中的音量参数如果写成负数
②如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常
③Mapper.xml的 id重复
(6)IllegalAccessException : 没有访问权限
①检查 public private 等
(7)IncompatibleClassChangeError : 不兼容的类变化错误
①检查依赖
(8)InstantiationError : 实例化错误
①new操作符 构造一个抽象类或者接口时抛出该异常
(9)LinkageError : 链接错误
(10)StackOverflowError : 堆栈溢出错误
①当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误
(11)ClassCastException : 类型强制转换异常
(12)NumberFormatException : 字符串转换为数字异常
(13)SQLException : 操作数据库异常
(14)IOException :输入输出异常
(15)NoSuchMethodException:方法未找到异常
(16)RuntimeException:运行时异常
(17)SecurityException:安全异常
(18)TypeNotPresentException:类型不存在异常
注:
(1)正确使用try catch 异常,try 不是能吃掉所有的异常,必须要在catch中使用正确的异常才能捕获。但是在实际开发中,很难精确的捕获可能存在的异常。因此我们大多使用第一种情况,exception是所有异常的父类,能捕获到所有的异常。