lzzhaohui

2006年7月13日 #

将Java的class文件转为EXE文件的八种方法

                               将Java的class文件转为EXE文件的八种方法
我对编程一窍不通,搜索了下看怎么编译成exe文件.

于是发现了本文.其实,下面那个老兄回的更精彩.

将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET) 
1. 从www.towerj.com获得一个TowerJ编译器,该编译器可以将你的CLASS文件 
编译成EXE文件。 
2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以 
从微软的网站免费下载,地址如下: 
http://www.microsoft.com/java/download/dl_sdk40.htm 
jexegen的语法如下: 
jexegen /OUT:exe_file_name 
/MAIN:main_class_name main_class_file_name.class 
[and other classes] 
3. Visual Cafe提供了一个能够创建EXE文件的本地编译器。你需要安装该光盘 
上提供的EXE组件。 
4. 使用InstallAnywhere创建安装盘。 
5. 使用IBM AlphaWorks提供的一个高性能Java编译器,该编译器可以从下面的 
地址获得: 
http://www.alphaworks.ibm.com/tech/hpc 
6. JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个 
测试版本: 
http://www.excelsior-usa.com/jet.html 
7. Instantiations公司的JOVE 
http://www.instantiations.com/jove/...ejovesystem.htm 
JOVE公司合并了以前的SuperCede,一个优秀的本地编译器,现在SuperCede 
已经不复存在了。 
8. JToEXE 
Bravo Zulu Consulting, Inc开发的一款本地编译器,本来可以从该公司的 
网页上免费下载的,不过目前在该公司的主页上找不到了

Feedback回道:
# re: 将Java的class文件转为EXE文件的八种方法  
几种java转exe的工具,进行一下比较,谈谈自己的看法:

1. 从www.towerj.com获得一个TowerJ编译器,该编译器可以将你的CLASS文件编译成EXE文件。
注:现在已经找不到,不提供了,被人家收购了。

2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以从微软的网站免费下载,地址如下:
http://www.microsoft.com/java/download/dl_sdk40.htm

jexegen的语法如下:

jexegen /OUT:exe_file_name
/MAIN:main_class_name main_class_file_name.class
[and other classes]

注:没有试过

3. Visual Cafe提供了一个能够创建EXE文件的本地编译器。你需要安装该光盘上提供的EXE组件。
注:没有试过

4. 使用InstallAnywhere创建安装盘。
注:很不错的工具。
但就是要>8M(带jre),还有一种是>1M的(不带jre)。
但是它可以编译成各种平台上可以使用的exe程序。

5. 使用IBM AlphaWorks提供的一个高性能Java编译器,该编译器可以从下面的地址获得:
http://www.alphaworks.ibm.com/tech/hpc

注:没有试过

6. JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个测试版本:
http://www.excelsior-usa.com/jet.html

注:不喜欢。
编译好的程序还是jre的,听说正版的可以不能jre。安装好还要编译,我用了30分钟。

7. Instantiations公司的JOVE
http://www.instantiations.com/jove/...ejovesystem.htm
JOVE公司合并了以前的SuperCede,一个优秀的本地编译器,现在SuperCede已经不复存在了。

注:太烦了,老是出来一个对话框
用过,会出来一个对话框,表示这是jove公司的产品。

8. JToEXE
Bravo Zulu Consulting, Inc开发的一款本地编译器,本来可以从该公司的网页上免费下载的,不过目前在该公司的主页上找不到了。
公司主页http://www.bravozulu.com/
下面这个FTP上曾经有过这个软件,不知道现在是不是还在:
ftp://race.dlut.edu.cn/pub/java/tools/jet

注:很烦了,老是出来一个对话框,但是没有想到我找到了crack,在google上找到。
现在去掉了那个对话框后,我很喜欢这个工具,虽然它需要jre,但是文件只有100多K,很好哦。

9.Exe4j
很不错

10.jbuilder
这个工具不用多讲了,在jbuilder6.0以前的(包括6.0),是不能生成exe文件的,所以可以用如下的方法实现。这可以人家高手想出来的,我只是帮着宣传一下。
还有jbuilder7.0开始都可以生成exe文件。

这个是Borland不公开的使用技巧,能够通过JBuilder来制作exe文件来启动Java文件。
JBuilder并不支持本地编译机制。但是有一个隐藏的技巧可以让你从可执行文件来启动Java程序,可以出现或者不出现console窗口。想做到这些,需要JBuilder的bin目录下的这些文件:
JBuilder.exe
JBuilderW.exe (可选)
JBuilder.config
jdk.config
JavaLauncher.dll
"JBuilder.exe"是一个通用的可执行外壳文件,用以启动Java程序,"JBuilderW.exe"好像是javaw.exe一样,它把"JBuilder.exe"包装起来,但是运行时候不显示那个console的窗口。使用这些文件的关键是文件名。"JBuilder.exe"查找一个文件叫"JBuilder.config"的配置文件,里面包含了运行Java程序的必须信息。同样的"JBuilderW.exe"查找"JBuilder.exe"来启动不带Console窗口的Java程序。如果把JBuilder.exe重命名为"foo
.exe",那"foo.exe"将去寻找"foo.config"配置文件,同样"JBuilderW.exe"被重命名为"fooW.exe",它会去寻找"foo.exe"文件。
说到这里,聪明的读者应该猜到怎样利用JBuilder.exe来启动应用程序了。只要把JBuilder.exe,JBuilerW.exe,JBuilder.config改名成相应的文件名,在JBuilder.config里面指定主类和类路径,就能够通过执行JBuilder.exe(或者被改名后的exe文件)来启动Java应用程序了。下面是用本机为例。
Borland JBuilder 5被安装在E:\jbuilder5\目录下,在E:\jbuilder5\bin\下建立一个temp目录,然后把JBuilder.exe,JBuilder.config,JavaLauncher.dll,jdk.config四个文件拷贝到E:\jbuilder5\bin\temp\目录下,然后在这个目录下建立一个hello目录,在这个目录下生成一个hello.java文件,即E:\jbuilder5\bin\temp\hello\hello.java文件,
//hello.java/
package hello;
public class hello{
public static void main(String s[]){
System.out.println("Hello, Exe file!");
}
}
编译成class文件,然后打开Jbuilder.config文件,作相应的修改:
在JBuilder.config里面找到下面两行
# Start JBuilder using the its main class
mainclass com.borland.jbuilder.JBuilder
修改为
# Start JBuilder using the its main class
mainclass hello.hello
addpath E:/jbuilder5/bin/temp/
addpath命令是把目录加入类路径中,这个命令和其它config里面可以识别的命令可以在JBuilder/bin目录下的config_readme.txt里面找到详细说明。
然后将jdk.config里面的javapath修改成相对的路径,例如原来是
javapath ../jdk1.3/bin/java
修改成
javapath ../../jdk1.3/bin/java
最后
将JBuilder.exe,JBuilder.config修改成所需要的文件名,例如foo.exe和foo.config文件。
现在执行foo.exe文件
至此,通过修改JBuilder来使用exe文件启动自己的Java应用程序已经完成了。
但是好玩的地方并不在这个地方,下面的小技巧可能更有趣,将Jar文件打包进入exe文件!
假设利用上面的文件,生成hello.jar包,
jar cvf hello.jar hello\*.class
然后将jar包附加到JBuilder.exe后面去,
copy /b ..\JBuilder.exe+hello.jar foo.exe
在foo.config(JBuilder.config)文件里面把前面加入的类路径去掉,并加入下面的路径:
addpath E:/jbuilder5/bin/temp/foo.exe
然后执行,foo.exe
看到了么?一个含jar包的exe文件被执行了!
这个过程的大致原理是:exe文件的重要信息都在文件头部,所以把乱七八糟的东西放exe文件尾部是不要紧的;而jar/zip文件的重要信息是在文件尾部的,这样它们两不相干,能够容易的被执行。
请注意:读者如果使用这个功能,得自己承担可能带来的风险,因为Borland对这个功能不提供官方的支持!

posted @ 2006-07-13 20:48 啊辉 阅读(613) | 评论 (0)编辑 收藏

Java学习之路:不走弯路,就是捷径

Java学习之路:不走弯路,就是捷径
  在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于"如何学习编程?JAVA该如何学习?"。类似的问题回答多了,难免会感觉厌烦,就萌生了写下本文的想法。到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《JAVA学习之路》。拜读过台湾蔡学镛先生的《JAVA夜未眠》,有些文章如《JAVA学习之道》等让我们确实有共鸣,本文题目也由此而来。
  软件开发之路是充满荆棘与挑战之路,也是充满希望之路。JAVA学习也是如此,没有捷径可走。梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的。每天仰天大叫"天神啊,请赐给我一本葵花宝典吧",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了"东方不败",倒是成"西方失败"的几率高一点。
  "不走弯路,就是捷径",佛经说的不无道理。
  1.如何学习程序设计?
  JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。
  1.1 培养兴趣
  兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个"食利阶层"。你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。
  1.2 慎选程序设计语言
  男怕入错行,女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。
  如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。如果你对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开发领域。如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或.NET,甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉。总之,你需要根据自己的特点来选择合适你的编程语言。
  1.3 要脚踏实地,快餐式的学习不可取
  先分享一个故事。
  有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞。  有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。  这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。  但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。
  这个故事给我们的启示是:欲速则不达。
  浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入共产主义社会。现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣称"参加培训,100%就业",居然报名的学生不少,简直是藐视天下程序员。社会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。许多初学者C++/JAVA没开始学,立马使用VC/JBuilder,会使用VC/JBuilder开发一个Hello  World程序,就忙不迭的向世界宣告,"我会软件开发了",简历上也大言不惭地写上"精通VC/JAVA"。结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。到处碰壁之后才知道捧起《C++编程思想》《JAVA编程思想》仔细钻研,早知如此何必当初呀。
  "你现在讲究简单方便,你以后的路就长了",好象也是佛经中的劝戒。
  1.4 多实践,快实践
  彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。
  从前,四川边境有两个和尚,一个贫穷,一个有钱。一天,穷和尚对富和尚说:"我打算去南海朝圣,你看怎么样?"富和尚说:"这里离南海有几千里远,你靠什么去呢?"穷和尚说:"我只要一个水钵,一个饭碗就够了。"富和尚为难地说:"几年前我就打算买条船去南海,可至今没去成,你还是别去吧!"  一年以后,富和尚还在为租赁船只筹钱,穷和尚却已经从南海朝圣回来了。
  这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周全之后,再去干事情。假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了。软件开发是一门工程学科,注重的就是实践,"君子动口不动手"对软件开发人员来讲根本就是错误的,他们提倡"动手至上",但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副"比尔盖茨"样。有前辈高人认为,学习编程的秘诀是:编程、编程、再编程,笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。
  1.5 多参考程序代码
  程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。为什么要以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息。
  多多参考代码例子,对JAVA而言有参考文献[4.3],有API类的源代码(JDK安装目录下的src.zip文件),也可以研究一些开源的软件或框架。
  1.6 加强英文阅读能力
  对学习编程来说,不要求英语,  但不能一点不会,。最起码像JAVA  API文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个"金山词霸"。看多了就会越来越熟练。在学JAVA的同时学习英文,一箭双雕多好。另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求。英语好对你学习有很大的帮助。口语好的话更有机会进入管理层,进而可以成为剥削程序员的"周扒皮"。
  1.7 万不得已才请教别人
  笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决。请教别人之前,你应该先回答如下几个问题。
  你是否在google中搜索了问题的解决办法?
  你是否查看了JAVA  API文档?
  你是否查找过相关书籍?
  你是否写代码测试过?
  如果回答都是"是"的话,而且还没有找到解决办法,再问别人不迟。要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。
  1.8 多读好书
  书中自有颜如玉。比尔?盖茨是一个饱读群书的人。虽然没有读完大学,但九岁的时候比尔?盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔?盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。
  笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,"天呐,这么多书到什么时候才能看完了","学软件开发,感觉上了贼船"。这时候,我的回答一般是,"别着急,什么时候带你们去看看我的书房,到现在每月花在技术书籍上的钱400元,这在软件开发人员之中还只能够算是中等的",学生当场晕倒。(注:这一部分学生是刚学软件开发的)
  对于在JAVA开发领域的好书在笔者另外一篇文章中会专门点评。该文章可作为本文的姊妹篇。
  1.9 使用合适的工具
  工欲善其事必先利其器。软件开发包含各种各样的活动,需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具帮忙可以说是寸步难行。工具可以提高开发效率,使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中无剑心中有剑这样的境界几乎不可企及。在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也可作为本文的姊妹篇)。
  2.软件开发学习路线
  两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律。
  从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计师→架构设计师或项目管理师。不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序员也不是好的程序员。我们应该努力往上走。让我们先整理一下开发应用软件需要学习的主要技术。
  A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并非不重要。如不想成为计算机科学家的话,可以采取"用到的时候再来学"的原则。
  B.一门编程语言,现在基本上都是面向对象的语言,JAVA/C++/C#等等。如果做WEB开发的话还要学习HTML/JavaScript等等。
  C.一种方法学或者说思想,现在基本都是面向对象思想(OOA/OOD/设计模式)。由此而衍生的基于组件开发CBD/面向方面编程AOP等等。
  D.一种关系型数据库,ORACLE/SqlServer/DB2/MySQL等等
  E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET等。
  F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模。
  G.一种软件过程,RUP/XP/CMM等等,通过软件过程来组织软件开发的众多活动,使开发流程专业化规范化。当然还有其他的一些软件工程知识。
  H.项目管理、体系结构、框架知识。
  正确的路线应该是:B→C→E→F→G→H。
  还需要补充几点:
  1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想。新技术虽然不断涌现,更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理论与编程思想的变化却很慢。掌握了编程理论与编程思想你就会有拨云见日之感。面向对象的思想在目前来讲是相当关键的,是强势技术之一,在上面需要多投入时间,给你的回报也会让你惊喜。
  2).对于数据库来说是独立学习的,这个时机就由你来决定吧。
  3).编程语言作为学习软件开发的主线,而其余的作为辅线。
  4).软件工程师着重于B、C、E、  D;软件设计师着重于B、C、E、  D、F;架构设计师着重于C、F、H。
  3.如何学习JAVA?
  3.1  JAVA学习路线
  3.1.1  基础语法及JAVA原理
  基础语法和JAVA原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习JAVA也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的JAVA程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉JAVA基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得"真正"的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。
  3.1.2  OO思想的领悟
  掌握了基础语法和JAVA程序运行原理后,我们就可以用JAVA语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。
  使用面向对象的思想进行开发的基本过程是:
  ●调查收集需求。
  ●建立用例模型。
  ●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。
  ●细化分析模型到设计模型。
  ●用具体的技术去实现。
  ●测试、部署、总结。
  3.1.3  基本API的学习
  进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的"不需要重新发明轮子"。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查看,JAVA  DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员程序员交流的文档。
  基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查JAVA  DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。
  3.1.4  特定API的学习
  JAVA介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。
  3.1.5  开发工具的用法
  在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对JAVA技术本身的注意力。过了这一阶段你就可以开始熟悉IDE了。
  程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。
  从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。
  JAVA开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的。JBuilder在近几年来一直是JAVA集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的JAVA  IDE大战中,以其快速的版本更新击败IBM的Visual  Age  for  JAVA等而成就一番伟业。IBM在Visual  Age  for  JAVA上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓"柳暗花明又一村"。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。
  3.1.6  学习软件工程
  对小型项目而言,你可能认为软件工程没太大的必要。随着项目的复杂性越来越高,软件工程的必要性才会体现出来。参见"软件开发学习路线"小节。
  3.2学习要点
  确立的学习路线之后,我们还需要总结一下JAVA的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。
  3.2.1勤查API文档
  当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用"javadoc"工具(包含在JDK中)生成标准的JAVA  DOC文档,供同行使用。J2SE/J2EE/J2ME的DOC文档是程序员程序员交流的工具,几乎人手一份,除了菜鸟之外。J2SE  DOC文档官方下载地址:http://java.sun.com/j2se/1.5.0/down...pi/index.html。
  对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。
  当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下:
  ●找特定的包,包一般根据功能组织。
  ●找需要使用类,类命名规范的话我们由类的名字可猜出一二。
  ●选择构造器,大多数使用类的方式是创建对象。
  ●选择你需要的方法。
  3.2.2  查书/google->写代码测试->查看源代码->请教别人
  当我们遇到问题的时候该如何解决?
  这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像"某些类/方法如何使用的问题",DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看API的源代码验证你的想法。万不得已才去请教别人。
  3.2.3学习开源软件的设计思想
  JAVA领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。
  3.2.4  规范的重要性
  没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到http://www.jcp.org下载JSRXXX规范,?..请参考3.2.2节。
  3.2.5  不局限于JAVA
  很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。
  JAVA不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。如学习JAVA集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是"需要的时候再学"的原则。
  4.结束语
  需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在JAVA神殿之外的朋友有所帮助的话,笔者也欣慰了。哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了。最后奉劝各位程序员尤涫荕M程序员,完成工作后赶快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比……
  5.参考文献
  5.1《JAVA夜未眠》
  5.2  http://www.chinaitlab.com/www/news/...ow.asp?id=33934
  5.3  http://javaalmanac.com/egs/
  5.4  http://java.sun.com/j2se/1.5.0/docs/api/index.html

posted @ 2006-07-13 20:41 啊辉 阅读(182) | 评论 (0)编辑 收藏

Java登峰造极之J2EE修炼的四书五经

Java登峰造极之J2EE修炼的四书五经
J2EE其实没有四书五经,因为J2EE一直如汹涌澎湃的大江,推陈出新,不断高速发展,这是一种带领我们走向未来的技术。当然,如何在这种气势如虹的潮流之中不至于迷失方向,需要相关指南性书籍的引导。本文将从线程和模式两个方面推荐J2EE书籍,这两个方面正好是两种不同的方向,线程是从微观、底层机制入手;而模式则是从设计高度来看待J2EE。

 

线程(Thread)

首先,线程是很多J2EE初学者容易忽视的一个基本知识,可以说,无论你是从Java世界的哪一扇门进入J2EE的,线程是必经之道。

已经不记得在哪里看到过下面一段英文:

在过去,大概只有勇敢的程序员才勇于使用pthread和Win32线程,现代语言如Java正试图在编写一些令人恐惧的应用如并行计算等方面来挽救我们。

J2EE的Servlet和EJB确保我们不用担心线程以及同步等问题,我们只要象往常一样编程,容器自动会使用线程池等技术来支持我们的应用。

由此可见,线程是J2EE最基本的底层机制,每个Servlet/Jsp程序其实是一段线程程序,如果你不懂得线程/多线程的一些原理,如何能娴熟驾驭J2EE的Servlet/Jsp?

在线程计算方面有很多权威,Dou Lee无疑是这方面的杰出代表,他的并行计算包已经加入了最新的JDK1.5版本中,他的书籍都属于奠基性质,但是,这样书籍可能不是很适合只想对线程进行了解的J2EE初学者。

《Java线程编程》(Java Thread Programming)

是我推荐的第一本有关J2EE书籍,在这本书中,作者以简单的例子,形象易懂地从单线程讲解到多线程,线程池(Thread Pool)、并发同时访问对象和变量(Concurrent Access to Objects and Variables),这些都是我们在平时Servlet/Jsp编程中经常会发生疑惑的地方,在这本书的案例中,作者清晰明了地给我们展示这些细节而有重要的技术。同时,也让我们深刻地理解了直接编制多线程应用是一件“令人恐惧”的事情。

很有意思的是,我在一家网上书店社区里也发现了与我有同样见解的帖子,称这本书是“一本让经典成为过去的书”

设计模式

线程世界就象微生物世界一样,复杂且几乎没有边界,作为信息系统的程序员如果太执著于这样纯技术的微观层面,可能浪费太多宝贵时间和精力,在基本掌握多线程机制后,需要更加关注J2EE的设计应用了。

J2EE是Java世界中一个独特的框架或标准,所以,我们首先需要掌握基于Java的设计应用,这些设计应用技巧,是先行者经过长期实践总结出来的心得,他们称之为设计模式。在J2EE应用中,只有大量使用设计模式,才能体现出分离和解耦的最高宗旨,才能使得自己的J2EE系统脉络清晰、层次分明,这样的系统才真正具有良好的可伸缩性、稳固的健壮性以及方便的可维护性。


GoF 23种设计模式已经成为经典,2002年我在我的网站J道发表23种设计模式Java详解时,竟然在中文google里很难发现这方面的资料,这让我万分惊讶,也许国人确实是非常实在,只对算法、数据结构等这样看得见、摸得着的概念感兴趣,其实我一直反复和别人讲:设计模式不是纯抽象概念,它是实践的总结,如同UML一样,是一种交流和编码实现的语言。

我在2002年帮朋友购买了GoF 23种设计模式的中文版:《设计模式:可复用面向对象软件的基础》,它是2000年12月第2次印刷的版本,这样经典必读书籍,8000册在2年时间内都没有销售完毕,相比那些喧嚣炒作的书籍,在出版几个月内销售过万,越发显得我们这个社会的浮躁和急功近利了。

当然,这本薄薄的书虽然由四个国人鼎力协助翻译,想必他们也殚思竭虑,尽了最大努力了,可惜书中还是有很多翻译欠妥之处,影响了它的销量。

由于这本经典的GoF设计模式比较难懂,初学者更多应该是从实例应用中了解和掌握GoF设计模式,相关提供实例应用的书籍有下面几本:

Mark Grand的Patterns in Java系列;

美籍华人阎宏的《Java与模式》;

笔者的《Java实用系统开发指南》;

EJB

EJB是J2EE中一个重要组成部分,J2EE推荐将你的业务功能核心放在EJB中实现,EJB类似肯得基的“全家桶”,将实际中需要的基础功能全都打包在一起了,如果你是个挑剔或个性化的客户,我想你可能不会只满足于“全家桶”。不管“全家桶”是否合适你,了解它里面装的是什么是一个必需的过程。掌握EJB需要从两个方面着手:基本原理和如何使用。

《精通EJB(第二版)》

是对EJB原理讲解得比较透彻,但是书中将EJB一些本质原理推卸给了Corba,而对Corba又没有仔细介绍,我认为初学者应该在这里适可而止,如果你非常对EJB底层实现感兴趣,我推荐阅读JBoss的源码,其实JBoss源码在你孜孜不倦的钻研之劲攻击下很快会土崩瓦解。

对象池(Object Pool)、RMI和事务机制应该是EJB原理掌握三个方向,这三种技术方向又可以推荐很多书籍供学习研究,这里就不说了。

EJB主要分EJB容器和EJB应用系统,初学者更多精力应该关注如何构建EJB应用系统,由于EJB提供功能强大且非常有特点,因此,使用他们要非常小心,遵循一定的前提和规则,由此,EJB设计模式是不能不了解的。

《EJB设计模式》

是这方面的经典之作,在书中,作者指出了使用CMP注意特点、DAO模式的重要性、DTO模式的变种等。阅读本书的同时,如果参考SUN的PetStore源码学习,将会起到事半功倍的效果,完上面两本书,自己动手实践非常重要,EJB使用中关于EJB reference配置比较麻烦,其原理是这样:调用者---- > EJB Reference ---> 被调用EJB的JNDI名称 ---- >被调用EJB,这些细节使用问题只有实践时才能碰到,也可以从网上寻找一些这方面的电子教程实例。

只有调试了一两个EJB实例,这时你才可以站出来表达你的想法:喜欢或不喜欢?架构选型时也可以提供参考意见:是轻量型还是重量型?盲目排斥EJB或认为EJB是唯一解决方案等两种极端观点是要不得的,条条大路通罗马,伸缩和性能是关键。

这里推荐一本从纯设计角度看待EJB/J2EE的书籍:Rod Johnson的《J2EE设计开发编程指南》,英文是Expert o­ne-on-One J2EE Design and Development,Rod Johnson在书中从一个完美的设计角度指出了EJB缺点,这些缺点他是用黑体标识,非常醒目,同时,他将如果不使用EJB所带来的额外工作量使用正常小字体标识了,算是轻描淡写吧。当然,Rod Johnson为了将其理想的设计落实为代码,主持了Spring框架开发,如果J2EE领域有一个既符合完美的设计要求,又能支持成熟应用,同时又是业界标准,那是一个多么令人向往的事情,Spring框架至少在这方面做了有益的探索。

集群、Web服务和资源整合

对于中大型软件系统,集群和Web服务是必需掌握的技术,目前相关书籍不多。如何将J2EE新技术和现有资源整合,也属于一个探索性的领域,期待这几个方面有好的书籍问世。


 

posted @ 2006-07-13 20:23 啊辉 阅读(229) | 评论 (0)编辑 收藏