my blog
2006-11-11 21:28:40
Overload和Override
在Java Language Specification中,一个方法的特征仅包括方法名、参数类型与个数,而不包括方法的返回类型、参数名字以及所抛出的异常。在Java编译器检查方法的重载(Overload)时,仅会根据方法特征来判断是否是重载。但是在检查方法重写(Override)时,会进一步检查父类与子类中两个方法的返回类型及抛出的异常是否相同。
下面仔细讨论一下:
关于重载

2006-7-3 23:19:11
Collection Framework与hashing算法
Java Doc里对于Collection.contains(Object o)这个方法的说明是:Returns true if this set contains the specified element. More formally, returns true if and only if this set contains an element e such that (o==null ? e==null : o.equals(e))。因此,如果需要向一个集合中添加一个自定义的类对象,又想让这个对象能以自定义的方式被找到,就需要overwrite该类的equals()方法。同时,《Thinking in Java》里也说,单纯的overwrite equals()方法是不行的,需要同时overwrite hashCode()方法,返回一个自定义的哈希值。但对为什么这么做一直没有给出解释。
我做了一个小测试,结果是对于像ArrayList这种Collection,当调用它的contains()/get()/remove()等方法时,对于元素对象,只是它的equals()方法被回调以判断其是否与传入的目标对象相一致。但对于像HashSet/HashMap这种包含哈希算法的Collection,必须同时满足equals()方法返回true,且hashCode()方法返回的值相同。
一开始,我只以为hashCode()只在取对象的时候有用处,没想到它还有更深一层的意思。

2006-6-21 11:55:05
陪着我一直到世界的尽头
周传雄93年的一首情歌,竟然让我翻来覆去听了这么多遍,而本来我是比较抵制国产音乐的。小刚也曾经是在我的抵制范围之内,可能是因为那个《黄昏》《我的心太乱》等等被播得太滥的缘故吧。
一年前,桃子还和我说过,她听了小刚的歌,感觉很好听很好听,我当时只是嘿嘿的笑了一声。而现如今我也被他一首13年前的歌迷得一塌糊涂。
我一直觉得,一首歌里只要有五秒钟的美妙旋律就足够了,Beatles和Nirvana都是这个理念的“支持者”,他们的音乐简单直接,虽然重复但不令人厌烦。这首《陪着我一直到世界的尽头》也是这样,副歌部分简单悦耳,小刚深情的嗓音一遍一遍地渲染,让整首歌充满了“经典”的一切特质。

2006-6-4 1:52:27
返传球多分派模式
这个鬼东西竟然让我晕了十五分钟,还好我找了张废纸,自己比划了一下,算是弄明白了,阎宏在《Java与模式》里举的那个例子太绕了!为防止两天以后我又给忘了,特在此记录一下。
背景是这样的,Java的多态机制只支持对一个对象的多态,因此当一个逻辑需要两个类的实例的内部信息来决定的时候,多态就没用了。
说的具体点,有两个接口:IFA和IFB,IFA有两个继承实体类ImplA1和ImplA2,IFB有两个继承实体类ImplB1和ImpleB2。在IFA中定义了一个方法process(IFB b); 显然,这个方法需要在ImplA1和ImplA2中加以实现。假定这个方法需要完成的逻辑涉及这四个实体类的内部状态,处理起来就有点麻烦了。比如ImplA1的方法实现可能就得这么写:

2006-5-29 17:42:52
Log4j vs InitialContext
这是两个八杆子都打不到一起的概念,今天竟然被本人不幸拉到了一起。Log4j算是Java里最好的日志系统了,InitialContext是做JNDI查找之前必须new的东东,一个是logging,一个是naming。
但是……,我很正常很正常的代码,用Log4j的DOMConfigurator.configure("");读取了配置信息,工作正常。等把JMS的一些代码放进来以后,所有的log都没了~~~~无敌了!!设断点Debug,log.info()被意料之中的调用到了,可就是啥输出都没有,啥错误信息也没有~~把新旧代码对比了一下,差异只在引入了JMS的代码,没辙,只能在这些新引入的代码之前设断点,然后一步一步step over这些新加的代码,每step一步,就在调试器里手工输入log.info(),看控制台有没有输出。一开始还是有的,只在执行了new InitialContext()之后,就哑巴了。所以,肯定是它捣的鬼!!问题是,为什么new InitialContext()会把Log4j已经读好的配置给弄没了呢?难到Log4j里面也用到InitialContext了??


2006-5-26 15:14:42
第二次去电台做客
第一次还是高考完,被承德电台拉去吹牛呢,呵呵。这次是被小E拉去她们的http://www.qmoon.net/,和唐公子山呼海吹了五十分钟,除了播音室有点热之外,不亦乐乎呀!

留个链接做纪念,公众网的:http://pub.qmoon.net/download/20060526/20060526131841.mp3

2006-5-15 21:29:01
Socket与ServerSocket
ServerSocket利用阻塞的accept()方法等待客户端连接,一旦有连接,该方法会返回一个Socket对象,这些都没问题。问题就出在如果客户端调用Socket.close()方法关闭了TCP连接,服务器端竟然不知道!(难道地球人都知道这回事,就我大惊小怪?)服务器端的Socket.isConnected()返回true,Socket.isClosed()返回false,所以根本不能指望这两个方法来判断连接是否还存在。
看了看目前的编程书,大体分成两种方案,一种是客户端显式地通知服务器端关闭连接,比如发一个“close”字符串什么;另一种就是依靠服务器端Socket.getInputStream().read(byte [])方法,这个方法如果返回-1,就表示输入流到了EOF,就可以关闭Socket了。
可是我抓了包,客户端已经发送了<FIN,ACK>,服务器端也回了<ACK>,也就是说TCP/IP协议栈层面已经知道连接断开了,为什么API层面就不知道呢??这就得问SUN的工程师们了吧。

2006-5-8 13:10:22
见家长~~
媳妇见公婆真是相当刺激的事情啊~~
略去乱七八糟的礼节不讲,还是照了很多漂亮照片滴,春天的避暑山庄也挺漂亮,只是对大光圈的标头还是有点轻视了,没想到景深有那么浅,稍测不准,脸就虚了;用棒槌山当背景的时候,竟然把棒槌给虚没了,搞得只能用F/3.5,不敢用F/1.8了。
<河北承德避暑山庄>

2006-4-17 13:49:30
成百里半九十啊!!
这个鬼HA系统终于搞得有眉目了,性能测试也开始了,老天保佑不会出大问题吧!
还有最后一个MM4模块有异常,谁了解开源的JAMES怎么配置?我不是痛苦,而是相当的痛苦啊!

2006-4-10 10:14:50
灰头土脸地毕业了
可恶的沙尘暴啊,然后就是乱七八糟的离校手续,还好拍了张硕士服照:)
<北京邮电大学 硕士毕业>