标签:return System try println finally catch ------------------------- out
try-catch-finally 的细解基本测试案例
第一、只要有finally,那么finally块中代码就会执行;这句话很重要
第二、如果try-catch中有return , finally也有return有如下两种情况(test03、test04):
- 修改基本类型不影响返回结果的。(传值的)
- 修改引用类型影响返回结果的。(传址的)
public class TestFinally {
public static void main(String[] args) {
TestFinally tf = new TestFinally();
System.out.println("-------------<1>------------");
try {
System.out.print(1);
}finally {
System.out.print(0);
}
System.out.println();
System.out.println("-------------<2>------------");
System.out.println(tf.test01());
System.out.println("-------------<3>------------");
System.out.println(tf.test02());
System.out.println("-------------<4>------------");
System.out.println(tf.test03());
System.out.println("-------------<5>------------");
System.out.println(tf.test04().age);
}
public int test01(){
try {
return 1;
}finally {
System.out.print(0);
}
}
public int test02(){
try {
return 2;
}finally {
return 3;// 只是为了验证finally,实际开发别这么写
}
}
public int test03(){
int t = 0;
try {
t = 4;
return t;//执行 finally 之前,JVM 会先将 t = 4 的结果暂存起来,然后 finally 执行完毕后,会返回之前暂存的结果,而不是 t = 5 ,可以自行编译了解细节
}finally {
t = 5;
}
}
public Cat test04(){
Cat cat = new Cat();
try {
cat.age =6;
return cat;//return在执行时,会复制了一个cat引用,指向Cat的实例,在finally改变了实例的age值后,cat仍然指向被改变的实例
}finally {
cat.age =7;
}
}
}
class Cat{
public int age;
}
输出结果如下:
-------------<1>------------
10
-------------<2>------------
01
-------------<3>------------
3
-------------<4>------------
4
-------------<5>------------
7
标签:return,System,try,println,finally,catch,-------------------------,out 来源: https://www.cnblogs.com/jiehao-yu/p/16489993.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。