《Effective java中文第2版》读书笔记1
第2条:遇到多个构造器参数时要考虑用构建器
某个类的属性较多,初始化的时候又有一些是必须初始化的,而且类型有形同,
比如new Contact("姓名","显示名","手机号","飞信号","所在地",年龄,性别);
前5个属性是String 类型,后2个是int类型,在填写构造方法的时候很容易填写错位,或者少填写,或者颠倒了属性,
如下方法可以减少这种错误发生的几率,
Contact contact = new Contact();
contact.setName("姓名");
contact.setDisplayName("显示名");
contact.setPhoneNumber("手机号");
contact.setFetionNumber("飞信号");
contact.setHometown("所在地");
contact.setAge(23);
contact.setGender(0);
这么写是通常的做法,看起来还不够清晰,我们在每个set方法里retrun一个Contact类型,比如
public Contact setName(String name)
{
this.name = name;
return this;
}
这样上面的构造Contact的代码就可以这么写了
Contact contact = new Contact() .setName("姓名")
.setDisplayName("显示名")
.setPhoneNumber("手机号")
.setFetionNumber("飞信号")
.setHometown("所在地")
.setAge(23)
.setGender(0);
这样写是不是更清爽了!属性不会再填写错误了!而且阅读代码的时候也一目了然,都给Contact初始化了那些属性,和属性的值是什么!
第3条:用私有构造器或者枚举类型强化Singleton属性
建议使用如下方法创建单例类
public final class Elvis
{
private static Elvis INSTANCE;
private Elvis(){};
synchronized public static Elvis getInstance()
{
if( INSTANCE == null )
{
INSTANCE = new Elvis();
}
return INSTANCE;
}
//执行其他操作
private Object readResolve()
{
return INSTANCE;
}
}
这种构建方法好处,组成类的成员声明很清楚地表明了这个类是个Singleton,并且也解决了INSTANCE的同步问题,
没有暴露共有的INSTANCE变量,这样更有力于隐藏类的内部实现,
另外,改做法也很容易就可以修改成非单例模式,加上的readResolve方法可以保证反序列化时也是同一个对象。
第4条:通过私有构造器强化不可实例化的能力
我们软件中常用的常量集(Constants),工具集(Tool,Utility)都应该是不可实例化的类,那么他们应该如下构建
public final class
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
Sun公司一名员工自己创作的歌,关于Java EE 5,虽然不怎么好听,但歌词很有意思,程序员业余生活也可以这么丰富,羡慕!
Ladies and gentlemen, this is Java EE 5!
One, two, three, four, five
There’s a technology I use day and night
For my application with a web frontend
They told me to use .Net
......
23.编程实现序列化的Student(sno,sname)对象在网络上的传输
package com.softeem.demo;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
class Student implem ......
众所周知,String是由字符组成的串,在程序中使用频率很高。Java中的String是一个类,而并非基本数据类型。 不过她却不是普通的类哦!!!
【镜头1】 String对象的创建
1、关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:
& ......
//本程序连接的是sql server 2005,与连接sql server 2000有点不同:driverName和URL都不同
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class create{
public void getConnection() th ......