1.异常介绍
Java常见异常
在Java中提供了一些异常用来描述经常发生的错误,对于这些异常,有的需要程序员进行捕获处理或声明抛出,有的是由Java虚拟机自动进行捕获处理。Java中常见的异常类:
1.1 runtimeException子类:
1、 java.lang.ArrayIndexOutOfBoundsException
数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2、java.lang.ArithmeticException
算术条件异常。譬如:整数除零等。
3、java.lang.NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等
4、java.lang.ClassNotFoundException
找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。5、java.lang.NegativeArraySizeException 数组长度为负异常
6、java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常
7、java.lang.SecurityException 安全性异常
8、java.lang.IllegalArgumentException 非法参数异常
1.2 IOException
IOException:操作输入流和输出流时可能出现的异常。
EOFException 文件已结束异常
FileNotFoundException 文件未找到异常
1.3其他
2.异常处理ClassCastException 类型转换异常类
ArrayStoreException 数组中包含不兼容的值抛出的异常
SQLException 操作数据库异常类
NoSuchFieldException 字段未找到异常
NoSuchMethodException 方法未找到抛出的异常
NumberFormatException 字符串转换为数字抛出的异常
StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常
IllegalAccessException 不允许访问某类异常
InstantiationException 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
public class ExceptionTest
{
public static void main(String[] args)
{
int c = 0;
try
{
int a = 3;
int b = 0;
// 这块代码出现了异常
c = a / b;
// 那么异常之后的代码都不会被执行
System.out.println("Hello World");
}
catch (ArithmeticException e)
{
e.printStackTrace();
}
finally
{
//不管有没有发生异常,finally语句块都会被执行
System.out.println("Welcome");
}
System.out.println(c);
// 当b为0时,有异常,输出为c的初始值0
}
}
3.自己公司项目的异常处理
3.1 生产代码禁止以System及Throwable.printStackTrace 的方式输出日志信息,必须用Logger替代。
推荐:
import java.util.logging.*;
public class LoggingDemo {
public static void main(String[] args) {
Logger logger = Logger.getLogger("!LoggingDemo");
try {
System.out.println(args![0]);
}
catch(!ArrayIndexOutOfBoundsException e) {
logger.warning("没有提供执行时的自变量!");
}
}
}
不推荐:
1.System.out方式:
System.out.Print(“logging……”);
2.printStackTrace方式:
try {
…..
} catch(Exception e) {
e.printStackTrace();
}
3.2关于自定义异常
通过定义了一个 BizServiceException 这个异常类,它是继承 RuntimeException这个类
代码如下:
public BigDecimal unFreezeAmt(UnFreezeReq req) throws BizServiceException {
String frzJnlNo = req.getFreezeJnlNo();
String trxMemo = req.getTrxMemo();
String currOpId = req.getCurrOpId();
Date currDate = new Date();
String acctNo = req.getAcctNo();
String workDate = CommonBusinessUtil.getCurrentWorkDate();
FreezeReserveDtlPo unFreezePo = fnrDtlRepository.findOne(frzJnlNo);
BusinessAcctUtils.checkDataPreUnFreeze(unFreezePo);
if(!StringUtils.equalsIgnoreCase(unFreezePo.getAcctNo(), acctNo)){
throw new BizServiceException("TECH0003", "XX明细所属XX账户与会员编号不一致");
}
3.3
好的写法
try {
ObjectMapper objectMapper = new ObjectMapper();
String log = objectMapper.writeValueAsString(obeject);
logService.saveReqLog(log, "充值");
} catch (Exception e) {如果这里的Exception类能定义的再准确点就更好了
LOGGER.debug("error while saving log", e);
}