develop经验
开发经验
一浅笑
初来乍到,请多关照
展开
-
【第9条】try-with-resources优先于try-finally
try-with-resources优先于try-finallyJava类库中包含许多必须通过调用close方法手动关闭的资源。例如InputStream,OutputStream和java.sql.Connection。客户经常会忽略资源的关闭,造成严重的性能后果也就可想而知了。虽然这其中的许多资源都是用终结方法作为安全网,但是效果并不理想(详见第8条)。根据经验,try-finally语句是确保资源会被适时关闭的最佳方法,就算发生异常或者返回也一样// t...原创 2020-11-04 17:26:47 · 404 阅读 · 0 评论 -
【第8条】避免使用终结方法和清除方法
避免使用终结方法和清除方法最终方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的。它们的使用会导致不稳定的行为,糟糕的性能和移植性问题。Finalizer机制有一些特殊的用途,我们稍后会在这个条目中介绍,但是通常应该避免它们。从Java 9开始,Finalizer机制已被弃用,但仍被Java类库所使用。Java 9中Cleaner机制代替了Finalizer机制。清除方法没有终结方法那么危险,但仍然是不可预测、运行缓慢,一般情况下也是不必要的...原创 2020-11-04 17:25:17 · 277 阅读 · 1 评论 -
【第7条】消除过期的对象引用
消除过期的对象引用当你从手工管理内存的语言(比如C或C++)转换到具有垃圾收集功能的比如Java语言时,程序员的工作会变得更加容易,因为当你用完了对象之后,它们会被自动回收。当你第一次经历对象回收功能的时候,会觉得这简直有点不可思议。它很容易给你留下这样的印象,认为自己不再需要考虑内存管理的事情了,其实不然。考虑以下简单的栈实现:// Can you spot the "memory leak"? public class Stack { private Object[] eleme.原创 2020-11-04 17:11:26 · 263 阅读 · 1 评论 -
【第6条】避免创建不必要的对象
避免创建不必要的对象一般来说,最好能重用单个对象,而不是在每次需要的时候就创建一个相同功能的新对象。重用方式既快速,又流行。如果对象是不可变的(immutable)(详见第17条),它就始终可以被重用作为一个极端的反面例子,看看下面的语句:String s = new String("bikini"); // DON'T DO THIS!语句每次执行时都会创建一个新的String实例,而这些对象的创建都不是必需的。String构造方法("bikini")的参数本身就是一...原创 2020-11-04 17:09:43 · 107 阅读 · 0 评论 -
【第5条】引用资源请优先考虑依赖注入
优先考虑依赖注入来引用资源许多类依赖于一个或多个底层资源。例如,拼写检查器依赖于字典。将此类类实现为静态工具类并不少见:// Inappropriate use of static utility - inflexible & untestable! public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} // Nonins...原创 2020-11-04 17:06:20 · 159 阅读 · 0 评论 -
【第4条】用私有构造器强化不可实例化的能力
通过私有构造器强化不可实例化的能力偶尔你会想写一个只包含静态方法和静态字段的类。这些类的名声非常不好,因为有些人滥用这些类从而避免以面向对象方式思考从而编写过程化的程序,但是它们确实有着特殊的用途。它们可以用来按照java.lang.Math或java.util.Arrays的方式,把基本类型的值或数组类型上的相关方法组织起来。我们也可以通过java.util.Collections的方式,把实现特定接口上面的静态方法进行分组,也包括工厂方法。(从Java 8开始,你也可以将这些方...原创 2020-11-04 17:03:01 · 122 阅读 · 0 评论 -
【第3条】用私有构造器或者枚举类型强化单例(Singleton)属性
用私有构造器或者枚举类型强化Singleton属性单例是一个仅实例化一次的类。单例对象通常表示无状态对象,如函数或一个本质上唯一的系统组件。使类称为Singleton会使它的客户端测试变得十分困难,因为不可能给Singleton替换模拟实现,除非实现一个充当其类型的接口有两种常见的方法来实现单例。两者都基于保持构造方法私有和导出公共静态成员以提供对唯一实例的访问。在第一种方法中,成员是final修饰的属性:// Singleton with public final field pu...原创 2020-11-04 17:00:05 · 91 阅读 · 0 评论 -
【第2条】当构造方法参数过多时使用builder模式
第2条:当构造方法参数过多时使用builder模式静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。比如用一个类表示包装食品外面显示的营养成分标签。这些标签中有几个域是必需的:每份的含量、每罐的含量以及每份的卡路里。还有超过20个的可选域:总脂肪量、饱和脂防量、转化脂防、胆固醇、钠,等等。大多数产品在某几个可选域中都会有非零的值。对于这样的类,应该用哪种构造器或者静态工厂来编写呢?程序员一向习惯采用重叠构造器(telescopingconstructor)模式,在这种模..原创 2020-11-04 16:52:45 · 189 阅读 · 0 评论 -
【第1条】尽量使用静态工厂方法而不是构造器
【第1条】用静态工厂方法代替构造器一个类允许客户端获取其实例的传统方式,是提供一个公共构造方法。其实,还有另一种技术应该成为每个程序员工具箱的一部分。一个类可以提供一个简单的、只返回该类实例的公共静态工厂方法。下面是一个Boolean简单的例子( 基本类型boolean的包装类)。此方法将基本类型boolean转换为Boolean对象引用:public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : B...原创 2020-11-04 16:41:41 · 125 阅读 · 0 评论