1,防禦性程式設計。必要時應當考慮採取保護性拷貝的手段來保護內部的私有資料,先來看下面這個例子:
pubic final class period
public date getstart()
public date getend()
}這個類存在兩個不安全的地方,首先來看第乙個攻擊**
date start = new date();
date end = new date();
period p = new period(start, end);
end.setyear(78);//改變p的內部資料!
這是因為外部和內部引用了同樣的資料,為了解決這個問題,應當修改period的建構函式:
public period(date start, date end)
這樣內部的私有資料就與外部物件指向不同,則不會被外部改變
再來看第二個攻擊**:
date start = new date();
date end = new date();
period p = new period(start, end);
p.getend().setyear(78);//改變p的內部資料!
這很顯然是由於公有方法暴露了內部私有資料,我們可以只返回內部私有資料的唯讀版本(即其乙份拷貝)
public date getstart()
public date getend()
2,讀到上面這個例子,我想起來了下面這樣的**片段
public class suit
public string tostring()
public int compareto(object o)
public static final suit clubs = new suit("clubs");
public static final suit diamonds = new suit("diamonds");
public static final suit hearts = new suit("hearts");
public static final suit spades = new suit("spades");
private static final suit private_values = ;
public static final list values = collections.unmodifiedlist(arrays.aslist(private_values));
}出處:
防禦性程式設計
2010 6 29 30 斷言 斷言是乙個肯定的語句。在程式執行過程中只要斷言恒為真,程式就正確。斷言條件只能包含不會修改程式狀態的測試條件。assert 條件 包含在標頭檔案 中。ifdef ndebug define assert condition void 0 else void asser...
《Windows核心程式設計》 防禦性程式設計 斷言
防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...
《Windows核心程式設計》 防禦性程式設計 斷言
防禦性程式設計是提高軟體質量技術的有益輔助手段,它的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。防禦性程式設計關鍵在於嚴格的輸入檢查 預期的錯誤處理方法。下面介紹使用斷言來進行防禦性程式設計。斷言通常是乙個例程 routine 或乙個巨集 macros 斷言通常...