众所周知,错误(Error)分为语法错、语义错、逻辑错,其中前两种使得程序不能通过编译器。逻辑错是程序的隐患,Java程序本身不能对错误处理,例如内存溢出、栈溢出。
异常(Exception)分为运行时异常、非运行时异常。运行时异常是不必须捕获的、可以避免的异常,如除数为0、数组越界。非运行时异常是必须捕获的、无法预见的、由特殊环境错误造成的异常,如文件没找到、网络通信失败、数据库连接失败。
通过try-catch-finally语句来处理异常,也可以在定义函数时确定将异常用throws抛给上级调用方法来处理。
自定义异常类示例:
package javalearning1;
/**
*
* @author WEN
*/
class MyException extends Exception {
public MyException() {
super();
}
public MyException(String msg, Throwable cause) {
super(msg, cause);
}
}
public class javalearning1_3 {
//1.throws将MyException异常抛给上级调用函数即main来处理
public static void test() throws MyException {
int a = 10 * 0; //2.假如这句话执行后产生MyException则异常被抛给上级
try {
int b = 10 / 0;
} catch (ArithmeticException ex) {
//捕获到ArithmeticException异常,不处理(打印异常信息)而是提供信息给MyException
//抛出MyException异常
//这种处理只是为测试自定义的异常
throw new MyException(ex.getMessage(), ex.getCause());
}
}
public static void main(String[] args) {
try {
//执行结果是抛出了MyException
javalearning1_3.test();
} catch (MyException ex) {
System.out.println(ex);
}
}
}
输出结果:javalearning1.MyException: / by zero