摘要:在程序設計中,C語言或者C++語言的一些參數傳值或者地址都十分明確,但是在JAVA中還存在著一些爭論,甚至有所謂的結論認為:在JAVA里參數傳遞是按值傳遞。這種觀點顯然會誤導別人。本文就通過實現分析,闡述JAVA語言中的參數傳遞。
關鍵詞:JAVA;參數傳遞
一、按值傳遞
所謂的按值傳遞是指在調用方法時,是根據值的拷貝進行參數傳遞,其最顯著的特點也是其所傳遞的參數是值的拷貝,傳遞后即互不相干,可以通過以下示例說明:
public class TempTest{
private void test1(int a){
a=5;
System.out.println(\"test1方法中的a===\"+a);
}
public static void main(String[]args){
TempTest t=new TempTes(t);
int a=3;
t.test1(a);//
在進行傳遞后,test1方法中所改變的變量值不會對此處的a產生影響。
System.out.println(\"main方法中的a===\"+a);
}
}
運行結果是:
test1方法中的a===5
main方法中的a===3
二、按引用傳遞
所謂的按引用傳遞是指方法調用的過程中,按照引用實現參數的傳遞,其所傳遞的參數內容是引用地址,即變量對的內存空間地址。按引用傳遞也著顯著的特點,它所傳遞的內容是值的引用,無論傳遞前還是傳遞后均指向同個內存空間。可以通過以下示例加以說明:
第1行public class TempTest{
第2行private void test1(A a){
第3行a.age=20;
第4行System.out.println(\"test1方法中的age=\"+a.age);
第5行}
第6行public static void main(String[]args){
第7行TempTest t=new TempTes(t);
第8行A a=new A();
第9行a.age=10;
第10行t.test1(a);
第11行System.out.println(\"main方法中的age=\"+a.age);
第12行}
第13行}
第14行class A{
第15行public int age=0;
第16行}
運行結果如下:
test1方法中的age=20
main方法中的age=20
三、內存分配示意圖
要準確理解按引用傳遞的過程,就要清楚的知道內存分配的過程,可以通過以下示例進行說明:
(1):運行開始,運行第8行,創建了一個A的實例,內存分配示意如下:
main方法中的變量a
(此處是一個A的實例,age=0)
(2):運行第9行,是修改A實例里面的age的值,運行后內存分配示意如下:
main方法中的變量a
(此時age=10)
3):運行第10行,是把main方法中的變量a所引用的內存空間地址,按引用傳遞給test1方法中的a變量。請注意:這兩個a變量是完全不同的,不要被名稱相同所蒙蔽。內存分配示意如下:
main方法中的變量a
(此時age=10)
按引用傳遞賦值給test1方法中的變量a,因為是按引用傳遞,即所傳遞的內容是內存空間地址,因此在傳遞結束后,內存示意圖就會形成一個新的形式:
main方法中的變量a
test1方法中的變量a
(此時age=10)
即兩個變量均指向同一空間。
(4):運行第3行,為test1方法中的變量a指向的A實例的age進行賦值,完成后形成的新的內存示意圖如下:
main方法中的變量a
test1方法中的變量a
(此時age=20)
此時A實例的age值的變化是由test1方法引起的
(5):運行第4行,根據此時的內存示意圖,輸出test1方法中的age=20
(6):運行第11行,根據此時的內存示意圖,輸出main方法中的age=20
四、利用ASP實現JAVA在網頁中的參數傳遞
通常JAVA要從其所在的超文本中獲取參數,假如這些參數可預知或者不常改變,那么只需將對應的參數直接輸出超文本中即可。但是如果這些參數是無法預知或者經常變化的動態參數,那么就要相應的更改超文本中的這些參數。我們可以利用ASP實現這一功能。我們可以通過以下案例加以說明:
以單一的記錄值為參數向JAVA傳遞,該例是把數據表中與條件相符的特定字段中一條記錄值作為參數向JAVA傳遞,然后JAVA再將其內容按照逐字展開的形式在網頁中顯示:
TLE>
70%> <%If Request.Form =””Then %> <%Else %> <%Session.timeout = 1’超時時間(分鐘) If IsObject(Session(”Web SQL-conn”)) Then Set conn = Session(”Web SQL-conn”) Else Set conn = Server.CreateObject(”ADODB.Con- nection”) conn.open”Web SQL”,”sa”,”pswd” Set Session(”Web SQL-conn”) = conn End If %> <%sql =”SELECT * FROM meet WHERE date =’” Request.Form(”date”) ”’” Set rs = Server.CreateObject(”ADODB.Recordset”) rs.Open sql, conn, 3, 3 %> |
<% End If %>
總之,JAVA語言中的參數傳遞與C語言或者C++語言有所不同,在進行程序設計時需多加注意。
參考文獻:
[1] 龔雄興. C、C++、Java、C#中參數傳遞方式比較[J].福建電腦,2009(5)
[2] 于國防,袁小平. 利用ASP實現JAVA動態參數的傳遞[J].計算機應用,2008(11)
[3] 邵立兵. Java程序中動態參數的傳遞[J].微計算機應用,2007(3)
[4] 張振蕊,翟霞. 淺析Java語言中接口的應用[J]. 科技創新導報, 2010,(20) .
[5] 高榮芳. 如何處理Java程序中的錯誤[J]. 陜西廣播電視大學學報, 2010,(02)