南京网站优化网站建设公司,html入门网页制作,网站正在升级建设中,大兴模版网站开发公司哪家好目录 1.是什么
2.为什么
3.怎么做
4.构造详细的不可变类示例:
5.补充
5.1 Java标准库中的不可变类
5.2 构造不可变类进阶
1.对象包含嵌套的引用类型字段
2. 大型对象采用不可变类时,需考虑性能影响。
2.1 内存占用问题
2.2 垃圾回收压力
2.3 复制开销
2.4 优化策…目录 1.是什么
2.为什么
3.怎么做
4.构造详细的不可变类示例:
5.补充
5.1 Java标准库中的不可变类
5.2 构造不可变类进阶
1.对象包含嵌套的引用类型字段
2. 大型对象采用不可变类时,需考虑性能影响。
2.1 内存占用问题
2.2垃圾回收压力
2.3复制开销
2.4优化策略
3.应用时机
3.1 适合使用不可变类的情况
3.2不适合使用不可变类的情况
3.3权衡 1.是什么
不可变类是指在创建后其状态(对象的属性)无法被修改的类。一但对象被创建,它的所有属性都不能被更改 2.为什么
最主要的好处是可以保证线程安全,但同时也带来了频繁修改会浪费资源 3.怎么做 1.声明类为final。 防止子类被继承 2.类的所有属性都是private和final。 确保所有属性在初始化完成后不能被修改 3.不提供任何修改对象属性的方法,比如 setter 4.如果类包含引用类型字段,确保这些字段在构造函数中进行深拷贝,并且返回可变对象的防御性拷贝 import java.util.Collections;import java.util.List;public final class ImmutableClass {private final ListString items;public ImmutableClass(ListString items) {this.items = Collections.unmodifiableList(new ArrayList(items));}public ListString getItems() {return items;}}
4.构造详细的不可变类示例:
import java.util.Collections;import java.util.Date;import java.util.List;public final class Person {private final String name;private final Date birthDate;private final ListString hobbies;public Person(String name, Date birthDate, ListString hobbies) {this.name = name;this.birthDate = new Date(birthDate.getTime());this.hobbies = Collections.unmodifiableList(new ArrayList(hobbies));}public String getName() {return name;}public Date getBirthDate() {return new Date(birthDate.getTime());}public ListString getHobbies() {return hobbies;}} 在这个Person类中,我们确保birthDate和hobbies字段都是不可变的。对于birthDate,我们在构造函数和getter方法中使用了深拷贝。对于hobbies,我们使用了Collections.unmodifiableList方法来创建不可变的列表视图。