java异常介绍

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其他

ClassCastException    类型转换异常类

ArrayStoreException  数组中包含不兼容的值抛出的异常

SQLException   操作数据库异常类

NoSuchFieldException   字段未找到异常

NoSuchMethodException   方法未找到抛出的异常

NumberFormatException    字符串转换为数字抛出的异常

StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

IllegalAccessException  不允许访问某类异常

InstantiationException  当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常


2.异常处理

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);
		}	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值