编程时间

《Effective Java》读书笔记--创建和销毁对象

白昼怎懂夜的黑 提交于 2020-03-01 22:46:06
考虑用静态工厂方法代替构造函数。 当我们在写一个工具类时,是不希望用户将该类实例化的,所以应该定义一个private的构造函数,而不 是将类声明成abstract,因为这样用户可以继承该类,子类可以被实例化。 String类型是非可变对象,如下代码中,s指向的String的值是不能被更改的,当s重新赋值时,s就指向另一个String对象。 String s = new String("silly"); 上句代码每次执行都会创建一个新的String实例,建议用 String s = "silly";代替上一句,这样的话,对于同一个虚拟机中运行的代码,每次执行该句时,因为它们包含相同的字符串字面常量"silly",该对象就会重用,避免创建重复对象。 过期的引用应该手动将它赋值成null,这有两个好处: 让垃圾回收机制及早清理掉这些“垃圾”,提高程序的性能。 如果它们在以后又被错误地解引用,则程序会立即抛出NullPointerException异常,而不是悄悄的错误运行。 不要把JAVA的finalizer当成C++的构造函数。因为JAVA的对象不可达时,finalizer函数不确定何时才能执行。不建议把释放资源的操作写在finalizer中,应该显式的提供一个close()函数给用户手动释放资源。 来源: oschina 链接: https://my.oschina.net/u