23、保護性拷貝
阿新 • • 發佈:2017-08-13
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 2526 } 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、保護性拷貝