ND_*_*_27 5 c++ java copy-constructor
我很好奇Java如何支持复制构造函数,它与C++有什么不同?我想了解从故事的编译器端执行三阶规则(复制构造函数,析构函数,赋值运算符)的逻辑的Java等价物.
Java对副本构造函数没有特定的语言支持.相反,你只需在构造函数中手动编写状态复制; 例如
public class Person {
private String firstName;
private String lastName;
public Person(Person other) {
this.firstName = other.firstName;
this.lastName = other.lastName;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我想了解从故事的编译器端执行三阶规则(复制构造函数,析构函数,赋值运算符)的逻辑的Java等价物.
复制构造函数如上所述.实际上只是一个(简单)设计模式.
Java不提供与C++赋值运算符加载等效的等价物.Java支持基元类型和引用类型的赋值,但不支持以与C++相同的方式分配对象.在Java中分配值时,需要执行特殊操作是不常见的.在需要执行此操作的情况下,习惯上将逻辑放入setter方法中.
Java支持的finalize方法在某些方面与C++析构函数类似.主要区别在于finalize方法是对象而不是引用变量的操作,并且它们通常在对象的最后一个引用超出范围后很长时间被调用.
但是,您很少需要使用finalize方法:
Java是一种完全垃圾收集的语言,内存管理的最佳策略是让GC处理它.
其他资源最好使用"try/finally"或"try with resources"进行管理.
AFAIK 是方法的唯一合理用例,finalize用于清理意外丢失的资源; 例如,因为有人忘记使用推荐的机制"关闭"它们.
Java只有对象的引用.您不能声明内联(在堆栈或对象上)对象.
复制构造函数
Java没有.你可以写一个,但很少这样做.
,析构函数
Java没有.它有,finalize()但非常气馁.
赋值运算符
Java没有一个用于对象,只有对象的引用.
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |