1. 程式人生 > 其它 >|NO.Z.00017|——————————|BigDataEnd|——|Java&類和物件.V17|---------------------------------------------|Java.v17|引數傳遞注意事項|

|NO.Z.00017|——————————|BigDataEnd|——|Java&類和物件.V17|---------------------------------------------|Java.v17|引數傳遞注意事項|



[BigDataJava:Java&類和物件.V17]                                                                             [BigDataJava.面向物件] [|章節一|類和物件|引數傳遞注意事項|]








一、引數傳遞注意事項
### --- 引數傳遞注意事項

~~~     ——>        基本資料型別的變數作為方法的引數傳遞時,
~~~     ——>        形參變數數值的改變通常不會影響到實參變數的數值,因為兩個變數有各自獨立的記憶體空間;
~~~     ——>        引用資料型別的變數作為方法的引數傳遞時,
~~~     ——>        形參變數指向內容的改變會影響到實參變數指向內容的數值,因為兩個變數指向同一塊記憶體空間
~~~     ——>        當引用資料型別的變數作為方法的引數傳遞時,
~~~     ——>        若形參變數改變指向後再改變指定的內容,則通常不會影響到實參變數指向內容的改變,
~~~     ——>        因為兩個變數指向不同的記憶體空間。
### --- 記憶體結構之棧區

~~~     ——>        棧用於存放程式執行過程當中所有的區域性變數。
~~~     ——>        一個執行的Java程式從開始到結束會有多次方法的呼叫。
~~~     ——>        JVM會為每一個方法的呼叫在棧中分配一個對應的空間,這個空間稱為該方法的棧幀。
~~~     ——>        一個棧幀對應一個正在呼叫中的方法,棧幀中儲存了該方法的引數、區域性變數等資料。
~~~     ——>        當某一個方法呼叫完成後,其對應的棧幀將被清除。
### --- 傳參的相關概念

~~~     ——>        引數分為形參和實參,定義方法時的引數叫形參,呼叫方法時傳遞的引數叫實參。
~~~     ——>        呼叫方法時採用值傳遞把實參傳遞給形參,方法內部其實是在使用形參。
~~~     ——>        所謂值傳遞就是當引數是基本型別時,傳遞引數的值,比如傳遞i=10,真實傳參時,
~~~     ——>        把10賦值給了形參。當引數是物件時,傳遞的是物件的值,也就是把物件的地址賦值給形參。
二、邏輯結構
三、程式設計程式碼
### --- 程式設計程式碼

/*
    程式設計實現引數傳遞的測試 
 */
public class ArgumentTest {
    
    // 自定義成員方法列印引數傳入的整數資料
    // int ia = ib = 10;
    void show1(int ia) {
        ia = 200;
        System.out.println("show方法中:ia = " + ia); // 10  200
    }
    // 自定義成員方法列印引數傳入的陣列內容
    void show2(int[] arr1) {
        arr1 = new int[2];  // 加上改行程式碼後,相當於在堆區中又重新申請一塊記憶體空間
        arr1[0] = 200;
        System.out.println("show方法中:arr1[0] = " + arr1[0]); // 10  200  200
    }
    
    public static void main(String[] args) {
        
        // 1.宣告ArgumentTest型別的引用指向該型別的物件
        ArgumentTest at = new ArgumentTest();
        // 2.使用引用變數呼叫show1方法進行測試
        int ib = 10;
        at.show1(ib);
        System.out.println("main方法中:ib = " + ib); // ib = 10 
        
        System.out.println("-------------------------------------------------");
        // 3.呼叫show2方法進行測試
        int[] arr2 = new int[]{10, 20};
        at.show2(arr2);
        System.out.println("main方法中:arr2[0] = " + arr2[0]); // 10 200 10
    }
}
四、編譯列印
### --- 編譯

C:\Users\Administrator\Desktop\project>javac ArgumentTest.java
### --- 列印輸出

C:\Users\Administrator\Desktop\project>java ArgumentTest
show方法中:ia = 200
main方法中:ib = 10
-------------------------------------------------
show方法中:arr1[0] = 200
main方法中:arr2[0] = 10








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                    ——W.S.Landor



來自為知筆記(Wiz)