1. 程式人生 > >23、保護性拷貝

23、保護性拷貝

void ide strong 如果能 @override spa 空間 say 內容

程序有可能被惡意的使用,也就是遭受攻擊,對於一個類來說,如果能夠合適地使用保護性拷貝,將會使得類的安全性增大,例如:

 1 class Person{
 2     private String name;
 3     public Person(String name) {
 4         this.name = name;
 5     }
 6     
 7     private Person getPerson() {
 8         return new Person(name);
 9     }
10     
11     public void setName(String name){
12 this.name = name; 13 } 14 15 public Person say(String content){ 16 System.out.println(name + " say:" + content); 17 return getPerson(); 18 } 19 20 @Override 21 public String toString() { 22 return "Person [name=" + name + "]"; 23 } 24 25
26 } 27 28 29 30 public static void main(String[] args) { 31 Person person = new Person("lay"); 32 33 Person person2 = person.say("hahah"); 34 person2.setName("marry"); 35 person2.say("hehehe"); 36 37 person.say("what"); 38 }

如上所示,不管使用方如何setName都只是修改了拷貝出來的數據,而person的原始數據很好地被隱藏起來。

主要因素在於,java的引用機制,多個引用指向同一個內存空間,因此只要修改引用的數據就能夠破壞既定的數據。因此,我們可以利用拷貝新的內容來隱藏原始數據

23、保護性拷貝