自学到java的异常时,有一些自己的理解,现在总结一下。
1.为什么要使用异常
刚开始估计很多初学者和我一样,不理解为什么要异常,什么throws抛出异常,还要catch接住好麻烦的样子,通过一个简单的例子来理解一下。
package 异常; class Circular { public double area(double radius) { if(radius<=0) { System.out.println("非法数值"); } return 3.14*Math.pow(radius,2); } } public class Second { public static void main(String[] args) { Circular c=new Circular(); System.out.println(c.area(-4)); } }
这里只是一个简单的异常条件,园的半径不可能小于等于0的,如果直接用if判断然后处理,如果判断条件很多,处理又很复杂,就会影响代码的阅读性,很难在茫茫多的判断条件中找到正常流程的代码。所以抛出异常,然后在另外的类catch处理了异常,没有抛出的就是正常流程,很容易找到正常的流程,又根据异常的不同,很容易在另外的类找到处理方法,提高了代码的阅读性。
2.异常的分类
可以看出,java分为2种异常有分别为Error和Exception,2种异常又都是Throwable的子类。Error用来表示严重的错误,一般是系统或者底层资源的错误,如虚拟机错误和内存溢出是不可控制的,这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。Exception是一般化应用程序级别的的异常,又分为编译时的异常和运行时的异常,运行时的异常都属于RuntimeException。RuntimeException不需要通过try,catch捕获,必须通过修改代码来解决。
常见的RuntimeException错误
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常
3.thorws和thorw
thorws用在方法声明后面,跟的是异常类名,可以跟多个异常类名,用逗号隔开,表示抛出异常,由该方法的调用者来处理。
thorw用在方法体内,跟的是异常对象名,只能抛出一个异常对象名,表示抛出异常,由方法体内的语句处理。
4.Exception(String massage)
Exception(String massage)方法中massage表示错误的说明,自定义异常可以继承这个类,重写这个方法:
class CustomException extends Exception { CustomException(String massage) { super(magssae); }
这样创建CustomException(massage)对象,调用toString方法时就可以实现自定义异常名称和说明了。