java中的所有的异常和错误都是Throwable类的子类。异常在java中的父类是Exception,错误在java中的父类是Error。
异常即不正常的事件,异常是指程序运行的过程中,发生某些意外的事情,比如,10除以0, 文件不存在等。通过程序处理,程序还可以继续运行下去。
java的错误一般是系统错误,一般不需要开发人员处理,也比较难处理,比如内存溢出等等,错误是无法控制的,程序肯定要中断。
catch:捕获异常,并做出处理。
finally:无论代码块出错与否,无论出现异常的块处理与否,该块一定会执行。
try块中任何一条语句发生了异常,下面的代码将被终端,程序将跳转到异常处理代码块中,即catch块。catch语句必须紧跟着try语句之后,一个try后面可以写多个catch,分别捕获不同类型的异常,要先谢子类异常再写父类异常,否则会出现编译错误。
try{
String demo = null;
demo.split("a");
System.out.println("try");
}
catch(NullPointerException e){
System.out.println("NullPointerException");
e.printStackTrace();
}
catch(RuntimeException e){
System.out.println("RuntimeException");
e.printStackTrace();
}
finally{
System.out.println("Finally");
}
finally与return
在try中没有异常的情况下try、catch、finally的执行顺序 try --- finally ;
如果try中有异常,执行顺序是try --- catch --- finally;
如果try中没有异常并且try中有return这时候正常执行顺序是try ---- finally --- return;
如果try中有异常并且try中有return这时候正常执行顺序是try----catch---finally--- return, 总之 finally 永远执行!
throw和throws
throw和throws是异常抛出的两种形式。
一般当程序出现某种逻辑错误时,会使用throw关键字抛出某种特定类型的异常,如 throw new NullPointerException 。
当某个方法可能会抛出某种异常时,一般使用throws 声明可能抛出的异常,然后交给上层,上层使用try/catch方法处理或者继续用throws声明继续抛出异常。一个方法上可以抛出多个异常,用都好隔开,如public void function throws NumberFormatException,NullPointerException{
(方法体中可能出现NumberFormatException,NullPointerException这两种错误)}
好的编程习惯: