熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

談談各種JAVA中的調用程序方式

2013-11-23 17:57:59  來源: Javascript 

  很多書籍都說Java支持傳引用調用的方式類似於C++中的Person &a引用調用而近來編程遇到一系列問題讓我對此產生了懷疑於是將這些方法一一列出我們來一起看看JAVA中的調用方式
  
   看下面的程序
  
   class Person {
  
     private String name;//姓名
  
    private String sex;//性別
  
    public Person(String x String y) {
      thisname = x;
      thissex = y;
    }
  
    public void setStatus(String x String y) {
      thisname = x;
      thissex = y;
  
    }
  
    public String toString() {
  
      return name + sex;
  
    }
  
    // -----交換普通對象-----
    public static void changeref(Person tmpx Person tmpy) {
      //交換tmpx和tmpy對象
      Person swapref = tmpx;
      tmpx = tmpy;
      tmpy = swapref;
  //    Systemoutprintln(在方法中交換的結果: refa = + tmpxtoString());
  //    Systemoutprintln(在方法中交換的結果: refb = + tmpytoString());
    }
  
    // ----- 交換數組對象-----
    public static void changeArrayRef(Person[] x Person[] y) {
  
      //交換數組對象
      Person swaparrayref = x[xlength];
      x[xlength] =y[xlength];
      y[xlength] = swaparrayref;
  
    }
  
  
    //-----交換數組-----
    public static void changeArray(int[] xint[] y) {
  
      int[] tmp =x;
      x = y;
      y = tmp;
  
  
    }
  
  
  }
  
  
  
  public class Demo {
  
    public static void main(String[] args) {
  
      //-------建立並構造兩個對象---------
      Person refa = new Person(張三 );
      Person refb = new Person(李四 );
  
      //交換refa對象和refb對象
      Personchangeref(refa refb);
      //從交換結果中看出實際對象並未交換
      Systemoutprintln(在主函數中交換的結果 refa = + refatoString());
      Systemoutprintln(在主函數中交換的結果 refb = + refbtoString());
  
      //-------建立兩個對象數組----------
      Person[] arraya = new Person[];
      Person[] arrayb = new Person[];
  
      //分別構造數組對象
      arraya[] = new Person(王五);
      arrayb[] = new Person(趙六);
  
      /*數組對象為null時不能設置其值必須先構造它(即調用構造函數)再用其它方法設置其值
     */
  
      Systemoutprintln(\n+數組對象交換前的結果 arraya = + arraya[]toString());
      Systemoutprintln(數組對象交換前的結果 arrayb = + arrayb[]toString());
      //交換這兩個數組對象
      PersonchangeArrayRef(arraya arrayb);
      Systemoutprintln(-交換後的結果 arraya = + arraya[]toString());
      Systemoutprintln(-交換後的結果 arrayb = + arrayb[]toString());
  
      //-------建立兩個普通數組---------
      int[] a = new int[];
      int[] b = new int[];
  
      //給數組個元素賦值
      for(int i =;i        a[i] = i;
        b[i] = i+;
      }
  
      Systemoutprintln(\n+數組交換前 inta[] = + a[]);
      Systemoutprintln(數組交換前 intb[] = + b[]);
  
      //交換數組
      PersonchangeArray(ab);
  
      Systemoutprintln(-交換後的結果 inta[] = + a[]);
      Systemoutprintln(-交換後的結果 intb[] = + b[]);
  
  
    }
  }
  
  
   從程序執行的結果來看在交換兩個對象時僅僅改變了對象句柄的指向而沒有改變對象內容因此方法參數為對象時並不交換實際內容而是交換了拷貝內容
  
   數組對象有點奇怪在形參中交換了實參也反應出來
  
   數組和普通數據類型一樣形參的改變不會反應到實參中來
  
   對象也一樣形參改變了實參一樣不會反應出來
  
   小結一下
   方法可以修改對象參數的狀態
   方法不能讓對象參數指向新的對象
   方法不能修改基本類型(intbyte等)的參數
  
   因此要想交換對象在方法體中是不現實的用Clone才能完成……未完待續…………
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25451.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.