关于try-catch-finally以及值类型和引用类型。
2013-11-14 11:26
375 查看
关于try-catch-finally以及值类型和引用类型。
finally是必须执行的,这点是毋庸置疑的。
return之前会先执行finally里的代码,对于非对象类型,finally里的代码不能通过重新给变量赋值来改变return语句的返回值,对于对象类型,和其不同,一个为复制,一个为引用。
也就是说,在进入finally之前,return已经将值压栈,而finally對值进行改变,并不影响值得返回,而对于引用就不一样了,压栈的是引用,返回的也是引用。
如果return是写在finally的话,就好办了,在finally对值进行改变,然后返回,退出程序。
JAVA CODE
public
class
Test_try {
public
static void
main(String[]
args) {
Test_try t=new
Test_try();
System.out.println("测试finally单纯修改返回值"
+ t.doPrint1());
System.out.println("测试finally修改返回值并返回"
+ t.doPrint2());
System.out.println("测试finally修改对象类型"
+ t.doPrint3());
System.out.println("测试finally修改对象类型并返回"
+ t.doPrint4());
}
private
int doPrint1(){
int
a = 0;
try{
a =
1;
throw
new SecurityException();
}
catch(Exception
e){
System.out.println("catch_begin");
a =
2;
return
a;
}
finally{
a=3;
System.out.println("finally_end"
+ a);
}
}
private
int doPrint2(){
int
a = 0;
try{
a =
1;
throw
new SecurityException();
}
catch(Exception
e){
System.out.println("catch_begin");
a++;
return
a;
}
finally{
a++;
System.out.println("finally_end"
+ a);
return
a;
}
}
private
StringBuffer doPrint3(){
StringBuffer
a =
new StringBuffer();
try{
a.append(1);
throw
new SecurityException();
}
catch(Exception
e){
System.out.println("catch_begin");
a.append(1);
return
a;
}
finally{
a.append(1);
System.out.println("finally_end"
+ a);
}
}
private
StringBuffer doPrint4(){
StringBuffer
a =
new StringBuffer();
try{
a.append(1);
throw
new SecurityException();
}
catch(Exception
e){
System.out.println("catch_begin");
a.append(1);
return
a;
}
finally{
a.append(1);
System.out.println("finally_end"
+ a);
return
a;
}
}
}
============
输出结果:
catch_begin
finally_end3
测试finally单纯修改返回值2
catch_begin
finally_end3
测试finally修改返回值并返回3
catch_begin
finally_end111
测试finally修改对象类型111
catch_begin
finally_end111
测试finally修改对象类型并返回111
finally是必须执行的,这点是毋庸置疑的。
return之前会先执行finally里的代码,对于非对象类型,finally里的代码不能通过重新给变量赋值来改变return语句的返回值,对于对象类型,和其不同,一个为复制,一个为引用。
也就是说,在进入finally之前,return已经将值压栈,而finally對值进行改变,并不影响值得返回,而对于引用就不一样了,压栈的是引用,返回的也是引用。
如果return是写在finally的话,就好办了,在finally对值进行改变,然后返回,退出程序。
JAVA CODE
public
class
Test_try {
public
static void
main(String[]
args) {
Test_try t=new
Test_try();
System.out.println("测试finally单纯修改返回值"
+ t.doPrint1());
System.out.println("测试finally修改返回值并返回"
+ t.doPrint2());
System.out.println("测试finally修改对象类型"
+ t.doPrint3());
System.out.println("测试finally修改对象类型并返回"
+ t.doPrint4());
}
private
int doPrint1(){
int
a = 0;
try{
a =
1;
throw
new SecurityException();
}
catch(Exception
e){
System.out.println("catch_begin");
a =
2;
return
a;
}
finally{
a=3;
System.out.println("finally_end"
+ a);
}
}
private
int doPrint2(){
int
a = 0;
try{
a =
1;
throw
new SecurityException();
}
catch(Exception
e){
System.out.println("catch_begin");
a++;
return
a;
}
finally{
a++;
System.out.println("finally_end"
+ a);
return
a;
}
}
private
StringBuffer doPrint3(){
StringBuffer
a =
new StringBuffer();
try{
a.append(1);
throw
new SecurityException();
}
catch(Exception
e){
System.out.println("catch_begin");
a.append(1);
return
a;
}
finally{
a.append(1);
System.out.println("finally_end"
+ a);
}
}
private
StringBuffer doPrint4(){
StringBuffer
a =
new StringBuffer();
try{
a.append(1);
throw
new SecurityException();
}
catch(Exception
e){
System.out.println("catch_begin");
a.append(1);
return
a;
}
finally{
a.append(1);
System.out.println("finally_end"
+ a);
return
a;
}
}
}
============
输出结果:
catch_begin
finally_end3
测试finally单纯修改返回值2
catch_begin
finally_end3
测试finally修改返回值并返回3
catch_begin
finally_end111
测试finally修改对象类型111
catch_begin
finally_end111
测试finally修改对象类型并返回111
相关文章推荐
- Java语言中try-catch-finally中return解析以及引用类型和值类型区分
- 关于输出null对象,以及try/catch/finally比较好玩的一段代码
- java中关于try、catch、finally中一些问题
- 关于java中的try-catch-finally语句和return
- java中关于try、catch、finally中的细节分析
- 关于try...catch...finally中return的疑惑
- Java异常处理机制以及try-catch-finally-return执行顺序
- java中关于try、catch、finally中的细节分析
- 关于try ...catch .. finally的使用
- Android:java 抛出异常throw与throws以及捕捉异常try、catch、finally学习
- java中关于try、catch、finally中的细节分析
- 关于Java中try catch finally throw return的执行顺序问题
- 关于try,catch,finally相关笔记
- 关于Java中try-catch-finally-return的执行顺序
- java中关于try、catch、finally中的细节分析
- 关于try catch finally 还有最终返回 四处异常巧记!!!!!
- java中关于try、catch、finally中的细节分析
- 关于try...catch...finally中return的疑惑
- 关于try...catch...finally中return的疑惑
- 关于try、catch、finally语句块中含有return语句的几点说明