易截截图软件、单文件、免安装、纯绿色、仅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代码连接到oracle数据库

package com.deng.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestOracle {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriv ......

Java中的访问权限控制

Java中的访问权限控制符有四个.
作用域_____当前类____同一package___子孙类____其他package
public______√___________√__________√___________√
protected___√___________√__________√___________×
friendly_____√___________√__________×________ ......

使用 ANT 开发 Java 程序


使用 ANT 开发 Java 程序
常听大家讨论哪个 Java 开发工具比较好,JBuilder,Virtual Cafe ?
今天介绍一个简单易用的 Java 开发,编译,集成,测试工具:Jakarta Ant
他被称为 java 环境里的 make (make 在 C 程序开发 ......

对JAVA简单的理解

这几天在看JAVA,图书馆借的一本JAVA开发大全,挺厚的一本,内容很多,但不深。包括JAVA的基本语法、线程编程、桌面程序、主要类库、以及后面JSP部分。看了5天了,刚把J线程看完。由于之前学过C++,所以前面基础数据类型,基本语法等等只着重看看JAVA独特的地方。以下是我个人理解总结的一些JAVA与C/C++不同地方及自己的对J ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号