第一:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)
第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的最后。可行的做法有四:
1.return语句只在函数最后出现一次。
2.return语句仅在try和catch里面都出现。
3.return语句仅在try和函数的最后都出现。
4.return语句仅在catch和函数的最后都出现。
注意,除此之外的其他做法都是不可行的,编译器会报错。
(1)如果程序运行到try成功时可以返回结果,则采用方法2。(见下面的例子test0_1,在那个例子中,方法2和4都是可行的,但是推荐方法2?)
(2)如果程序运行到catch时(即中途出错时)无需再继续执行后面的代码了,则采取方法4;(见下面例子中的test0,在那个特殊的例子中,只能采取方法4)
(3)如果程序运行到try或catch时还需要继续执行后面的代码,则采取方法1(见下面的例子test0_2,该例子只能采用方法1)。
下面是测试代码:
[java]
public class Test {
public static void main(String[] args) {
System.out.println("=============test1==================");
System.out.println(test1());
System.out.println("===============================");
System.out.println("=============test1_1==================");
System.out.println(test1_1());
System.out.println("===============================");
System.out.println("\n============test2===================");
System.out.println(test2());
System.out.println("===============================");
System.out.println("\n============test2_1===================");
System.out.println(test2_1());
System.out.println("===============================");
System.out.println("\n============test3===================");
System.out.println(test3());
System.out.println("===============================");
System.out.println("\n============test3_1===================");
System.out.println(test3_1());
System.out.println("===============================");
}
public static String test0() {
String a;
int b;
try{
b = 8/0;
}catch(Exception e){
return null;
}
a = String.valueOf(b);
return a+b;
}
public static String test0_1() {
String a;
int b;
try{
b = 8/0;
a = String.valueOf(b);
return a+b;
}catch(Exception e){
return null;
}
//return a+b;
}
public static String test0_2() {
String a;
int b=0;
try{
b = 8/0;
}catch(Exception e){
}
a = String.valueOf(b);
return a;
}
public static String test1() {
String a = "in try";
int n = -1;
try{
return a+n; //先执行这个,再执行finally
} catch ( Exception e ) {
} finally {
//对String和int的更改均无效
a = "in finally";
n = 123;
System.out.println("do finally");
}
return a; //不会执行
} //总结出一点:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally
public static String test1_1() {
String a = "in try";
try{
return a;
} catch ( Exception e ) {
} finally { //从eclpise报警告可看出,finally里面不建议有return语句
a = "in finally";
System.out.println("do finally");
return a; //注释掉这句,eclipse将不再警告
}
}
public static int test2() {
int a = 1;
try{
return a;
} catch ( Exception e ) {
} finally {
a = 2;
System.out.println("do finally");
}
return a;
} //很显然,finally里面更改无效,返回的是a=1
public static int test2_1() {
int a = 1;
try{
return a;
} catch ( Exception e ) {
} finally {
a = 2;
System.out.println("do finally");
return a;
}
} //很显然,a取finally里面的值,a=2
//Helper类,将整数转换成字符串
static class Helper {
int a;
public String toString() {
return String.valueOf(a);
}
}
public static Helper test3() {
Helper h = new Helper();
h.a = 1;
try{
return h;
} catch ( Exception e ) {
} finally {
h.a = 2; //对h.a的更改起作用!!
//因为在try里面返回的是一个句柄,它指向的对象的内容 是可以改变的
System.out.println("do finally");
}
return h; //这个不会被执行
}
public static Helper test3_1() {
Helper h = new Helper();
h.a = 1;
try{
return h;
} catch ( Exception e ) {
} finally {
h.a = 2; //返回a=2,这个不用说了
System.out.println("do finally");
return h;
}
}
/**
* 总结:
* return语句,finally里面不建议放return语句,根据需要,可以放在try和catch里面
*
*/
}
- 浏览: 526045 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
宋贝贝:
您好,能麻烦您把这个包fisher.man.jce.PKCS1 ...
生成基于RSA与SM2数字证书的请求PKCS10CertificationRequest -
upset_ming:
DoubleCA的JCE实现了SM2算法的密钥协商,国密SM2 ...
生成基于RSA与SM2数字证书的请求PKCS10CertificationRequest -
stormlyf:
您好,能麻烦您把这个包fisher.man.jce.PKCS1 ...
生成基于RSA与SM2数字证书的请求PKCS10CertificationRequest -
kris_zhang:
CPU型号怎么弄?
Java获取电脑CPU个数及系统信息 -
linxinlong11007:
你好,我需要FishermanJCE,请问能发份这个包给我么? ...
生成基于RSA与SM2数字证书的请求PKCS10CertificationRequest
发表评论
-
java实现斐波那契数列
2017-04-13 15:16 1126public class FibTest { pub ... -
java 堆栈的区别
2015-07-13 21:32 797Java把内存分成两种, ... -
使用StringBuffer的好处是什么?在什么时候使用?
2015-07-13 21:27 770字符串内容较长的时候,特别是这个字符串是动态拼接的时候,用 ... -
ActiveMQ的queue以及topic两种消息处理机制
2015-04-14 10:57 5669JMS:Java Message Server JMS消 ... -
Date数据精度问题
2015-03-30 17:04 1304Java数据精度比Oracle精度大,在java端设置Date ... -
springmvc定时任务配置
2015-02-10 11:19 9291.xml配置头中添加 http://www.spring ... -
计算当日剩余时间
2015-02-09 14:06 1003//计算当日剩余时间 private long getCurr ... -
org.springframework.util.StringUtils的应用
2014-07-18 13:40 1385FROM:http://www.myexception.c ... -
CopyOnWriteArrayList理解与理解[转]
2014-05-29 17:18 826FROM:http://www.cnblogs.com/al ... -
sha1withRSA md5withRSA分析
2014-05-16 11:25 6704source:http://m.blog.csdn.net ... -
java的concurrent用法详解
2014-02-24 14:32 909我们都知道,在JDK1.5之前,Java中要进行业务并发时, ... -
Java获取电脑CPU个数及系统信息
2014-02-20 17:49 17566FROM:http://bingoffice.blog.16 ... -
线程池ExecutorService
2014-02-19 17:57 1188声明:本人所有摘抄作者原文只是为方便学习,收藏所用。 为防 ... -
Sola java搜索引擎服务器
2014-01-26 15:56 2298Sola http://www.open-searc ... -
单例模式
2014-01-07 15:50 534/** * 懒汉式 * @author lihongy ... -
Collections.frequency用法实例
2014-01-07 15:31 8015Collections.frequency(Collecti ... -
java Collections工具类用法
2014-01-07 14:54 1007原文:http://www.cnblogs.com/nayi ... -
经典的java中return和finally问题![转]
2013-11-14 15:45 933原文:http://blog.sina.com.cn/s/ ... -
HashMap、LinkedHashMap、TreeMap 差别[转]
2013-10-31 15:24 953HashMap、LinkedHashMap、TreeMap ... -
java compareTo Comparator
2013-07-24 15:25 620compareTo 只是比较2个字符串,不能进行排序Str ...
相关推荐
第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回) 第二:finally里面不建议放return语句,根据需要,return语句...
我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种...
在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视
在 Java 中,异常可以通过 throw 语句抛出,catch 语句可以捕获异常。抛出异常是指程序中出现错误时,抛出异常对象,以便于捕获和处理异常。捕获异常是指使用 catch 语句捕获抛出的异常对象,并进行相应的处理。 ...
- 无论try是否发生异常,finally语句都会执行- 如果try/catch中包含控制转移语句(return、continue、break),finally
Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。
3. 异常处理:Java语言提供了多种异常处理机制,例如使用try-catch语句捕捉异常,使用finally语句释放资源。 day26作业1涵盖了Java语言的基础知识、控制结构、函数、面向对象编程和异常处理等多个方面,旨在帮助...
在 Java 中,我们可以使用 try-catch 语句来捕获和处理异常。 Java 中的 finally 语句是指无论是否出现异常都会执行的语句。在 Java 中,我们可以使用 finally 语句来释放资源。 Java 中的 break 语句是指跳出...
finally 一定会被执行,如果 finally 里有 return 语句,则覆盖 try/catch 里的 return , 比较爱考的是 finally 里没有 return 语句,这时虽然 finally 里对 return 的值进行了修改,但 return 的值并不改变这种...
Java是一种广泛应用于软件开发的编程语言,而英语单词是Java编程中不可或缺的一部分。学习Java编程的开发者需要了解一些基本的英语单词,才能更好地理解和应用Java技术。下面是Java常用英语单词的总结,涵盖了Java...
Java语言中有try-catch语句,用于捕获和处理异常。try语句块中可能会抛出异常,catch语句块中可以捕获和处理异常。 标识符 Java语言中,标识符是给变量、常量、方法、类、接口命名的符号。标识符的命名规则是: *...
在Java语言中,try语句块用于捕获异常,catch语句块用于处理异常,而finally语句块用于释放资源。try语句块是异常发生的位置。catch语句块可以单独和finally语句块一起使用。 对于异常的说法正确的是,抛出异常是...
38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 25 39、下面的程序代码输出的结果是多少? 25 40、final, finally, finalize的区别。 27 ...
C#基础知识 C#是一种现代、高效、可靠的面向对象...C#语言支持异常处理机制,包括try-catch语句和finally语句,能够捕获和处理程序中的异常。 C#语言是一个功能强大、灵活的编程语言,能够满足大多数应用程序的需求。
try-catch-finally语句的执行顺序是:先执行try块,如果出现异常,则执行catch块,最后执行finally块。finally块总是会执行,即使try块或catch块中出现了return语句。 2. mvc 的各个部分都有那些技术来实现?如何...
Java 语言中的修饰符可以用于控制变量和方法的访问权限,例如: * public * protected * private * final * void * static * strict * abstract * transient * synchronized * volatile * native 六、Java 动作 ...
在 catch 代码段中可以使用 return 语句来返回到异常抛出点。可以把 catch 到的异常对象再次抛出,使上层 try-catch 结构继续处理该异常事件。 4. 访问控制符:private 访问控制符修饰的成员变量只能被该类自身所...
在 try 语句中如果有 return 语句,finally 语句块总是会被执行的,且在 return 语句之前执行。 七、List<Short> 和 short 的关系 short 是基本类型,不能直接调用 add 方法,需要将 short 转换成 Short 对象。 ...
Java代码审查表中关于函数和变量使用规则的重要性激活级别检查项有: * 函数是否已经有文档注释?(功能、输入、返回及其他可选)(重要50) * 是否每个函数执行单个功能并与其命名相符?(重要20) * 变量是否都...
catch代码段中可以使用return语句来返回到异常抛出点。可以把catch到的异常对象再次抛出,使上层try-catch结构继续处理该异常事件。 4. 访问控制符private private访问控制符修饰的成员变量只能被该类自身所访问和...