程序有可能被恶意的使用,也就是遭受攻击,对于一个类来说,如果能够合适地使用保护性拷贝,将会使得类的安全性增大,例如:
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的引用机制,多个引用指向同一个内存空间,因此只要修改引用的数据就能够破坏既定的数据。因此,我们可以利用拷贝新的内容来隐藏原始数据
时间: 2024-10-19 15:31:53