public static void main(String[] args) {
System.out.println(returnN());//1
System.out.println(returnStr());//XX
System.out.println(returnSB());//abcd
System.out.println(returnArr()[0]);//3

}

public static int returnN(){
int i = 0;
try{
return ++i;
}finally{
i++;
}
}

public static String returnStr(){
String str = "";
try{
str+= "XX";
return str;
}finally{
str+="abc";
}
}

public static StringBuffer returnSB(){
StringBuffer sb = new StringBuffer();
try{
sb.append("ab");
return sb;
}finally{
sb.append("cd");
}
}

public static int[] returnArr(){
int[] arr = new int[5];
try{
arr[0]=2;
return arr;
}finally{
arr[0]=3;
}
}
public static void main(String[] args) {
System.out.println(returnN());//1
System.out.println(returnStr());//XX
System.out.println(returnSB());//abcd
System.out.println(returnArr()[0]);//3

}

public static int returnN(){
int i = 0;
int temp = i;
try{
return ++temp;
}finally{
i++;
}
}

public static String returnStr(){
String str = "";
String temp = str;
try{
temp+= "XX";
return temp;
}finally{
str+="abc";
}
}

public static StringBuffer returnSB(){
StringBuffer sb = new StringBuffer();
StringBuffer temp = sb;
try{
temp.append("ab");
return temp;
}finally{
sb.append("cd");
}
}

public static int[] returnArr(){
int[] arr = new int[5];
int[] temp = arr;
try{
temp[0]=2;
return temp;
}finally{
arr[0]=3;
}
}
public static void main(String[] args) {
System.out.println(returnN());//2
System.out.println(returnStr());//XXabc
System.out.println(returnSB());//abcd
System.out.println(returnArr()[0]);//3

}


public static int returnN(){
int i = 0;
try{
return ++i;
}finally{
i++;
return i;
}
}


public static String returnStr(){
String str = "";
try{
str+= "XX";
return str;
}finally{
str+="abc";
return str;
}
}


public static StringBuffer returnSB(){
StringBuffer sb = new StringBuffer();
try{
sb.append("ab");
return sb;
}finally{
sb.append("cd");
return sb;
}
}


public static int[] returnArr(){
int[] arr = new int[5];
try{
arr[0]=2;
return arr;
}finally{
arr[0]=3;
return arr;
}
}

解释:
1、try、finally里面都有return时候,
先返回try里面的,然后finally里面返回将之前的覆盖掉了。
2、第一个里面先是有类似第二个里面temp那中,try里返回temp,有值类型和引用类型区别。当是引用类似的
时候,返回的是引用,然后输出的是引用指向的值,当指向的值已经被改变,那么输出就是什么值,String是final类型的;还有其他理解的???

解决方案 »

  1.   

    如果学过c语言,理解了c语言的指针,再来理解java里面的引用的概念,理解这些就非常的容易了。
      

  2.   

    http://www.ticmy.com/?p=56
      

  3.   

    这是一样的么
    只是一样的分析手法而已。这种手法会点java的人都会用
      

  4.   

    javap命令是jdk自带的工具,下次你看到我的文章里用了java命令也该说是翻译或是抄袭来的了
      

  5.   


    是吗?只是感觉你每次都直接复制链接出来,感觉很不爽,又不写明出处。
    又写的那么不明白。
    这个是《深入jvm第二版》里面第第17、18里面的。我会点java,我就不会用。
      

  6.   


    我自己一字一句码出来的,写什么出处?javap命令是jdk命令,毋庸多言;指令的解释是在《java虚拟机规范》中的:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.1.9《深入java虚拟机第二版》也是抄袭的这个规范的
      

  7.   

    return肯定是在finally之后执行。