java中错误分为:
异常Exception和错误Error
异常又分为:非运行时异常(编译时异常)和运行时异常RuntimeException
java程序------编译成.class文件-------再运行
错误:
一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断.
编译时异常:
就是在编译的时候就报错了,如sql连接错误,该引的包没引,代码语法书写错误,导致编译不过去出错...
运行时异常处理:
就是程序中有bug
如果不对运行时异常进行处理,那么出现运行时异常之后,该线程就会中止
如果不想中止线程,则必须捕获运行时异常
关键字try catch finally throws
throws:
把异常暴露出来
开发中一般当方法中遇到异常后捕捉后抛出异常,然后抛给调用该方法的上一层方法,一层层抛出去,最后显示在控制台上
finally:
finally控制的语句体一定会执行,常用于释放资源,在IO流操作和数据库操作中会见到
1 public class Demo { 2 public int method() throws Exception{ 3 int x = 10; 4 try { 5 x = 20; 6 System.out.println(1/0); 7 return x; 8 } catch (Exception e) { 9 e.printStackTrace(); 10 x = 30; 11 return x; 12 } finally { 13 x = 40; 14 } 15 } 16 } 17 public class Test { 18 public static void main(String[] args) throws Exception { 19 Demo d = new Demo(); 20 System.out.println(d.method()); 21 } 22 }
运行结果:
java.lang.ArithmeticException: / by zero
at cn.alibaba.sf.Demo.method(Demo.java:8)
at cn.alibaba.sf.Test.main(Test.java:28)
30
解释如下:
当try里面遇到异常后会执行catch里面代码,在执行到return的时候,会看看有没有finally
如果有会先将return的结果放在某个地方存储,而且该结果是不可更改的,然后执行finally,最后将该结果返回
也就是说虽然finally一定会执行,但是对结果是毫无影响的,另外finally里面也是不能写return的,只适合写对结果毫无影响的代码,实际开发中多用于释放资源
如果try里面不遇到异常呢,同样会执行finally,结果是20,理由还是同样的