国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

finally和return執行順序

2019-11-14 15:00:58
字體:
來源:轉載
供稿:網友

先貼代碼:

import java.util.HashMap;
import java.util.Map;

public class FinallyTest {
public static void main(String[] args) {
ObjectTest obj=new ObjectTest();
System.out.
StringTest str = new StringTest();
System.out.println("str=="+str.getValue());

StringObjTest strObj=new StringObjTest();
System.out.println("strObj=="+strObj.getValue());

IntegerTest integer=new IntegerTest();
System.out.println("Integer=="+integer.getValue());
}

}

class IntegerTest {
public Integer getValue() {
Integer j = new Integer(1);
try {
j=new Integer(10);
return j;
} finally {
j=j+new Integer(100);
}
}
}

class StringTest {
public String getValue() {
String j = "string_orgin";
try {
j="string_try";
return j;
} finally {
j = "string_finally";
}
}
}

class StringObjTest {
public String getValue() {
String j = new String("stringobj_orgin");
try {
j=new String("stringObj_try");
return j;
} finally {
j = new String("stringObj_finally");
}
}
}

class ObjectTest {

public Map<String, String> getMap() {
final Map<String, String> argMap = new HashMap<String, String>();
try {
argMap.put("tryKey", "2");
return argMap;
} finally {
argMap.put("finalKey", "2");
}
}
}

 返回結果:

obj=={tryKey=2, finalKey=2}
str==string_try
strObj==stringObj_try
Integer==10

總結:在return返回之前  會將return的值拷貝一份,然后在執行finally,如果拷貝的變量類型是string、基本類型、包裝基本類型的Boolean Integer Double Long 因為這些類型都是不可變的,想要改變值只能拷貝一個原來的值,finally操作的值只是操作的一個拷貝, 但是如果是對象 那么因為拷貝的一個對象引用  finally會改變原來在堆中的對象,所以會影響return 值

PS:1、順序一定是執行try塊,在執行finally 但是因為return返回機制的原因 導致因為返回類型導致的數據不同

     2、執行順序:1、在return前將數據壓入棧中(如果是Boolean Integer Double Long不可變類型或者string類型 直接將值壓進去,如果是可變的那么把堆中的地址引用壓進去)

                        2、執行finally語句,因為string和Boolean Integer Double Long為不可變類型變量,如果改變會另外申請一塊常量池內存,但是不會改變棧中的值,而對象的話因為是引用  所以Finally會改變其真實值

                        3、最后return棧中的值


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大英县| 尉氏县| 和平县| 城口县| 高台县| 垣曲县| 南投市| 襄垣县| 宁明县| 尚义县| 鹿泉市| 磐安县| 夹江县| 青阳县| 岳西县| 靖宇县| 沅陵县| 宝丰县| 松滋市| 蒙城县| 科技| 五河县| 皋兰县| 齐齐哈尔市| 浪卡子县| 灵宝市| 涿鹿县| 新竹市| 隆尧县| 新营市| 同心县| 舟曲县| 枞阳县| 渭源县| 黎川县| 麻阳| 北辰区| 师宗县| 和田县| 玛沁县| 玛沁县|