异常

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,理由还是同样的

原文地址:https://www.cnblogs.com/jaro/p/9015209.html