學生類Student:
package 克隆clone;/*要克隆必須實現這個藉口:Cloneable,以標記這個對象可以克隆Cloneable:此類實現了Cloneable 接口,以指示Object.clone() 方法可以合法地對該類實例進行按字段複製。 這個接口是標記接口,告訴我們實現該接口的類就可以實現對象的複制了。 */public class Student implements Cloneable {private String name;private int age;public Student() {}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 重寫克隆方法子列才可以調用@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}}測試克隆學生類:
package 克隆clone;/* *protected void finalize():當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。用於垃圾回收,但是什麼時候回收不確定。 *protected Object clone():創建並返回此對象的一個副本。 *A:重寫該方法* * Cloneable:此類實現了Cloneable 接口,以指示Object.clone() 方法可以合法地對該類實例進行按字段複製。 * 這個接口是標記接口,告訴我們實現該接口的類就可以實現對象的複制了。 */public class StudentClone {public static void main(String[] args) throws CloneNotSupportedException {//創建學生對象Student s = new Student();s.setName("林青霞");s.setAge(27);//克隆學生對象Object obj = s.clone();Student s2 = (Student)obj;System.out.println("---------");System.out.println(s.getName()+"---"+s.getAge());System.out.println(s2.getName()+"---"+s2.getAge());//以前的做法Student s3 = s;System.out.println(s3.getName()+"---"+s3.getAge());System.out.println("---------");//其實是有區別的s3.setName("劉意");s3.setAge(30);System.out.println(s.getName()+"---"+s.getAge());System.out.println(s2.getName()+"---"+s2.getAge());System.out.println(s3.getName()+"---"+s3.getAge());System.out.println("---------");//把克隆的改一下呢? s2.setName("克隆改的名稱");s2.setAge(66);System.out.println(s.getName()+"---"+s.getAge());System.out.println(s2.getName()+"---"+s2.getAge());System.out.println(s3.getName()+"---"+s3.getAge());//也就是說把一個對象的引用賦值給一個引用,當這個引用發什麼該改變的時候,同一個引用指向的對象會發生改變,但是克隆的不會變化,//把克隆的對象改變他的一些屬性,那麼也不會影響到其他的對象的值的改變}}以上就是小編為大家帶來的淺談Java中的克隆close()和賦值引用的區別的全部內容了,希望對大家有所幫助,多多支持武林網~