淺談Java中的克隆close()和賦值引用的區(qū)別
更新時間:2016年09月30日 11:33:22 投稿:jingxian
下面小編就為大家?guī)硪黄獪\談Java中的克隆close()和賦值引用的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
學(xué)生類Student:
package 克隆clone;
/*要克隆必須實現(xiàn)這個借口:Cloneable,以標(biāo)記這個對象可以克隆
Cloneable:此類實現(xiàn)了 Cloneable 接口,以指示 Object.clone() 方法可以合法地對該類實例進行按字段復(fù)制。
這個接口是標(biāo)記接口,告訴我們實現(xiàn)該接口的類就可以實現(xiàn)對象的復(fù)制了。
*/
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;
}
// 重寫克隆方法子列才可以調(diào)用
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
測試克隆學(xué)生類:
package 克隆clone;
/*
* protected void finalize():當(dāng)垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調(diào)用此方法。用于垃圾回收,但是什么時候回收不確定。
* protected Object clone():創(chuàng)建并返回此對象的一個副本。
* A:重寫該方法
*
* Cloneable:此類實現(xiàn)了 Cloneable 接口,以指示 Object.clone() 方法可以合法地對該類實例進行按字段復(fù)制。
* 這個接口是標(biāo)記接口,告訴我們實現(xiàn)該接口的類就可以實現(xiàn)對象的復(fù)制了。
*/
public class StudentClone {
public static void main(String[] args) throws CloneNotSupportedException {
//創(chuàng)建學(xué)生對象
Student s = new Student();
s.setName("林青霞");
s.setAge(27);
//克隆學(xué)生對象
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("---------");
//其實是有區(qū)別的
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());
//也就是說把一個對象的引用賦值給一個引用,當(dāng)這個引用發(fā)什么該改變的時候,同一個引用指向的對象會發(fā)生改變,但是克隆的不會變化,
//把克隆的對象改變他的一些屬性,那么也不會影響到其他的對象的值的改變
}
}
以上就是小編為大家?guī)淼臏\談Java中的克隆close()和賦值引用的區(qū)別的全部內(nèi)容了,希望對大家有所幫助,多多支持腳本之家~
相關(guān)文章
Java web.xml之contextConfigLocation作用案例詳解
這篇文章主要介紹了Java web.xml之contextConfigLocation作用案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Springmvc工程跳轉(zhuǎn)controller無效的解決
這篇文章主要介紹了Springmvc工程跳轉(zhuǎn)controller無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
詳解SpringMVC中設(shè)置靜態(tài)資源不被攔截的問題
這篇文章主要介紹了詳解SpringMVC中設(shè)置靜態(tài)資源不被攔截的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
如何使用jakarta.json進行json序列化和反序列化
java里,json框架何其多,常見的有jackson、fastjson、gson等,本文重點介紹如何使用jakarta.json進行json序列化和反序列化,需要的朋友可以參考下,2024-07-07
Java創(chuàng)建對象的六種常用方式總結(jié)
作為Java開發(fā)者,經(jīng)常創(chuàng)建很多對象,你是否知道Java中創(chuàng)建對象有哪些方式呢?下面這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建對象的六種常用方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
Session過期后實現(xiàn)自動跳轉(zhuǎn)登錄頁面
這篇文章主要介紹了Session過期后實現(xiàn)自動跳轉(zhuǎn)登錄頁面,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12
springboot如何實現(xiàn)異步響應(yīng)請求(前端請求超時的問題解決)
這篇文章主要給大家介紹了關(guān)于springboot如何實現(xiàn)異步響應(yīng)請求(前端請求超時的問題解決)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-01-01

