Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Application Server  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 实践 Eclipse 将这些用法和技巧应用到功能众多的世界级 IDE
simbapu





发贴: 19
积分: 1
于 2005-07-18 20:02 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
作者:Kevin Jones
来自:http://dev2dev.bea.com.cn

在本文中,我将介绍一些高效使用 Eclipse 的技巧。我认为这些技巧在日常工作中非常有用。有些是使用技巧,有些是技术提示,我相信您也会发现它们非常有用。

  以前(实际上现在也是)我不喜欢 Eclipse 是因为它缺少内建的 XML 编辑器,其他 IDE 提供了功能强大的编辑器,不仅可以突出语法结构,还有完整的 XML 语句。 Eclipse 实际上也有 XML 编辑器,只是换了个名字,叫 Ant 编辑器。尽管 Ant 编辑器在编辑一般文档不是很完美,但是这已经足够用了。

  Ant 在作为一般编辑器时,需要选择 Windows > Preferences ,打开 Preferences 对话框,展开树的 Workbench 部分,然后选择 File Associations (参见图 1 ),点击 File Types 区域的 Add 按钮,然后输入 *.xml 。点击靠近 Associated Editors 区域的 Add 按钮,选择 Ant 编辑器,点 OK 。现在,只要双击某个 XML 文件,都会在 Ant 编辑器中打开它以供编辑。


图 1. 设置 首选参数

  通过将带有 XML 扩展的文件与 Preferences 对话框的 Associated Editors 区域中 Ant 编辑器关联起来,可以把 Ant 编辑器设置成一般 XML 编辑器。

模板和样式

  在同一个 Preferences 对话框中,打开树的 Java 部分,在 Editor 区域下面,会看见 Templates 区域。它包含了可以在代码中使用的编码模板。举一个使用模板的例子,创建一个新的 Java 类并在编辑器中打开,输入 main 并按 Ctrl-Spacebar 。应该可以看见一个弹出窗口(参见图 2 );选择第一个主程序,就可输入主程序的代码。


图 2. 弹出模板

  创建一个新的 Java 类并在编辑器中打开之后,就会看见一个弹出窗口,这里可以输入代码。

  然而,如果仔细观察模板,您会发现它不仅仅可以插入静态代码。模板是活的!在刚才创建的主程序里,输入 for 并按 Ctrl-Spacebar ,选择数组的 for 循环。 for 循环将会加入到代码中,光标停留在变量 i 上。如果改变变量名,代码中相应位置都会改变。如果按 Tab 键,将转到数组引用,如果不止一个数组,将会看到一个可循环的数组列表。最后光标会停留在循环体上。

  有许多类似的模板,可以通过加入自己的代码对它们进行扩展。举个例子,我最喜欢的模板是 sysout 和 syserr 。但现在我大部分工作在 JDK 5.0 中完成,已经开始使用 System.out.printf ,并想把它当成一个模板用。最简便的方法是编辑一个现有模板。我把 sysout 模板拷贝到 printf ,主程序如下:

System.out.printf(
"{word_selection}{}\n");
{cursor}
  保存模板。在代码中输入 printf ,然后按 Ctrl-Spacebar 就可以在您自己的代码中插入模板。

  如果您像我一样喜欢编写代码而不是文档,用 Javadoc 就可轻松完成。 Eclipse 也能如此。简单地把光标移到程序或类定义前,输入 /** 按 Enter ,会出现一个如下的 Javadoc 大纲:

/**
*
* @param proxy
*/
ListenThread(HttpProxy proxy)
{
// co

  光标到位后就可以开始编辑文件了。

  代码样式是编程人员中比较有争议的一个问题。比如,把花括号放在哪?是否对条件语句进行缩进? while 关键字应该放在哪?当然我们知道都是正确的,这里只是讨论样式问题。如果您有自己的样式或个人偏好, Eclipse 会帮助保证所有代码的样式。

  选择 Windows > Preferences ,再选择 Java > Code Style > Formatter 。 在右边的面板选择 New ,创建一组新的首选参数,起个名,然后更改首选参数,让其符合自己的要求。最有可能引起争议的问题可能是花括号的位置,但您还可以控制换行、空白和注释等。还可以导入和导出配置文件,这对于团队工作尤为有用。

  一旦选择了首选参数,就可以打开 Java 文件,选择 Source > Format (Ctrl-Shift-F) 。还可以一次重新格式化多个文件,在软件包浏览器中选择要重新格式化的文件组,右键单击,然后选择 Source > Format 。

重构

  Eclipse 的一个超强功能是支持重构。这种支持需要一整篇文章来深入讨论,由于它太重要了,因此这里值得提一下。 Martin Fowler 在一本相关专著的前言中解释道,“重构是一个改变软件系统的过程,它不改变代码的外部行为,但改进了其内容结构”。重构时必须进行单元测试(参见下一个提示);否则,您如何知道代码的外部行为没有改变呢?

  Eclipse 提供了几种重构,在此仅举两例以帮助理解其过程。

byte[] decryptKey(
byte[] encryptedKeyBytes)
throws
NoSuchAlgorithmException,
InvalidKeySpecException,
NoSuchPaddingException,
InvalidKeyException,
BadPaddingException,
IllegalBlockSizeException,
InvalidAlgorithmParameter
Exception
{
String alg =
"PBEWithMD5AndDES";

PBEParameterSpec spe =
createPBEParameterSpec();

KeySpec ks = new PBEKeySpec(
passphrase.toCharArray());
SecretKeyFactory skf =
SecretKeyFactory.
getInstance(alg);
SecretKey sk = skf.
generateSecret(ks);
Cipher cipher = Cipher.
getInstance(alg);
cipher.init(
Cipher.DECRYPT_MODE, sk,
spe);

return cipher.doFinal(
encryptedKeyBytes);
}

and

byte[] encryptKey() throws
NoSuchAlgorithmException,
InvalidKeySpecException,
NoSuchPaddingException,
InvalidKeyException,
BadPaddingException,
IllegalBlockSizeException,
InvalidAlgorithmParameter
Exception
{
String alg =
"PBEWithMD5AndDES";

PBEParameterSpec spe =
createPBEParameterSpec();

KeySpec ks = new PBEKeySpec(
passphrase.toCharArray());
SecretKeyFactory skf =
SecretKeyFactory.
getInstance(alg);
SecretKey sk = skf.
generateSecret(ks);
Cipher encrypt = Cipher.
getInstance(alg);
encrypt.init(
Cipher.ENCRYPT_MODE, sk,
spe);
return encrypt.doFinal(
secret.getEncoded());
}

  这些方法使用密钥来加密或解密数据。它们非常相似,实际上有一块代码是完全一样的:就是生成密钥的代码。

  有一个叫作 Extract Method 的重构,它把一段代码嵌入在它本身。只需选中代码块,然后选择 Refactor > Extract Method (Alt-Shift-M) 。在 Extract Method 对话框(参见图 3 )中,输入方法的名字,保证参数名称是您想要的。选择 OK 就会得到新方法。


图 3. 抽取

  在 Extract Method 对话框中输入抽取方法的名称,并保证参数名称是您想要的。

private SecretKey createKey(
String algorithm) throws
NoSuchAlgorithmException,
InvalidKeySpecException
{
KeySpec ks = new PBEKeySpec(
passphrase.toCharArray());
SecretKeyFactory skf =
SecretKeyFactory.
getInstance(algorithm);
SecretKey sk = skf.
generateSecret(ks);
return sk;
}

  现在可以在所有其他地方替换方法代码。前两个程序 encryptKey() 和 decrytptKey() 是属于从同一基类扩展而来的不同类,所以 createKey() 应该是基类的一个方法。输入另一个重构: Pull Up 。可以使用这个重构来将方法移到类级别上。如果用 createKey() 执行,保护级别也会从私有( private )更改为受保护的( protected ),从而允许方法在派生类中被调用。最终代码如下:

protected SecretKey createKey(
String algorithm) throws
NoSuchAlgorithmException,
InvalidKeySpecException
{
KeySpec ks = new PBEKeySpec(
passphrase.toCharArray());
SecretKeyFactory skf =
SecretKeyFactory.
getInstance(algorithm);
SecretKey sk = skf.
generateSecret(ks);
return sk;
}

  更改后,返回单元测试,确保不会破坏什么。

在 Ant 中使用 JUnit

  我提到过,如果要进行重构,必须有单元测试,这样才能确保不会破坏代码。 Eclipse 很好地支持 JUnit 。但我更愿意用 Ant 来构建和测试代码,在 Ant 中使用 JUnit 测试。如果您加载一个 Ant 构建文件到 Eclipse 中,运行 Junit Ant 任务,应该会看到:

BUILD FAILED:
D:\home\kevinj\Java\Security\
tests.xml:94: Could not create
task or type of type: junit.

  该信息表明 Ant 没有找到任务或任务所依靠的类。 Ant 试图加载 Junit JAR 文件。当在 IDE 外部使用 Ant 时,应该把 junit.jar 放在 %ANT_HOME%/lib 文件夹。使用 Eclipse 时该任务无法工作,因为它使用自身版本的 Ant 。所以 junit.jar 必须放在 Eclipse 的 Ant 文件夹中,即 %ECLIPSE_HOME%/plugins/org.apache.ant_1.6.2/lib (很显然,不同版本的 Eclipse 会有不同版本的 Ant )。

  Eclipse 是一个功能众多的世界级 IDE 。在此我们只是做简单了解。

关于作者

  Kevin Jones 是一位开发人员,主要从事 Java 编程的研究和教学,以及研究 HTTP 和 XML 。他生活在英国,在 Developmentor 公司工作,该公司是一家在美国和欧洲都设有办事处的培训机构,主要从事有关 Java 和 Microsoft 平台的技术培训。 Kevin 的电子邮件是 mailto:kevinj@develop.com。

原文出处

http://www.fawcette.com/javapro/2005_03/magazine/columns/pluggedin/



MyBlog: http://lionapu.blogcn.com

华软网源码书籍下载中心,10G源码、书籍教程免费下载!

话题树型展开
人气 标题 作者 字数 发贴时间
8128 实践 Eclipse 将这些用法和技巧应用到功能众多的世界级 IDE simbapu 6044 2005-07-18 20:02

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923