Java异常的分类,在按照异常需要处理的时机分:
1. 编译时异常(CheckedException)也称为受检查异常,Java认为Checked异常都是可以被处理的异常,所以Java程序必须显示处理Checked异常,如果程序没有处理Checked异常,该程序在变异时就会大声错去无法编译。对 Checked 异常处理方法有两种:
前方法知道如何处理该异常,则用 try...catch 块来处理该异常。
当前方法不知道如何处理,则在定义该方法是声明抛出该异常。
2. 运行时异常(RuntimeException),运行时异常只有当代码在运行时才发行的异常,编译时不需要 try catch。Runtime 如除数是 0 和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。
总结:异常的跟类为java.lang.Throwable,Throwable下面派生了两个子类Error和Exception,Error一般指的是虚拟机相关的问题,Exception异常是可以处理的异常,Exception又分为系统异常金和普通异常,系统异常是软件本身缺陷所导致的,也就是开发人员考虑步骤所导致的,如数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException),类型转换异常(ClassCastException),普通异常是运行环境的变化胡或者异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。
常见的几个RuntimeException
1. java.lang.NullPointerException(空指针异常)
2. java.lang.ClassNotFoundException(指定找不到类)
3. java.lang.IndexOutOfBoundsException(数组下标越界异常)
4. java.lang.IllegalArgumentException(方法传递参数异常)
5. java.lang.ClassCastException(数据类型转换异常)
6. SQLException SQL异常,常见操作数据库是的SQL语句异常。
throw和throws的区别
throw:
1.throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。
2.throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定是抛出了某种异常。
throws:
1.throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。
2.throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。
3.throws 表示出现异常的一种可能性,并不一定会发生这种异常。
区别
throw 是抛出一个具体的异常类型,throws是用来声明一个方法可能抛出的所有的异常信息,throws是将异常信息声明但是不处理,而是将异常上传,谁调用我就交给谁来处理。
throws:当不知到的异常,不想自己处理,不想有任何的异常处理,就可以交给被人处理。
格式是:方法名(参数)throws 异常1,异常2...
class ExceptionHandleTest{
public void test(int i,int j) throws Exception{
int result = i/j;
return result;
}
}
throw:就是自己进行异常处理,处理的时候有两种形式,要么自己捕获异常(也就是try catch处理),要么声明抛出一个异常(就是throws异常)
public ProductInfo onSale(String productId) {
ProductInfo productInfo = repository.findOne(productId);
if (productId==null){
throw new MyException(ResultEnum.PRODUCT_NOT_EXIST);
}
if (productInfo.getProductStatusEnum()==ProductStatusEnum.UP){
throw new MyException(ResultEnum.PRODUCT_STATUS_ERROR);
}
}