try {System.out.println("hello");System.exit(0);} finally {System.out.println("good bye");}/*hello*/
try {int r = 1 / i;} catch (Exception e) {e.printStackTrace();return true;} finally {return false;}/*false*/
1.import java.awt.Point;
class Assign
{
public static void main(String args[])
{
int a = 1;
int b = 2;
Point x = new Point(0,0);
Point y = new Point(1,1); //1
System.out.println(“a is ” + a);
System.out.println(“b is ” + b);
System.out.println(“x is ” + x);
System.out.println(“y is ” + y);
System.out.println(“Performing assignment and ” +
“setLocation…”);
a = b;
a++;
x = y; //2
x.setLocation(5,5); //3
System.out.println(“a is “+a);
System.out.println(“b is “+b);
System.out.println(“x is “+x);
System.out.println(“y is “+y);
}
}
這段代碼產生以下輸出結果?
a is 1
b is 2
x is java.awt.Point[x=0,y=0]
y is java.aet.point[x=1,y=1]
Performing assignment and setLocation…
a is 3
b is 2
x is java.awt.point[x=5,y=5]
y is java.aet.point[x=5,y=5]
解析網址:http://zhidao.baidu.com/question/106550817.html
解析:
當是基礎資料型別 (Elementary Data Type)改變時,不改變原有的資料,若是改變的是物件類型時,則會改變。
對於,這裡的a和b,由於是基礎資料型別 (Elementary Data Type),所以當b賦給a時,只是將b的值給了a,a自己的值不變,當a或b改變時,a或b的值是不變的哦。
對於這裡的x和y,由於是物件類型,所以當y賦給x時,(x,y只是相應對象的引用),所以只是將x變成了y所指的對象的引用,此時x和y都是對象A的引用,所以當改變x或y時,x和y都會變,他們是一樣的。
class Main {public static void main(String args[]) {int a = 1;int b = 2;String stra = "stra";String strb = "strb";A aa = new A();A aaa = new A();aa.a = 11;aaa.a = 111;System.out.println("a=" + a);System.out.println("b=" + b);System.out.println("Aaa=" + aa.a);System.out.println("Aaaa=" + aaa.a);System.out.println("stra=" + stra);System.out.println("strb=" + strb);a = b;a++;aaa = aa;aa.a++;stra = strb;stra = "buhao";System.out.println("a=" + a);System.out.println("b=" + b);System.out.println("Aaa=" + aa.a);System.out.println("Aaaa=" + aaa.a);System.out.println("stra=" + stra);System.out.println("strb=" + strb);}}class A {int a;}/*結果為:a=1b=2Aaa=11Aaaa=111stra=strastrb=strba=3b=2Aaa=12Aaaa=12stra=buhaostrb=strb*/
2.Java中的原生資料類型和參考型別的參數傳遞:
class Point {private int x;private int y;public Point(int x, int y) {this.x = x;this.y = y;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}}public class Main {public void changeInt(int a) {a = 3;}public void changePoint(Point point) {point.setX(5);point.setY(6);}public void changeString(String str) {str = "abc";System.out.println(str);}public static void main(String[] args) {int a = 1;// 語句(1)Main pt = new Main();// 語句(2)pt.changeInt(a);// 語句(3)System.out.println(a);// 語句(4) 1Point point = new Point(1, 2);// 語句(5)pt.changePoint(point);// 語句(6)System.out.println(point.getX());// 語句(7) 5System.out.println(point.getY());// 語句(8) 6String str = "xyz";// 語句(9)pt.changeString(str);// 語句(10)abcSystem.out.println(str);// 語句(11)xyz}}/*運行結果:156abcxyz*/
問題1:當執行完語句(4)後,列印的結果是什麼?為什嗎?
1 對於原生資料類型來說,它僅僅是把 main方法裡面的a的值傳過去,傳值完後,兩者之間沒有任何的關係,
問題2:當執行完語句(7)(8)後,列印的結果是什麼?為什嗎?
5 6 傳的是引用,即是對象的記憶體位址
問題3:當執行完語句(11)後,列印的結果是什麼?為什嗎?
xyz
解析網址:http://leeldy.blog.163.com/blog/static/1398530620091279551463/
總結: 在java裡面,對方法的參數傳遞,不管是原生資料類型還是參考型別,一律是傳值:pass by value。對原生資料類型來說,傳遞的值就是它被賦予的那個值,比如說 int a = 3 就把3這個值傳到方法裡面去;參考型別來說,引用本身是一個地址,是一個int類型的記憶體位址值,所以說它把這個值傳遞到方法裡面去傳遞的也是值。