2008年4月29日 星期二

Pratical in Java - 實踐01:引數以by value方式而非by reference方式傳遞




package rule01;

/**
*
* @author Robert Tan
*
* 實踐01:引數以by value方式而非by reference方式傳遞
* 一般Call by Value給人的印像是把值或物件拷貝一份.這句話對Java基本型別是對的,但對Java物件
* 則是不正確的,Java拷貝的不是物件本身,而是如書上所說的物件的參考值.了解書上所寫的之後,我們一
* 定會問說,我要如何拷貝一份物件,而不影響原本的物件呢?答案是利用clone().
* 附註:Thinking in Java,對Cloneable與clone有很詳細的介紹
*/

public class Main {
public static void main(String [] args) {
Student1 Jack = new Student1("Jack");
change1(Jack);
System.out.println("Jack's name is " + Jack.getName());

//implement Cloneable interface and override clone method
Student2 Rose = new Student2("Rose");
change2((Student2) Rose.clone());
System.out.println("Rose's name is " + Rose.getName());
}

public static void change1(Student1 s) {
s.setName("Robert");
}

public static void change2(Student2 s) {
s.setName("Robert");
}
}

class Student1 {
private String name;

public Student1(String name) {
this.name = name;
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

class Student2 implements Cloneable {
private String name;

public Student2(String name) {
this.name = name;
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}

public Object clone() {
Object obj = null;
try {
obj = super.clone();
}
catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}

沒有留言: