求索

Make it work, make it right, make it fast and make it open。
posts - 8, comments - 11, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2005年5月20日

几天之前就听说Eclipse官方网站要改版,今天又看到了在EclipseZone上让大家投票选首页的Skin,网站上提供了三种皮肤。每个都不错,不过我最喜欢第一个。

eclipse.org (Click on the image for a bigger version)
其他Skin:
http://www.eclipsezone.com/java/forums/t44832.html
自从我开始用Eclipse,看到的eclipse.org的页面就一直是老样子,原来内容少的时候用着还可以,现在内容多了很多,总感觉找起资料来非常费劲,有一种很乱的感觉。是该改一改了!

posted @ 2005-09-02 12:54 Java求索 阅读(667) | 评论 (0)编辑 收藏

感觉3.1好像昨天才刚刚发布,今天3.2M1就呈现在人们的面前。3.2M1在UI上的最大的改变就是启动进度条终于集成到了Splash Screen上了。
o_startup.png
而传说中的SWT.VERTICAL style Coolbars却没有出现。也许会在下一个版本中加入吧!期待中……。不过,Eclipse的UI真的是越来越漂亮了。
更多New and Noteworthy
下载

posted @ 2005-08-14 08:05 Java求索 阅读(897) | 评论 (1)编辑 收藏

我在试着使用Hyades测试项目的时候,知道了Eclipse还可以从控制台启动:
在控制台中输入
Java -XrunpiAgent -classpath ./startup.jar org.eclipse.core.launcher.Main -data ./my_workspace

其中:
-XrunpiAgent: 可以不加,这是为了启动Hyades的Agent controller用的。
-classpath ./startup.jar: 要是指定eclipse目录下startup.jar文件的位置。
-data ./workspace-new: -data常用的一个启动参数,用来指定eclipse项目文件的位置。

posted @ 2005-07-27 17:39 Java求索 阅读(737) | 评论 (1)编辑 收藏

今天写代码涉及到大量的String操作,突然间想起一些关于String与其它class的不同之处,我是我以前在一篇文章上看到的,具体出处实在记不得了,现在加上一点儿自己的理解记录下来,以作备忘。

String的特殊之处就是它可以像int等简单类型一样,使用“=”来生成一个Object,而不必用new这个关键字,为什么呢?先来看下面的代码:
import junit.framework.TestCase;

public class TestStringPool extends TestCase {

    
private String string1;
    
private String string2;

    
protected void setUp() {
        string1 
= "abc";
        string2 
= "abc";
    }


    
public void testStringPool() {
        assertTrue(string1 
== string2);
    }


    
public void testNewString() {
        string1 
= new String("abc");
        string2 
= new String("abc");
        assertFalse(
"The objects don't use the 
            string pool", string1 == string2);
    }

}

这里用到了JUnit,用来测试String pool

第一个测试,说明两个String是同一个Object,(==就是用来比较objectreference)。而第二个测试则说明两个String Object不同。

众所周知,JavaString不可改变的字符串对象。为了提高效率,JavaString类提供了串池(String pool)。正如大家所看到的那样,在第一个test中就使用了串池。当你重新声明一个String型变量为abc时,将使用串池里原来的那个abc,而不重新分配内存,也就是说,string2string1将会指向同一块内存。所以结果为true。在第二个test case中使用了普通对象的声明方式,系统将会为string1string2各分配一块内存。所以结果为false

 结论:我们比较两个String的值,最好用equals()方法,而最好不要使用==。这就避免了一些不必要的麻烦。另外,声明String的时候,最好用=,这样就可以体现String pool的作用了。

posted @ 2005-07-15 09:31 Java求索 阅读(1145) | 评论 (1)编辑 收藏

     原来一直听说wordpress很好,是用php做的。由于前几天开始接触PHP,所以今天就试着在自己pc上安装wordpress。我用的是PHP的最新版本,PHP5。刚开始我按照wordpress的readme文件一步步地安装,首先apache http server,然后PHP5,wordpress。最后修改wp-config文件里的Database设置,打开浏览器,本以为可以大功告成了。但是运行/wp-admin目录里的install.php文件,却提示我"Your PHP installation appears to be missing the MySQL which is required for WordPress." 于是我就检查mysql的DB_NAME,DB_USER,DB_PASSWORD,DB_HOST,都对啊。怎么会呢?

百思不得其解,实在没有办法了,我就一遍一遍的查PHP的文档,后来终于在FAQ里面找到了原因,原来是因为PHP5在默认情况下,不再提供mysql的支持,必须手动的设置。

方法是:在PHP.ini文件激活php_mysql.dll扩展库,此外,要将php_mysql.dll拷贝到适当的 %SYSTEMROOT% 目录中.

posted @ 2005-07-13 16:57 Java求索 阅读(1209) | 评论 (1)编辑 收藏

维护一个J2EE项目,经常需要修改client端所连接的server. 最麻烦的就是每次都需要把client里面的所有的config和properties文件里的IP地址改一遍。如果不小心忘掉几个,就会出现一些意想不到的错误。如果要避免这种麻烦的事情,可以用windows IP影射。

具体方法:

在windows安装目录修改\system32\drivers\etc\hosts:文件

在文件里加上例如这样的字段

123.456.0.1           abcde

前面一段为IP地址,后面为一个任意的server名字,可以是任意的字符串。然后,在所有的属性文件里使用这个名字。以后再想更改server,就只需要修改hosts文件就行了。

posted @ 2005-07-06 17:50 Java求索 阅读(911) | 评论 (1)编辑 收藏

JDK5.0已经release很久了,但一直没机会好好学习一下,今天可有机会了。

先来看一段代码:

public class TestDate {

    
public static void main(String[] args) {
        Date date 
= new Date();
        Object 
object = new Object();
        Timestamp stamp 
= new Timestamp(date.getTime());
        System.
out.println("date&stamp:" + date.compareTo(stamp));
        System.
out.println("stamp&date:" + stamp.compareTo(date));
        System.
out.println("date&object:" + date.compareTo(object));
    }
}


这段代码看上去很普通,但是如果用1.4和1.5分别编译就会出现不同的结果。先来说用1.4编译的情况:首先用1.4编译,编译器不会报错,如果运行的话,前面两个输出语句会分别打印“0,0”,而第三个会throw一个ClassCast exception. 因为Date不能与object比较,但是为什么能编译通过呢?察看JDK源代码就可以知道了,Date实现了Comparable接口,这个接口中的CompareTo()方法的参数就是Object。所以Date也不得不有一个以Object为参数的CompareTo()方法,但是这个方法是没有意义的,Date应该与Date比较,所以Date这个Class里面就出现了两个ComparaTo方法,一个是以Date为参数,另一个是以Object为参数,这是1.4以前,不得不采用的方法。不然Date就没法实现Comparable接口了。

JDK1.5中Generics的出现解决了这个问题,如果看1.5中Date类的源代码的话,就会发现它只有一个CompareTo()方法了,那它怎么来实现Comparable接口呢,这就是Generics的功劳了。在Date声明时,实现Comparable接口是这么写的:...Comparable...,并且Comparable接口的声明是这样的:Comparable。这个T代表Type。它可以是任何Object。Comparable的实现类只要说明T是什么具体类型就可以了。因此,Date就可以只有一个CompareTo()方法,又可以实现Comparable接口了。如果用1.5编译上面的Code的话,就会发现这段Code是不能编译通过的,编译器会提示“Severity Description Resource In Folder Location Creation Time 2 The method compareTo(Date) in the type Date is not applicable for the arguments (Object)”,这就避免了1.4中出现的问题。我想如果使用了1.5以后咱们编写代码时,出现ClassCastException的几率就会很小了,因为编译器会替你发现这样的错误。

这就是Generics的好处了。

但是还有一点值得考虑,如果我们去掉错误的那一行代码,在1.5中编译然后运行,会发现还有地方与1.4的不同。第一行输出语句会打印1,而不是0,这说明1.5认为具有相同时间的timestamp和date是不同的,但1.4认为它们相同。我有看了一下1.5和1.4的源代码,发现它们CompareTo(Date ...)的实现方法是不一样的,可能问题就出现在这里。我没有试着去读它的代码,等有时间,一定好好研究一下。

最后,还有一个问题,如果用1.5编译并运行,会throw一个ClassCastException,而用1.4则不会出现这个问题。我想这是因为timestamp继承了Date的CompareTo()方法,所以一个timestamp就可以与Date比较了,但是应用了Generics以后这种情况是不允许的,而且代码也没有特殊处理,因此就会有Exception了。看来Generics也会带来一些其他的问题。

我想这种情况是可以避免的,原则就是只比较具有相同类型的两个对象,而不与其父类或子类比较。如果必须比较的话,也应该用相应的方法转化为相同的类,再进行比较。

posted @ 2005-07-06 15:57 Java求索 阅读(915) | 评论 (5)编辑 收藏

     摘要: iBatis是一个简单易学的ORM实现,相对于现在比较流行的Hibernate等实现,它的特点就是简单,没有一些复杂的不太实用的功能,而且它的速度也非常快的。这就是我选择它的理由。iBatis的具体介绍,可以参考www.ibatis.com,并且网站上还提供中文文档,学习起来真的很方便。  阅读全文

posted @ 2005-05-20 09:32 Java求索 阅读(592) | 评论 (1)编辑 收藏