java學習筆記--封裝的注意點
注意在進行封裝物件的時候,在一個類中不要編寫返回引用的訪問器。如下程式碼:
package com.handkoo.test;
import java.util.Date;
public class Demo {
private Date myDate;
public Demo() {
}
public Demo(Date date){
this.myDate = date;
}
public Date getMyDate() {
return myDate;
}
public void setMyDate(Date myDate) {
this.myDate = myDate;
}
}
這樣寫會破壞封裝性,造成很隱蔽的錯誤!
如果這樣寫:
public static void main(String[] args){
Demo demo = new Demo(new Date());
System.out.println("該物件初始化的myDate屬性值為:"+demo.getMyDate());
Date date = demo.getMyDate();
double tenYears = 10*365.25*24*60*60*1000;
date.setTime(date.getTime()-(long)tenYears);
System.out.println("此時物件的myDate值為:"+demo.getMyDate());
}
結果很令人意外,兩次輸出的myDate屬性值並不一樣!
原來這是因為返回的引用導致的.
date和demo.myDate引用的是同一個物件。
所以,在返回物件的引用時,如果需要返回一個資料拷貝,最好返回一個物件的克隆。
package com.handkoo.test;
import java.util.Date;
public class Demo {
private Date myDate;
public Demo() {
}
public Demo(Date date){
this.myDate = date;
}
public Date getMyDate() {
return (Date) myDate.clone();
}
public void setMyDate(Date myDate) {
this.myDate = myDate;
}
public static void main(String[] args){
Demo demo = new Demo(new Date());
System.out.println("該物件初始化的myDate屬性值為:"+demo.getMyDate());
Date date = demo.getMyDate();
double tenYears = 10*365.25*24*60*60*1000;
date.setTime(date.getTime()-(long)tenYears);
System.out.println("此時物件的myDate值為:"+demo.getMyDate());
}
}
結果:
相關文章
- 封裝中的get、set方法-學習筆記封裝筆記
- Java學習-封裝Java封裝
- 封裝framework注意點封裝Framework
- java學習筆記(包裝類)Java筆記
- (三)Java併發學習筆記–執行緒封閉Java筆記執行緒
- JAVA學習筆記Java筆記
- 重新學習JAVA的筆記Java筆記
- 《JAVA學習指南》學習筆記Java筆記
- 點分治學習筆記筆記
- muduo網路庫學習筆記(8):高效日誌類的封裝筆記封裝
- Java 集合學習筆記Java筆記
- java學習筆記6Java筆記
- Java學習筆記--反射Java筆記反射
- java學習筆記啊Java筆記
- Java學習筆記二Java筆記
- Java學習筆記三Java筆記
- Java JNI 學習筆記Java筆記
- Java學習筆記4Java筆記
- 點分樹學習筆記筆記
- KLC 數點學習筆記筆記
- Java學習筆記--sql與javaJava筆記SQL
- Java學習筆記記錄(二)Java筆記
- Java隨筆-Java泛型的一點學習Java泛型
- Java學習筆記--運算子Java筆記
- Java學習筆記系列-反射Java筆記反射
- Java JDK 9學習筆記JavaJDK筆記
- java學習筆記(異常)Java筆記
- 【Java學習筆記】Collections集合Java筆記
- 【部分】Java速成學習筆記Java筆記
- Java IO學習筆記五Java筆記
- Java API學習筆記(一)JavaAPI筆記
- Java學習筆記之一Java筆記
- Java學習筆記之staticJava筆記
- Java學習筆記之多型Java筆記多型
- JAVA學習筆記-繼承Java筆記繼承
- 【Java學習筆記】拾遺Java筆記
- Java基礎學習筆記Java筆記
- 裝飾器學習筆記筆記