個人的一些認識,希望能對初學Java的你,或者困惑於方法參數傳遞的你祈禱一絲幫助! 下麵是一些作者的個人觀點,如果有錯,歡迎各位大牛指出錯誤,灰常感謝您的觀看與支持... 今天學習Java的時候,看見書中提及方法參數傳遞 有按值傳遞 和按地址傳遞; 上面的源代碼是Java中的按值傳遞: 那什麼是引用 ...
個人的一些認識,希望能對初學Java的你,或者困惑於方法參數傳遞的你祈禱一絲幫助!
下麵是一些作者的個人觀點,如果有錯,歡迎各位大牛指出錯誤,灰常感謝您的觀看與支持...
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
今天學習Java的時候,看見書中提及方法參數傳遞
有按值傳遞 和按地址傳遞;
1 我們如何判斷一個類中它採用的值傳遞還是引用傳遞呢,我們要看類中的形參。 2 如果形參的數據是基本數據類型,那麼我們就可以斷定他是值傳遞,
eg.
本包中的People.java 和Human.java 中有對值傳遞的介紹;
package com.baidu; public class People { public static void main(String[] args) { // TODO Auto-generated method stub Human human = new Human("dengchunlai"); //human.yang(); 不能這樣使用,因為 String yang是定義的字元串類型的類(變數),不是方法; //human.yang;//不能這樣使用; String ming = human.yang; System.out.println(human.yang); //但可以這樣使用; System.out.println(ming); } }
package com.baidu; public class Human { String yang; public Human(String st1) { // TODO Auto-generated constructor stub yang = st1; } }
上面的源代碼是Java中的按值傳遞:
那什麼是引用傳遞呢?
如果形參里的數據為 類 ; 那麼我們就斷定他是引用傳遞; (*)按引用傳遞參數時,被調用的方法中的代碼將直接訪問原始對象 ->[按引用傳遞的基礎]
package com.baidu; class Data { String msg; public Data(String str) { // TODO Auto-generated constructor stub this.msg = str; } // public Data() { // // } }
package com.baidu; public class DataPrinter { void print(Data d) { System.out.println(d.msg); } public void setMsg(Data d) { d.msg = "Hello to Java ! "; } }
public class MethodCallDemo2 { public static void main(String[] args) { // TODO Auto-generated method stub Data data = new Data("Hello from Java !"); //創建了一個Data類對象的一個引用data,同時new了一個有參的構造函數; DataPrinter dp = new DataPrinter(); // System.out.println("第一次輸出結果;"+ data.msg); dp.setMsg(data); System.out.println("第二次輸出結果:"+data.msg); } }
證明()里是一個無參的構造方法:
[個人心得]:在編寫代碼的時候發現 Data data = new Data("Hello from java !"); 在使用這句語句的時候我在Data 我們需要在類中建立一個帶字元串型的形參的構造方法; 由於在之前單獨使用創建的時候是調用無參的構造函數,我在想他放到構造一個預設的無參的構造函數呢,於是我在Data類中構造了一個無參的 但事實證明,程式出現報錯,由此可證明()中確實是一個構造函數,但為什麼不顯示他的構造函數呢,第一句語句new的是一個構造函數,且並不顯示,可能由於系統預設吧!
言歸正傳:
這個代碼的核心就是 dp.setMsg(data); 我們怎麼理解呢,DataPrinter類中的設置器中的形參是Data d; 他這麼設置形參的原因是什麼呢,可能由於主方法的 dp.setMsg(data); 是要求Data類,所以引用傳遞,由於(按引用傳遞參數時,被調用的方法中的代碼將直接訪問原始對象),所以setMsg()這個方法裡面的代碼 可以直接訪問Data這個原始類的原始對象String msg;