异常写过了好几篇博客。
总结好几次没到位。
java异常的分类
异常的顶级父类是Throwable。
其在分为error与exception两个类。
**error **
error称之为错误,代表了JVM中的错误,错误不能被程序员通过代码处理,Error很少出现,所以我们主要关心与Exception下面的异常
Exception
Exception是java异常的核心。
我们主要是处理Exception这个异常
根据上面两种异常,我们可以根据其分成两类
非检查异常
Error和RuntimeException以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。
检查异常
除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。
如果不进行检查,编译器将不会通过编译器
可以通过编译期,但是在运行阶段就会报错,除数为0
package Exception;
/**
* @Classname Calcuate
* @Description TODO
* @Date 2020/3/21 12:23
* @Created by mmz
*/
public class Calcuate {
public static void main(String[] args) {
System.out.println("欢迎来到计算器");
int a = 1/0;
System.out.println(a);
}
}
如何进行处理呢?
package Exception;
/**
* @Classname Calcuate
* @Description TODO
* @Date 2020/3/21 12:23
* @Created by mmz
*/
public class Calcuate {
public static void main(String[] args) {
System.out.println("欢迎来到计算器");
try{
int a = 1/0;
System.out.println(a);
}catch (Exception e){
System.out.println("a的除数为0,请重试");
}
}
}
使用try/catch块
关于throw与throws
throw就是简单抛出一个异常语句
throws就是不处理异常抛给调用放来处理异常
public static void function() throws NumberFormatException{
String s = "abc";
System.out.println(Double.parseDouble(s));
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
function();
} catch (NumberFormatException e) {
System.err.println("非数据类型不能转换。");
//e.printStackTrace();
}
}