Java中的异常(Throwable)分为两类:异常Execption和错误Error。
Error,也就是错误,这个是不可避免的,出现的问题使得应用停止,例如:服务器损坏、内存溢出等。在java中所有的错误都继承自Error类,这个是不可控的。
Exection,也就是异常,是可控的,异常又分为编译时异常和运行时异常,编译时异常是由编码语法错误导致的,在编译时期就可以看出来,即使进行修改。代码如下:
public class ErrorTest {public static void main(String[] args) {String s = 5;//这样就会直接报错,开发者可以直接看到}
}
运行时异常是由业务逻辑导致的,只有到了运行时才可以看出来。代码如下:
public class ErrorTest {public static void main(String[] args) {int i = 5;int j = 4;add(i, j);//5+4=1System.out.println(i / 0);//这里违反了除法的基本逻辑,运行时也会报错}public static void add(int i , int j) {//这里就是编译时异常,有逻辑不清造成System.out.println("i+j="+(i - j));}
}
因为当程序出现异常时便不再继续往下执行代码,所以异常需要处理,这里的异常值得是Exection,如果程序发生Error,应用会直接停止,而不是不继续往下执行代码,错误是控制不了的,只能重启应用,所以错误一定要避免。Java中解决异常的方式有抛出异常和捕获处理异常。所谓抛出异常就是指当程序遇到异常时,不去处理异常,而是将异常抛出去,保证程序能继续往下执行,捕获异常则是指程序遇到异常时,将异常的错误信息进行处理,保证程序继续执行,代码如下:
/*** 异常的处理方式有两种:* 一是使用throws或者throw:只是将错误抛出,不做任何处理* 可以在代码中主动抛出错误,使用thorw关键字,格式为throw new Exception();* 可以在方法上、类上抛出错误,使用thorws关键字,格式throws Exception* 而是使用try..catch..finally:捕获错误,处理错误* 格式如下:* try{* 可能发生错误的代码;* }catch(异常类){* 抛出异常信息;//可以有多个catch块* }finally{* finally中的代码不管怎么样都会执行;* }* @author chaizepeng**/
public class ErrorTest {public static void main(String[] args) {int i = 5;int j = 0;//add方法抛出了异常,在这里捕获异常并作处理try {add(i,j);} catch (ArithmeticException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}finally {System.out.println("做一下容灾处理。。。");}}//在这里不处理错误,将错误抛出,谁调用这个方法,出错的时候再做处理public static void add(int i , int j) throws Exception{System.out.println(i/j);throw new Exception();}
}
开发者可以自定义异常,就是继承自Execption类,然后自定义异常即可,代码如下:
public class NoZeroExection extends Exception{//继承自Exception类public NoZeroExection() {//用构造方法来描述错误信息System.out.println("不可出现数字0");}}class Test{public static void main(String[] args) {int flag = 0;try {//捕获异常myExcetion(flag);} catch (NoZeroExection e) {System.out.println("出现错误:");e.printStackTrace();}}public static void myExcetion(int flag) throws NoZeroExection{//抛出异常if (flag == 0) {throw new NoZeroExection();}System.out.println("正常执行。。。");}
}
常见的异常:
空指针异常 | NullpoiontException |
数组下标越界 | ArrayIndexOutOfBoundsException |
参数错误 | ArithmeticException |
IO异常 | IOException |
类不存在异常 | ClassNotFoundException |
方法不存在异常 | NoSuchMethodException |
sql异常 | SQLException |
。。。。 |