易截截图软件、单文件、免安装、纯绿色、仅160KB

Effective Java 学习笔记(1)

通常情况下,我们在写一个类时,一般会赋予它一个或几个public的构造函数,让外部程序能够创建对象. 然而,在effective java 中,从另一个角度告诫我们在使用public的构造函数前,先考虑用public 的静态函数来创建对象. 
其优点如下:
1. 一个静态的工厂函数,可以取不同的名字. 而构造函数的名字只能与类同名. 
  一个API的设计中,一个好懂的名字可以免去使用者在文档中查找其使用方法的麻烦. 
   如: 假如有个类叫Human,假如它有个构造函数 Human( int sex) ,根据参数来创建不同的对象. 用户就可能去查文档,sex=1 or sex=0 分别代表什么. 但如果我们给它加两个静态的工厂函数,Human.getMan() 和 Human.getWoman() 用户一看名字就知道是怎么用.
   另外,正因为静态工厂函数可以取不同的名字,可以免去构造函数限定参数的烦恼.
   例子同上,如我们要有一个根据身高来创建一个Human对象,于是我们写有Human(int height), 后来,我们又想根据年纪来创建一个对象,于是我们又有Human(int age), 很明显,由于函数签名的限制,我们只能选择其中一个构造函数.但使用静态工厂方法就没有这个烦恼. 我们可以有Human.getInstanceByHeight(int height) 也可以有 Human.getInstanceByAge(int age),他们可以很合谐的在一起工作.
2. 使用静态工厂函数,不必像构造函数那样每次都创建对象,可以在很大程度上节约资源,特别是有些类仅有有限个数的对象时.
    
如 我们有Month这么一个类, 按照原来的方法,我们可能有Month(int mon), 于是,每次调用一个构造函数,就会创建一个Month对象,其结果是内存中很可能存在大于12个Month对象. 然而,假如,我们事先定义12个静态对象,从Jan到Dec,然后给一个Month.getMonth(int mon)这么一个静态工厂方法, 在函数中根据数字返回其中一个静态对象,这样,不管程序怎么运行,内存中始终只有12个Month对象. 
这样做还有一个好处就是, 用户可以直接使用== 比较两个对象是否相等,而不用equal方法.
3. 一个静态工厂函数,返回的对象可以是这个类的对象,也可以是其子类的对象,增加了设计的灵活性。在实际运用中,可以得到几个好处。
  其一,可以隐藏一些类,减少对外公布的API数,精简接口。这句话可以这样理解。比如设计一个框架,里面包含有20个类,但实际上,我们可以通过使用静态工厂函数隐藏一些内部实现,使用户不用知道全部的类及使用方法,使框架易用。


相关文档:

java byte与char互转原理 转

java byte与char互转原理-转
一、字节和unicode
Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。因此Java要对这些字节流经行转化。 char是unicode的,而byte是字节。Java中 byte/char互转的函数在sun.io的包中间有。其中ByteToCharConverter类是中调度,可以用来告诉你, ......

Java文件对象创建目录和文件

   在java中貌似不能同时创建目录和文件,需要分布创建,即不能在创建目录的时候,同时创建该目录下的文件,如果要创建的话,需要分两步,下边是创建的代码Java代码 try {              String path = "D:/test ......

Java反射机制:Constructor!

import org.junit.Test;
public class ConstructorTest {
@Test @SuppressWarnings("unchecked")
public void testConstructor(){
try {
Class clazz = Class.forName("cn.vicky.utils.User");
Method method = clazz.getDeclaredMethod("getName");
Constructor<? extends Live> constructor = ......

JAVA中的反射机制详解

JAVA反射机制
    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属 ......

Java 复习笔记_第3天


数据结构和算法
冒泡:每次比较都可找出最大或最小的,有序的在最右边
选择排序:有序的在最左边
插入排序:速度比冒泡快一倍,比选择也快。
    
递归
      
调用自身
      
汉诺塔问题:
/**
* @汉诺塔的问题
*/ ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号