2021-11-11 09:39发布
基本执行过程如下:
1)程序首先执行可能发生异常的try语句块。
2)如果try语句没有出现异常则执行完后跳至finally语句块执行;
3)如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。
4)catch语句块可以有多个,分别捕获不同类型的异常。
5)catch语句块执行完后程序会继续执行finally语句块。 finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。需要注意的是即使try和catch块中存在return语句,finally语句也会执行,是在执行完finally语句后再通过return退出。
try-catch-finally程序块的执行流程以及执行结果比较复杂。
①程序首先执行可能发生异常的try语句块。
②、如果try语句没有出现异常则执行完后跳至finally语句块执行;
③如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。
④catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
⑤需要注意的是即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
第一种情况:
private static int inc() {
int i;
try {
i = 1;
return i;
} catch (NullPointerException e) {
i = 2;
} finally {
i = 3;
}
运行过程: 当程序执行至i=1后,准备执行下一行return之前会将i复制到最后一个本地变量表的Slot中*,简单的理解就是程序在最后执行return之前会将需要返回的值给复制到指定的用来做返回值的位置,这里就统一叫做returnValue,此时returnValue=1。然后执行finally代码,执行x=3,最后返回returnValue=1;
注意:*表示该语句摘自《深入理解JAVA虚拟机》第188页中间段落开头。
第二种情况:
if (i == 1) {
throw new NullPointerException();
运行过程: 当程序执行至i=1后进入if语句,然后抛出异常且被catch住,程序开始执行catch代码块,i=2,在执行下一句return i 之前,会使returnValue=2。然后执行finally代码,执行x=3,最后返回returnValue=2(此时执行的是catch中的return);
第三种情况:
throw new RuntimeException();
运行过程: 当程序执行至i=1后进入if语句,然后抛出异常但是没有被catch住,程序开始执行finally代码块,i=3,finally代码块结束。由于该异常没有被catch住,程序将异常抛出给方法调用方去处理,所以代码执行结果为Exception in thread "main" java.lang.RuntimeException。
第四种情况:
} 运行过程: 当程序执行至i=1后进入if语句,然后抛出异常但是没有被catch住,程序开始执行finally代码块,i=3,然后执行return i语句之前会使returnValue=3,最后结果为3;
另外,由于finally代码块语句是在会在程序结束前全部执行完毕,因此如果在上面几种情况下finally代码块都有renturn i时返回值均为3;
总结:在每次执行完return语句上一行代码后均会先将返回值给赋予returnValue,最后返回时也是将returnValue返回。
1、 程序首先执行可能发生异常的try语句块。
2、如果try语句块没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳 至相应的catch语块执行处理。
3、catch语句块可以有多个,分别捕获不同类型的异常。
4、catch语句块执行完成后程序会继续执行finally语句块。
5、finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
遇到异常走try,finally里面死一定会执行的,
try-catch-finally程序块的执行流程以及执行结果比较复杂。基本执行过程如下:
程序首先执行可能发生异常的try语句块。如果try语句没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
需要注意的是即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
首先执行可能发生异常的try语句块。如果try语句没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行
1)作用不同: throw用于程序员自行产生并抛出异常; throws用于声明在该方法内抛出了异常2) 使用的位置不同: throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表的后面,不能单独使用。3)内容不同: throw抛出一个异常对象,且只能是...
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译...
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java 中,每个异常都是一个对象,它是Throwable 类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获...
OutOf MemoryError这种错误可以细分为多种不同的错误,每种错误都有自身的原因和解决办法,如下所示:java.lang.OutOfMemoryError: Java heap space 错误原因:此OOM是由于JVM中heap的最大值不满足需要。 解决方法:1) 调高heap的最大值,即-Xmx的值调大。...
问题的根本原因是工程中某个jar包的版本(jar包编译时的所用的jdk版本)高于工程build path中jdk的版本,这个是不兼容的! 编程中遇到此异常Unsupported major.minor version 52.0(根据版本号,这里可以为其他数值,52是1.8jdk jar包与 1.8以下低版本jdk不匹配)...
最多设置5个标签!
基本执行过程如下:
1)程序首先执行可能发生异常的try语句块。
2)如果try语句没有出现异常则执行完后跳至finally语句块执行;
3)如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。
4)catch语句块可以有多个,分别捕获不同类型的异常。
5)catch语句块执行完后程序会继续执行finally语句块。 finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。需要注意的是即使try和catch块中存在return语句,finally语句也会执行,是在执行完finally语句后再通过return退出。
try-catch-finally程序块的执行流程以及执行结果比较复杂。
基本执行过程如下:
①程序首先执行可能发生异常的try语句块。
②、如果try语句没有出现异常则执行完后跳至finally语句块执行;
③如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。
④catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
⑤需要注意的是即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
第一种情况:
private static int inc() {
int i;
try {
i = 1;
return i;
} catch (NullPointerException e) {
i = 2;
return i;
} finally {
i = 3;
}
}
运行过程: 当程序执行至i=1后,准备执行下一行return之前会将i复制到最后一个本地变量表的Slot中*,简单的理解就是程序在最后执行return之前会将需要返回的值给复制到指定的用来做返回值的位置,这里就统一叫做returnValue,此时returnValue=1。然后执行finally代码,执行x=3,最后返回returnValue=1;
注意:*表示该语句摘自《深入理解JAVA虚拟机》第188页中间段落开头。
第二种情况:
private static int inc() {
int i;
try {
i = 1;
if (i == 1) {
throw new NullPointerException();
}
return i;
} catch (NullPointerException e) {
i = 2;
return i;
} finally {
i = 3;
}
}
运行过程: 当程序执行至i=1后进入if语句,然后抛出异常且被catch住,程序开始执行catch代码块,i=2,在执行下一句return i 之前,会使returnValue=2。然后执行finally代码,执行x=3,最后返回returnValue=2(此时执行的是catch中的return);
第三种情况:
private static int inc() {
int i;
try {
i = 1;
if (i == 1) {
throw new RuntimeException();
}
return i;
} catch (NullPointerException e) {
i = 2;
return i;
} finally {
i = 3;
}
}
运行过程: 当程序执行至i=1后进入if语句,然后抛出异常但是没有被catch住,程序开始执行finally代码块,i=3,finally代码块结束。由于该异常没有被catch住,程序将异常抛出给方法调用方去处理,所以代码执行结果为Exception in thread "main" java.lang.RuntimeException。
第四种情况:
private static int inc() {
int i;
try {
i = 1;
if (i == 1) {
throw new RuntimeException();
}
return i;
} catch (NullPointerException e) {
i = 2;
return i;
} finally {
i = 3;
return i;
}
} 运行过程: 当程序执行至i=1后进入if语句,然后抛出异常但是没有被catch住,程序开始执行finally代码块,i=3,然后执行return i语句之前会使returnValue=3,最后结果为3;
另外,由于finally代码块语句是在会在程序结束前全部执行完毕,因此如果在上面几种情况下finally代码块都有renturn i时返回值均为3;
总结:在每次执行完return语句上一行代码后均会先将返回值给赋予returnValue,最后返回时也是将returnValue返回。
基本执行过程如下:
1、 程序首先执行可能发生异常的try语句块。
2、如果try语句块没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳 至相应的catch语块执行处理。
3、catch语句块可以有多个,分别捕获不同类型的异常。
4、catch语句块执行完成后程序会继续执行finally语句块。
5、finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
遇到异常走try,finally里面死一定会执行的,
try-catch-finally程序块的执行流程以及执行结果比较复杂。基本执行过程如下:
程序首先执行可能发生异常的try语句块。如果try语句没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
需要注意的是即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
首先执行可能发生异常的try语句块。如果try语句没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行
回答: 2021-12-17 10:29
①程序首先执行可能发生异常的try语句块。
②、如果try语句没有出现异常则执行完后跳至finally语句块执行;
③如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。
④catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
⑤需要注意的是即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
①程序首先执行可能发生异常的try语句块。
②、如果try语句没有出现异常则执行完后跳至finally语句块执行;
③如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。
④catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
⑤需要注意的是即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
相关问题推荐
1)作用不同: throw用于程序员自行产生并抛出异常; throws用于声明在该方法内抛出了异常2) 使用的位置不同: throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表的后面,不能单独使用。3)内容不同: throw抛出一个异常对象,且只能是...
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译...
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java 中,每个异常都是一个对象,它是Throwable 类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获...
OutOf MemoryError这种错误可以细分为多种不同的错误,每种错误都有自身的原因和解决办法,如下所示:java.lang.OutOfMemoryError: Java heap space 错误原因:此OOM是由于JVM中heap的最大值不满足需要。 解决方法:1) 调高heap的最大值,即-Xmx的值调大。...
问题的根本原因是工程中某个jar包的版本(jar包编译时的所用的jdk版本)高于工程build path中jdk的版本,这个是不兼容的! 编程中遇到此异常Unsupported major.minor version 52.0(根据版本号,这里可以为其他数值,52是1.8jdk jar包与 1.8以下低版本jdk不匹配)...