随笔分类 -  编码规范

摘要:任何事情都存在其一定的双面性或者多面性,对于C++的开发者,内存资源是需要手工分配和释放的,而对于Java和C#这种资源托管的开发语言,更多的工作可以交给虚拟机的垃圾回收器来完成,由此C++程序得到了运行效率,却失去了安全。在Java的实际开发中,并非所有的资源都是可以被垃圾回收器自动释放的,如FileInputStream、Graphic2D等class中使用的底层操作系统资源句柄,并不会随着对象实例被GC回收而被释放,然而这些资源对于整个操作系统而言,都是非常重要的稀缺资源,更多的资源句柄泄露将会导致整个操作系统及其运行的各种服务程序的运行效率直线下降。那么如何保证系统资源不会被泄露了?在 阅读全文
posted @ 2012-06-04 20:23 andriod2012 阅读(272) 评论(0) 推荐(0) 编辑
摘要:尽管Java不像C/C++那样需要手工管理内存资源,而是通过更为方便、更为智能的垃圾回收机制来帮助开发者清理过期的资源。即便如此,内存泄露问题仍然会发生在你的程序中,只是和C/C++相比,Java中内存泄露更加隐匿,更加难以发现,见如下代码:[java] view plaincopy//Canyouspotthe"memoryleak"?importjava.util.*;publicclassStack{privateObject[]elements;privateintsize=0;privatestaticfinalintDEFAULT_INITIAL_CAPACIT 阅读全文
posted @ 2012-05-29 22:03 andriod2012 阅读(373) 评论(0) 推荐(0) 编辑
摘要:试比较以下两行代码在被多次反复执行时的效率差异:由于String被实现为不可变对象,JVM底层将其实现为常量池,既所有值等于"stringette" 的String对象实例共享同一对象地址,而且还可以保证,对于所有在同一JVM中运行的代码,只要他们包含相同的字符串字面常量,该对象就会被重用。我们继续比较下面的例子,并测试他们在运行时的效率差异:[java] view plaincopyBooleanb=Boolean.valueOf("true");Booleanb=newBoolean("true");前者通过静态工厂方法保证了每次 阅读全文
posted @ 2012-05-28 15:02 andriod2012 阅读(273) 评论(0) 推荐(0) 编辑
摘要:有一些工具类(utility class)不希望被实例化,实例对它没有任何意义。然而,在缺少显式构造器的情况下,编译器会自动提供一个公有的、无参的缺省构造器(default constructor),对于用户而言,这个构造器与其他的构造器没有任何区别。在已发行的API中常常可以看到一些被无意识实例化的类。企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该子类也可以被实例化。这样做甚至会误导用户,以为这种类是专门为了继承而设计的。然后,有一些简单的习惯用法可以确保类不可被实例化。我们只要让这个类包含私有构造器,它就不能被实例化了:[java] view plai 阅读全文
posted @ 2012-05-28 15:01 andriod2012 阅读(199) 评论(0) 推荐(0) 编辑
摘要:对于单实例模式,相信很多开发者并不陌生,然而如何更好更安全的创建单实例对象还是需要一些推敲和斟酌的,在Java中主要的创建方式有以下三种,我们分别作出解释和适当的比较。1. 将构造函数私有化,直接通过静态公有的final域字段获取单实例对象:[java] view plaincopypublicclassElvis{publicstaticfinalElvisINSTANCE=newElvis();privateElivs(){...}publicvoidleaveTheBuilding(){...}}这样的方式主要优势在于简洁高效,使用者很快就能判定当前类为单实例类,在调用时直接操作Eliv 阅读全文
posted @ 2012-05-28 15:00 andriod2012 阅读(501) 评论(0) 推荐(0) 编辑
摘要:静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。考虑用一个类表示包装食品外面显示的营养成分标签。这些标签中有几个域是必须的:每份的含量、每罐的含量以及每份的卡路里,还有超过20个可选域:总脂肪量、饱和脂肪量、转化脂肪、胆固醇、钠等等。大多数产品在某几个可选域中都会有非零的值。对于这样的类,应该用哪种构造器或者静态方法来编写呢?1. 重叠构造器模式[java] view plaincopy//Telescopingconstructorpattern-doesnotscalewell!publicclassNutritionFacts{privatefinalintser 阅读全文
posted @ 2012-05-28 14:59 andriod2012 阅读(161) 评论(0) 推荐(0) 编辑
摘要:对于类而言,为了让客户端获取它自身的一个实例,最常用的方法就是提供一个公有的构造器。类也可以提供一个公有的静态工厂方法,它只是一个返回类的实例的静态方法。下面是一个来自Boolean的简单示例。[java] view plaincopypublicstaticBooleanvalueOf(booleanb){returnb?Boolean.TRUE:Boolean.False;}静态工厂方法与构造器不同的第一大优势在于,它们有名称。静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象。静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对 阅读全文
posted @ 2012-05-28 14:03 andriod2012 阅读(454) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示