Java堂  


JDK 5.0的新功能,你学会多少?

Filed under: JavaPlateform — Jet @ 12:54 上午
Tags:
原文出处: JDK 5.0的新功能,你学会多少?
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

JDK 5.0 到现在发布也一年多了,今天无意中翻了下一本名为《Java JDK 5.0 学习笔记》的书,发现书里面介绍的东西自己不知道的还真不少。比如我就看到一个名为 StringBuilder 的类就是在 5.0 中新增加的,在 JDK 中有如下解释:

一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

其他比如枚举类型、范型等等之前在也粗略地看过一些文章,但是还真没有仔细研究过。看来真的要好好抽时间学习一下 JDK 5.0 的新功能了。

遇到一个JDK5.0 Update7 以前的bug

Filed under: JavaPlateform — Jet @ 4:44 下午
Tags: ,
原文出处: 遇到一个JDK5.0 Update7 以前的bug
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

一直都使用的是JDK5.0 Update6这个版本,中间也懒得升级。最近在程序的日志里面发现很多这样一个Exception:

java.lang.IllegalArgumentException
at sun.net.www.ParseUtil.decode(ParseUtil.java:179)
at sun.net.www.ParseUtil.toURI(ParseUtil.java:253)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:738)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:669)

查了下JDK,IllegalArgumentException是由于参数传递错误而产生的,但是查遍了程序并没有发现这个错误。于是Google了一下,竟然在sun的官方bug站上发现了,原来是一个bug。比如以下代码如果运行在JDK5.0 Update7以前的版本中就会产生上面的 IllegalArgumentException。

  1. class Bug { 
  2.     public static void main(String[] args) throws Exception { 
  3.         // 如果网址中出现 % 就会产生 IllegalArgumentException
  4.         java.net.URL url = new java.net.URL("http://www.example.com/%93%fa/");
  5.         java.net.URLConnection uc = url.openConnection();
  6.         uc.connect();
  7.     } 
  8. }

这个bug存在于JDK5.0 Update7以前的版本,于是下载了最新的JDK重新运行就没有错误了。

参考资料:
Bug ID: 6274990 REGRESSION: URLConnection.connect() throws Exception with non UTF-8 char
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6274990