易截截图软件、单文件、免安装、纯绿色、仅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代码连接到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反射机制: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 static GC 回收问题

1)静态变量本身不会被回收
2)静态变量所引用的对象是可以回收的。
第一点大家应该没有疑问,下面我证明第2点:
看下面的例子及注释。自己可以运行试一下, 注意加上-verbose:gc参数
java -verbose:gc TestStaticGc
// TestStaticGc.java
public class TestStaticGc {
 & ......

使用 ANT 开发 Java 程序


使用 ANT 开发 Java 程序
常听大家讨论哪个 Java 开发工具比较好,JBuilder,Virtual Cafe ?
今天介绍一个简单易用的 Java 开发,编译,集成,测试工具:Jakarta Ant
他被称为 java 环境里的 make (make 在 C 程序开发 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号