整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Java 的JAR包、EAR包、WAR包区别

Java 的JAR包、EAR包、WAR包区别

AR包

WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。

War是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块。通常用于网站,打成包部署到容器中,以tomcat来说,将war文件包放置它的\webapps\目录下,启动Tomcat,,这个包可以自动进行解压,也就是你的web目录,相当于发布了。

典型的war包内部结构如下:

webapp.war

| index.jsp

|

|— images

|— META-INF

|— WEB-INF

| web.xml // WAR包的描述文件

|

|— classes

| action.class // java类文件

|

|— lib

other.jar // 依赖的jar包

share.jar

War包中的文件格式按照一定的目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下包含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,为classes目录下则包含编译好的servlet类,或者servlet所依赖的其他类(如javabean)。通常这些依赖的类也可以打包成jar包放在WEB-INF下lib目录下。

JAR包

JAR包通常是开发时要引用的通用类,打成包便于存放管理。简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入你的项目中。可以直接使用这些jar包中的类和属性,这些jar包放在lib目录下。

JAR文件格式以流行的ZIP文件格式为基础;与ZIP文件不同的是,jar文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和JVM这样的工具直接使用。Jar文件与zip文件唯一的区别就是在jar文件的内容中,包含了一个META-INF/MANIFEST.MF文件,这个文件是在生成jar文件的时候自动创建的。

作用:

1、作为工具包和类库,这个是最基础的作用,在大型项目中,一般会依赖N多个jar包

2、作为应用工程和扩展的构建单元;开发大型应用的时候,一般会将应用分为几个单元,每个单元用jar包封装,并相互依赖。

3、作为组件、applet或者插件程序的部署单元。

4、用于打包与组件关联的辅助资源。

典型的jar包内部结构如下:

tools.jar

| resource.xml // 资源配置文件

| other.xml

|

|— META-INF

| MANIFEST.MF // jar包的描述文件

|— com // 类的包目录

|—test

util.class //java类文件

EAR包

JAR(java归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件,为J2EE应用程序创建的JAR文件是EAR文件(企业JAR文件)。针对企业级项目,实际上EAR包中包含WAR包和几个企业项目配置文件而已,一般服务器选择WebSphere等,都会使用EAR包。

典型的ear包内部结构如下:

app.ear

| ejb.jar // ejb-jar包

| other.jar // 普通的jar包

| webapp.war // war包

|

|—META-INF

application.xml // EAR描述文件

者 | 泰斗贤若如

责编 | 伍杏玲

Java 起源与诞生

20世纪90年代,单片式计算机系统诞生,单片式计算机系统不仅廉价,而且功能强大,使用它可以大幅度提升消费性电子产品的智能化程度。

SUN公司为了抢占市场先机,在1991年成立了一个由詹姆斯·高斯林(James Gosling)领导,名为“Green”项目小组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。

那么使用何种编程语言来设计,是项目小组头疼的事。当时C++较为有优势的,项目小组首先考虑的是采用它来编写程序,但C++过于复杂和庞大,再加上由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,需要让编写的程序跨平台运行,假如用C++编写的话对程序的跨平台运行不友好。

最后项目小组决定:既不用C++编写,也不开发全新的编程语言,而是对C++进行改造:去除了C++复杂的指针和内存管理,并结合嵌入式系统的实时性要求,最终在1992年,他们开发了一种名为“Oak”的面向对象语言。

科当他们在向硬件生产商进行演示的时候,硬件生产商对此并不感冒,OaK语言因为缺乏硬件的支持而无法进入市场,从而被搁置一旁。

1994年,项目小组看到了浏览器在未来的发展前景,于是决定将OaK应用于万维网。1995年,他们用OaK语言研发了一种能将小程序嵌入到网页中执行的技术——Applet,由于Applet不仅能嵌入网页,还可随同网页在网络上进行传输,这让无数的程序员看到了OaK这门语言,与此同时,OaK正式更名为Java。从此,Java在互联网的推动下火了。

Java的衍变

1996年1月,SUN公司推出了JDK1.0。在JDK1.0发布后,有很多程序员学习并运用Java来制作网页,JDK包括两大部分:开发工具和运行环境。

运行环境包括核心API、集成API、用户界面API、发布技术、Java虚拟机(JVM)。JDK1.0的发布,标志着Java成为一种独立的开发工具。在同年9月,约有8.3万个网页应用了Java技术来制作。

JDK1.0的代表性技术有:Java虚拟机、Applet、AWT等。

1997年2月,SUN公司紧接着推出了JDK 1.1,在推出后3周时间里,达到了近22万次的下载量。4月2日,首届Java One大会在美国旧金山召开,参加会议的人超过一万人,创造了当时全球同类会议规模最高的纪录。9月,Java Developer Connection社区成员超过10万,同年还有10个最主要的操作系统供应商正式声明将在他们的产品中使用Java。

JDK1.1的代表性技术有:JDBC、JavaBeans、RMI、JAR文件格式、Java语法中的内部类和反射。

1998年12月8日,JDK1.2——第二代Java平台的企业版J2EE发布。

1999年6月,Sun公司把Java体系分为三个方向:

J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;

J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;

J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。

随着供应商的不同,Java的API也分为三大类:

Java Core API:Java核心类库;

Java Optional API:对之前API的扩充;

特殊API:由特殊厂商或组织提供的API。

Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及。

JKD1.2的代表性技术有:Swing、Java IDL、EJB、Java Plug-in等,在API文档中,添加了strictfp关键字和Collections集合类。

1999年4月27日,HotSpot虚拟机发布。HotSpot是由一家叫“Longview Technologies”的小公司开发的,后来被SUN公司收购。HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机 。

2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布,J2SE1.3是对J2SE1.2的补充和扩展,从应用领域的角度分析,JavaSE1.3已经涵盖了数据库、WEB、网络、图形、多媒体、电话、影像等大部分的信息技术领域。

2002年2月26日,J2SE1.4发布。与J2SE1.3相比,多了近62%的类和接口。在这些新特性当中,还提供了广泛的XML支持、安全套接字(Socket)支持(通过SSL与TLS协议)、全新的I/OAPI、正则表达式、日志与断言。

2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0)。Java SE 5.0包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。

2005年6月,在Java One大会上,Sun公司发布了Java SE 6。此时,Java的各种版本已经更名,已取消其中的数字2,如J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。

2011年7月28日,收购Sun公司的Oracle发布了 Java SE 7,引入了二进制整数、支持字符串的switch语句、棱形语法、多异常捕抓、自动关闭资源的try语言等新特性。

2014年3月18日,Oracle公司发布Java SE8,这次版本升级为Java带来了全新的Lambda表达式、流式编程等大量新特性,这些新特性使得Java变得更加强大。

2017年9月22日,Oracle公司发布Java SE 9,这次版本升级强化了Java的模块化系统,让Java语言更轻量化,且采用了更高效、更智能的GI 垃圾回收器,并在核心类库上进行大量更新,可进一步简化编程。

2018 年 3 月 21 日,Java SE 10 发布,Java 10 版本带来了很多新特性,其中最备受广大开发者关注的莫过于局部变量类型推断。此外,还包垃圾收集器改善、GC 改进、性能提升、线程管控等新特性。

2018年9月26日,Java SE 11 发布。这是 Java 大版本周期变化后的第一个长期支持版本(LTS版本持续支持到2026年9月)。Java11 带来了 ZGC、Http Client 等重要特性,一共包含 17 个 JEP(JDK Enhancement Proposals,JDK 增强提案)。

2019年3月20日,Java SE 12 发布。Java 12是短期支持版本,可在下一个版本发布之前获得Oracle的商业支持。

2019年9月23日,Java SE 13发布,此版本中添加了“文本块”,文本块是一个多行字符串文字,避免对大多数转义序列的需要,以可预测的方式自动格式化字符串,并在需要时让开发人员控制格式。

Java历经千辛万苦,换来春暖花开

经过二十多年的版本更新,一步步的积累,造就了如今的Java。

一览Java在更新历程中所新增的特性:

Java 1.0:

  • 虚拟机——Sun Classic VM

  • Java小应用程序——Applet

  • Java图形设计——AWT

Java 1.1:

  • Jar包——Jar

  • Java规范——JavaBeans

  • 连接数据库——JDBC(Java DataBase Connectivity)远程调用——RMI

  • 内部类——Inner Class

  • 反射——Reflection

Java 1.2:

  • 字符串常量做内存映射

  • 对打包的Java文件进行数字签名

  • 控制授权访问系统资源的策略工具

  • JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型

  • 在Applet中添加声音支持

  • 即时编译技术——JIT

  • 运行插件——Java Plug-In

  • J2EE规范——EJB

  • 平台对象请求代理体系结构——Java IDL

  • 集合——Collections

Java 1.3:

  • 数学运算

  • CORBA IIOP实现RMI的通信协议

  • Java 2D新特性

  • Jar文件索引

  • 时间——Timer API

  • 声音——Java Sound API

Java1.4:

  • 正则表达式

  • 异常链

  • XML解析器

  • XSLT转换器

  • XML处理

  • Java打印服务

  • JDBC高级——Java Web Start JDBC 3.0

  • 可以操作系统的高级功能——Preferences

  • 高级流——NIO

  • 日志功能——Logging

  • 图片流——Imgae I/O

Java1.5:

  • 自动装箱拆箱

  • 泛型

  • 元数据

  • 静态引入

  • 内省——Introspector

  • 枚举——enum

  • 可变长参数——Varargs

  • 高级虚幻——foreach

  • 内存模型——JMM

  • 并发包——concurrent

Java SE 6:

  • 命名方式变更

  • 脚本语言

  • 编译API和微型HTTP服务器API

  • 锁与同步

  • 垃圾收集

  • 类加载

  • Kerberos

  • LDAP

  • JDBC高级——JDBC 4.0

  • Java? 编程语言编译器的接口——Java Compiler

  • 可插拔注解

  • 公钥基础设——Native PKI

  • 通用安全服务——Java GSS

  • web服务——Web Services

Java SE 7:

  • switch语句块中允许以字符串作为分支条件

  • 创建泛型对象时应用类型推断

  • try-with-resources

  • 值得自动处理

  • 数值类型可以用二进制字符串表示

  • 引入Java NIO.2开发包

  • 动态语言支持

  • 安全的加减乘除

  • Map集合支持并发请求

Java SE 8:

Java SE 8在Java更新的历史中是一个非常重要的版本,引入的函数式编程使得Java编程更为强大,较典型的有:

  • Java工具的操作增强

  • Unicode增强功能,包括对Unicode 6.2.0的支持

  • 并行阵列排序

  • 标准编码和解码Base64

  • 无符号算术支持

  • 新的并发

  • Lambda表达式

  • 方法参数反射Java XML技术增强功能

  • 虚拟机操作增强JSSE服务器中的SSL / TLS服务器名称指示(SNI)扩展支持

  • 支持AEAD算法……

Java SE 9、10……版本的不断更新,是对旧版本改良以及补充,越更新,越友好。

看今朝,Java 位居世界编程语言榜首,风光无限好。

忆往昔,初生之时便陷入低谷,后借互联网之势拔地而起,J2SE攻占桌面、J2ME攻占手机、J2EE攻占服务器,Java三大强军也曾饱受岁月蹉跎,后浴火重生,最终投入Oracle怀抱,换得春暖花开。此情此景,悲之、喜之、感之、叹之,Java如今之风光,并非一日之功,望天下众程序员惜之、盼之。

Java已崛起,未来有可期

1、用发展的眼光看Java:API稳更新,复用性稳强化

Java的更新速度是很快的,每隔一段时间都会进行一次版本迭代,来适应新技术的发展趋势,学Java的程序员遍布全世界,很庆幸我也是茫茫Java程序员中的一员,近些年来很火热的大数据也是和Java息息相关。

Java本身具有很大的开放性和可扩展性,再加上Java如此雄厚的历史背景,我相信一个语言只要不断发展,就很难会被时代淘汰。

2、用就业的眼光看Java:互联网的时代、人工智能的时代、5G+的时代,Java一直都在

随着网络的发展,如今Java已广泛应用于数据中心、PC、游戏、移动电话等行业,从近几年的招聘量上来看,对Java开发人员的需求量依旧很大,Java的学习依旧是主流,发展前景一片光明。

我国信息化人才培养还处于发展阶段,导致社会实际需求人才基数远远大于信息化人才的培养基数,使得数以万计的中小企业急需全面系统掌握Java软件开发基础技能与知识的软件工程师。

Java软件工程师就业前景良好,再加上Java软件工程师不仅IT专业企业需要,广大的非IT企业也需要,前景是较为乐观的。目前我所了解的有:

1、Java企业级应用开发

目前Java在许多行业的企业信息应用方面有很多,比如邮箱、物流、医疗、股票、OA、金融等信息系统。这些和目前的主流行业密切相关的,所以Java开发者的需求还是较大,待遇也是相当不错,工资水平与Java互联网方向的差不多,很容易在一些大型企业就业,只要你有恒心有毅力地学习,我想至少面临这么多选择时,你不会一无所用,机会总是会留给有准备的人。

2、Java网站建设

近些年来,网站建设业务一直呈现快速上升的势头,行业市场也是越来越大,很多新技术的应用使得企业网站建设更具魅力、更加强大。Java编程语言将使网站结构更紧密,访问更流畅,更能适应新的要求。虽然以目前的市场分析Java做网站成本太高,而且对硬件要求也比较高,中小企业大多都会选择使用PHP语言进行开发,但是在很多大型企业还是用Java语言的比较多,所以你依旧有机会,向大厂冲鸭。

3、 Android开发

Android是全球最大的智能手机操作系统,前几年Android发展快速,在国内的市场份额也是越来越高,但在快速兴起的小程序和H5的冲击下,导致Android原生开发门槛增高,公司对Android开发工程师的要求也提高了,这就要求学习Android的程序员们精于技术,优秀的Android开发工程师仍然存在不小的缺口,中、高级的Android工程师还是很受欢迎的。Android应用的主要开发语言就是Java,所以如果你技术很精,选择Android这个方向还是很不错的。

4、Java游戏开发

Java可用来编写游戏脚本,如Bean、Shell、Groovy等脚本语言可以方便、无缝的和Java语言进行交互,这些极大地促进Java游戏编程。当前国内游戏较为火热,很多热门电竞,所以国内游戏专业人才的需求一直都存在缺口。所以,好好努力去填补这些缺口吧,只要你有过人的技术,不愁没饭吃。

不忘初心,与Java同行

我是一名学Java的程序员,通过整理撰写本文,我又重新认识了Java。在我看来,Java的”火“并不是偶然的,有很多因素的积累而成。Java的发展进程值得考究,作为一名Java的忠实粉丝,Java的重要性不言而喻,相信不管是计算机专业还是非计算机专业的程序员也会感同身受。

对我而言,其他Java程序员也是一样,因为对Java有着持久不衰的热爱,所以愿意不断追求专业追求卓越,而带着这份忠诚的热爱,我们不畏风雨,一路前行。不忘初心,方得始终,我愿以Java为马,诗酒趁年华!

参考:Java百度百科

作者简介:泰斗贤若如,一个热爱分享的程序员,始终相信“越懂得分享,你的价值增值越大”。

在这一章中,主要介绍如何安装Java开发工具箱(JDK)以及如何编译和运行各种类型的程序:控制台程序、图形应用程序以及applet应用程序。使用JDK的方法是在shell窗口中键入命令行。然而,很多程序员更偏爱使用集成开发环境。为此,将在稍后介绍如何使用免费获得的开发环境来编译和运行Java程序。尽管学起来很容易,但集成开发环境需要吞噬大量资源,在编写小型程序时会给人带来烦恼。作为折中方案,再介绍一下如何使用可以调用Java编译器并运行Java程序的文本编辑器。一旦弄清楚了本篇的技术,并选定了自己的开发工具,就可以学习探索Java程序设计语言了。

安装Java开发工具箱

Sun Microsystems公司为Solaris、Linux和Windows提供了Java 2 标准版(J2SE)的最新、最完全的版本。用于Macintosh和许多其他平台的版本仍处于各种不同的开发状态中,不过这些版本由相应平台的开发商授权并分发。

下载JDK

要想下载Java开发工具箱,必须到Sun网站进行搜寻,并在获得所需的软件之前弄清一些专业术语。

JDK是Java Development Kit的缩写。有点混乱的地方是:工具箱的版本1.2~1.4称为JavaSDK(Software Development Kit)。在某些场合下,还会看到这些旧术语。

另外,随处可见的术语J2SE是指“Java 2 Standard Edition”;J2EE是指“Java 2 EnterpriseEdition”;J2ME是指“Java 2 Micro Edition”。

Java 2这种提法是从1998年开始使用的。当时Sun公司的销售人员感觉通过增加小数点后面的数值来改变版本号并没有反映出JDK 1.2的重大改进。但是,由于在发布之后才意识到这个问题,所以决定将开发工具箱的版本号仍然沿用1.2,接下来的版本就是1.3、1.4和5.0。但是,“Java”平台被重新命名为“Java 2”。因此,就有了Java 2 Standard Edition Development Kit 的5.0版,即J2SE 5.0。

对于工程师来说,所有这一切都可能会引起困惑,而这正是没有把它投入市场的原因。

如果使用Solaris、Linux或Windows,就应该从http://java.sun.com/j2se下载Java软件开发工具箱。找到版本5.0或后续的版本,并选择自己的平台。

Sun公司曾经制作过将Java开发工具箱和集成开发环境捆绑在一起的产品。其中的集成开发环境,在不同时期,被命名为不同的名字,例如Forte、Sun ONE Studio、Sun Java Studio和NetBeans。我们无法知道每个人在登录Sun网站的时候,市场上正在热销什么。这里,我们建议大家只安装Java开发工具箱。如果最终决定使用Sun的集成开发环境,就可以从http://netbeans.org下载。

下载了JDK之后,接下来的安装过程请参阅不同平台的安装指南。在编写这本书的时候,可以在网站http://java.sun.com/j2se/5.0/install.html 上搜寻到安装指南。

只有Java的安装过程和编译命令与系统有关。一旦安装并运行了Java,本书阐述的所有内容都适用。与环境无关性是Java的一个主要优势。

设置执行路径

在完成了JDK的安装之后,还需要执行一个附加步骤:把 jdk/bin目录添加到执行路径中。所谓执行路径是指操作系统搜寻本地可执行文件的目录列表。对于不同的操作系统,这个步骤的操作过程也有所不同。

? 在UNIX(包括Solaris和Linux)环境下,编辑执行路径的过程与所使用的shell有关。如果使用的是C shell(Solaris的默认选择),在 ~/.cshrc文件的末尾就要添加:

set path=(/usr/local/jdk/bin $path)

如果使用的是Bourne Again shell(Linux的默认选择),在 ~/.bashrc文件或 ~/.bash_profile文件的末尾就要添加:

export PATH=/usr/local/jdk/bin:$PATH

对于其他的UNIX shell 来说,需要搞清楚具体的类似过程。

? 在Windows 95/98/ME环境中,在c:\autoexec.bat文件的末尾需要放置一行:

SET PATH=c:\jdk \bin;%PATH%

注意在“=”两侧不要留空格。必须重新启动计算机,这个设置才能够生效。

? 在Windows NT/2000/XP环境下,启动控制面板,选择System,再选择Environment。在User Variables窗口中找到PATH变量名。(如果想让机器上的所有用户都能够使用Java工具,就需要使用系统变量窗口完成这个操作步骤。)将 jdk \bin目录添加到路径的开头,并使用分号将新项隔开。如下所示:

c:\jdk \bin; other stuff

将这个设置保存起来,打开的任何控制窗口都将有正确的路径。

可以使用下面的步骤测试上面的设置是否正确:

1)打开一个shell窗口。后面的操作将取决于所使用的操作系统。键入:

java-version

2)然后,按ENTER键。应该能够看到如下的显示信息:

java version "5.0"

Java(TM) 2 Runtime Environment, Standard Edition

Java HotSpot(TM) Client VM

如果看到的是“java:command not found”、“Bad command or file name” 或“The name specified

is not recognized as an internal or external command, operable program or batch file”,就需要回到

前面,重新检查整个的安装过程。

安装库源代码和文档

库源文件在JDK中以一个压缩文件src.zip的形式发布,必须将其解压缩后才能够访问源代码。

这里强烈地建议这样做。步骤很简单,如下所示:

1)确保JDK已经安装,并且 jdk/bin目录在执行路径中。

2)打开shell窗口。

3)进入 jdk目录(例如:cd /usr/local/jdk5.0或cd c:\jdk5.0)。

4)建立一个子目录src:

mkdir src

cd src

5)执行命令:

jar xvf ../src.zip

(或者在Windows中执行jar xvf ..\src.zip。)

该文档在一个与JDK分开的压缩文件中。

可以从http://java.sun.com/docs下载该文档。其中提供了多种格式(.zip、.gz和.Z)。选择一种最适合你的格式。如果难以确定的话就使用zip文件,因为这样可以使用JDK中的jar程序对zip文件进行解压缩。执行下面的步骤:

1)确保已经安装了JDK并且执行路径为jdk/bin。

2)下载该文档的zip文件并放入jdk目录。文件名为j2sdkversion-doc.zip,这里的version类似5_0。

3)打开一个shell窗口。

4)进入jdk目录。

5)执行该命令。

jar xvf j2sdkversion-doc.zip

其中version是相应的版本号。

安装本篇中的示例

读者可以安装本书中的示例程序。这些程序可以从http://www.phptr.com/corejava 下载,它们被打包在corejava.zip文件中。应该把它们解压到一个单独的文件夹中,建议将文件夹命名为CoreJavaBook。解压操作可以使用任何一种zip文件的实用程序,例如WinZip(http://www.winzip.com),或者使用jar实用程序,它是JDK的一部分。如果使用jar,需要执行下列步骤:

1)确保JDK已经安装,并且jdk/bin目录在执行路径中。

2)建立目录CoreJavaBook。

3)将corejava.zip文件下载到这个目录下。

4)打开一个shell窗口。

5)转换到CoreJavaBook目录。

6)执行命令:

jar xvf corejava.zip

导航Java目录

在学习Java的过程中,经常需要查看Java源文件。当然,也会频繁地使用类库文档。表2-1显示了JDK目录树。

就学习Java而言,有两个最有用的子目录docs和src。docs目录包含了HTML格式的Java类库文档,可以使用任何浏览器(如Netscape)查看这些文档。

选择开发环境

如果在此之前使用Microsoft Visual Studio编写过程序,就会习惯于带有内嵌的文本编辑器、用于编译和运行程序的菜单,以及配有集成调试器的开发环境。基本的JDK全然没有这些功能。

利用它从事的每一项任务都要通过在shell窗口中键入命令来完成。在本书中,将介绍如何安装和使用基本的JDK,这是因为我们发现完善的开发环境并不能减轻学习Java的压力,相反这些环境相当复杂,并且会将一些程序设计者很关注且对他们很有意义的重要细节隐藏起来。

集成开发环境对于编写简单的程序来说显得有些笨重。使用它们速度比较慢、需要更高性能的计算机,并且在编写每一个程序的时候,都要建立有些烦人的项目。而对于编写包含许多源文件的大型Java程序来说,它们却能够表现出不凡的优势,其中集成了调试器、版本控制系统等工具。在这本书中,将主要介绍使用Eclipse的基本方法,这是一种本身就用Java编写的免费开发环境。当然,如果更加喜欢其他的开发环境,例如,支持当前Java版本的NetBeans或JBuilder,也可以与本书配合使用。

对于简单的程序来讲,使用介于命令行工具与集成开发环境之间的集成JDK编辑器是一种很好的折中方案。在Linux环境下,最好选择Emacs。在Windows环境下,最好选用TextPad,这是一个优秀的共享编辑器,并且与Java集成得很好。另外,JEdit也是一种相当不错的跨平台工具。

使用与JDK集成的文本编辑器可以使开发Java程序变得简易且快捷。我们将用这种方案开发并测试本书中的绝大多数程序。由于可以在编辑器内部编译并执行源代码,所以,实际上这也是一种开发环境,使用它可以完成本书的所有程序。

总而言之,可以选择下列Java开发环境:

? 使用JDK以及自己喜欢的文本编辑器。在shell窗口编译并运行程序。

? 使用集成开发环境,如Eclipse,或其他免费的、可供使用的商业开发环境。

? 使用JDK和一个与JDK集成在一起的文本编辑器。Emacs、TextPad以及JEdit就属于这类编

辑器。当然,还有其他的一些编辑器。在编辑器中编译并运行程序。

使用命令行工具

首先介绍较难的一种方法:通过命令行编译并运行Java程序。

打开一个shell窗口,进入CoreJavaBook/v1ch2/Welcome目录(这个目录是安装本书例题源代码所使用的目录,请参看2.1.4节)。

然后,键入下面的命令:

javac Welcome.java

java Welcome

随后,会在shell窗口中看到如图2-1所示的输出。

祝贺你!已经编译并运行了自己的第一个Java程序。

那么,刚才都进行了哪些操作呢?javac程序是一个Java编译器。它将文件Welcome.java编译成Welcome.class,java程序启动Java虚拟机。虚拟机执行编译器放置在类文件中的字节码。

Welcome程序非常简单。其功能只是向控制台输出了一条消息。你看到例2-1的程序代码可能很兴奋。在下一章中,将解释它是如何工作的。

例2-1 Welcome.java

疑难解答提示

在使用可视化开发环境的年代,许多程序员对于在shell窗口中运行程序已经很生疏了。常常会出错,最终导致令人沮丧的结果。

一定要注意以下几点:

? 如果手工输入源程序,一定要注意大小写。尤其是类名应该为Welcome,而不是welcome或WELCOME。

? 编译时需要提供一个文件名(Welcome.java),而运行程序时,只需要指定类名(Welcome),不要带扩展名.java或.class。

? 如果看到诸如“Bad command or file name”或“javac:command not found”这类信息,就要返回去检查一下安装是否出现了问题,特别是执行路径的设置。

? 如果javac报告了一个错误“cannot read:Welcome.java”,就应该检查此目录中是否存在这个文件。

在UNIX环境下,检查Welcome.java是否以正确的大写字母开头。

在Windows环境下,使用shell命令dir,而不要使用图形浏览器工具。有些文本编辑器(特别是Notepad)在每个文件名后面要添加扩展名.txt。如果使用Notepad来编辑Welcome.java就会存为Welcome.java.txt。对于默认的Windows设置,浏览器与Notepad都隐含.txt的扩展名,这是因为这个扩展名属于“已知的文件类型”。此时,需要重新命名这个文件,使用shell命令ren,或是另存一次,给文件名加一对双引号,如"Welcome.java"。

? 如果运行程序之后,收到错误信息java.lang.NoClassDefFoundError,就应该仔细地检查一下类名,这是某个类名出现了问题。

如果收到错误信息welcome(w为小写),就应该重新发出带有大写W的java Welcome.java命令。记住,Java是区分大小写的。

如果收到错误信息Welcome/java,就是错误地键入了java Welcome.java,应该重新输入命令javaWelcome。

? 如果键入java Welcome,而虚拟机没有找到Welcome类,就应该检查一下是否系统的类路径被他人更改了。对于简单的程序,最好取消设置的类路径。取消类路径设置的方式是,在当前的shell窗口中键入:

set CLASSPATH=

这个命令在使用C shell的Windows和UNIX/Linux环境下使用。在使用Bourne/bash shell的UNIX/Linux环境下需要使用:

export CLASSPATH=在第4章中将介绍永久性地设置类路径以及取消相应设置的方式。

? 如果收到的错误信息是有关新语言结构的问题,就需要确认一下当前使用的编译程序是否支持JDK 5.0。如果使用的不是JDK 5.0或后续版本,就需要修改源代码,请参看附录B。

? 如果程序中的错误太多,所有的错误信息就会飞快地闪过。编译器将会把这些错误信息发送到标准错误流上。如果信息超过一屏,就很难看清楚它们了。

在UNIX系统或Windows NT/2000/XP系统下,捕获错误信息不是什么太难的事情。可以使用shell操作符 2> 将这些错误重新定向到一个文件中:

javac MyProg.java 2> errors.txt

而在Windows 95/98/ME环境下,就不能在shell窗口中完成将错误信息重定向到标准错误流上的操作。此时,可以从http://www.horstmann.com/corejava/faq.html下载errout程序并运行errout javac MyProg.java > errors.txt

使用集成开发环境

在这一节中,将介绍如何使用Eclipse编译一个程序。Eclipse是一个可以从网站http://eclipse.org上免费下载得到的集成开发环境。Eclipse是采用Java编写的,然而由于所使用的是非标准视窗类库,所以不像Java那样具有可移植性。尽管如此,这个开发环境已经拥有可以应用在Linux、Mac OS X、Solaris以及Windows 环境的版本了。

启动Eclipse之后,从菜单选择File→New Project。然后从向导对话框中选择“Java Project”(如图2-2所示)。这些屏幕画面取自于Eclipse 3.0M8。如果所使用的Eclipse版本看起来稍有差异,不要紧张

点击“Next”按钮,键入项目名“Welcome”,并输入包含Welcome.java的完整路径名,如图2-3所示。确保没有选定标有“Create project in workspace”的选项,然后点击“Finish”按钮。

现在已经建立了项目。点击项目窗口左边窗格中的三角,并打开它。然后,点击旁边的“default package”三角,再双击Welcome.java。现在应该看到带有程序代码的窗口了(如图2-4所示)。

用鼠标右键点击最左侧窗格中的项目名(Welcome),然后从弹出的菜单中选择Build Project。

程序就会被编译。如果编译成功,选择Run→Run As→Java Application。可以看到,这个窗口底部出现了一个输出窗口,程序输出显示在输出窗口中(如图2-5所示)。

定位编译错误

可以肯定,这个程序没有出现输入错误或bug。(毕竟,这段代码只有几行。)为了说明问题,假定在代码中不小心出现了录入错误(或许语法错误)。试着将原来的文件修改一下,让它包含一些录入错误,比如,把String的大小写搞错:

public static void main(String[] args)

现在,重新编译这个程序,就会收到一条错误信息,其中指出了有一个不能识别的string类型(如图2-6所示)。点击一下错误信息,可以看到光标马上移到了编辑窗口中相应的行上,在这里将错误纠正过来。使用这种方式可以快速地纠正错误。

现在只是对集成开发环境有了一个初步的认识。在第11章中将进一步讨论Eclipse的调试器。

使用文本编辑器编译并运行程序

集成开发环境虽然提供了许多便利,但却存在着一些潜在的缺陷。尤其是,对于那些没有分散在多个源文件中的简单程序来说,集成环境的启动时间长、不停地发出警告铃声都显得有些得不偿失。幸运的是,许多文本编辑器可以启动Java编译器,运行Java程序,并捕获错误信息以及输出结果。本节将看一下Emacs,这是一个典型的文本编辑器。

Emacs是一个值得炫耀的文本编辑器。它是免费的且可以用于UNIX、Linux、Windows和Mac OS X环境。但是,许多Windows程序员感觉Emacs学起来太难。在这里向这部分程序员推荐TextPad,这是一个符合Windows标准习惯的文本编辑器,且可以从http://www.textpad.com 得到。但需要注意,由于它是一个共享软件,所以在试用期后,如果还想使用,就需要缴纳费用。(我们和厂家没有任何关系,除了对其产品感觉满意之外。)

另一款流行的编辑器是JEdit,这是一个用Java编写的很好用的编辑器。可以在http://jedit.org上免费得到。无论使用Emacs、TextPad、JEdit,还是其他的编辑器,基本原理都是一样的。当编辑完源代码时,就可以发出命令对代码进行编译。编辑器启动编译器并捕获错误信息。然后修改错误、再重新编译,然后再发出一条命令来运行程序。

图2-7说明的是Emac编辑器编译Java程序的状态。(从菜单中选择JDE→Compile运行编译程序。)

错误信息在窗口的下半部分。把光标移到一个错误信息,再按下ENTER键,光标就会移到相应的源代码行上。

一旦修改完所有的错误,就可以从菜单中选择JDE→Run App运行程序了。输出信息也显示在编辑窗口的内部(如图2-8所示)。

运行图形化应用程序

Welcome程序并不会引起人们的特别兴奋。接下来,给出一个图形化应用程序。这个程序是一个简单的图像文件查看器(viewer),它可以加载并显示一个图像。首先从命令行编译并运行这个程序。

1)打开一个shell窗口。

2)将目录转到CoreJavaBook/v1ch2/ImageViewer。

3)输入:

javac ImageViewer.java

java ImageViewer

运行后将弹出一个标题栏为ImageViewer的新程序窗口(如图2-9所示)。

现在,选择File→Open,然后找到一个GIF文件并打开它。(我们在同一个目录下提供了两个示例文件。)

要想关闭这一程序,只需要点击标题栏中的关闭按钮或者从系统菜单中选择关闭程序。(要在文本编辑器中或集成开发环境中编译并运行程序,按照前面的步骤做就行了。例如,在Emacs中选择JDE→Compile,然后再选择JDE→Run App。)

现在一定会感觉这个程序既有趣又有用。下面快速地浏览一下源代码。这个程序比第一个程序要长得多,但是只要想一想用C或C++编写同样应用程序所需要的代码量,就不会感到它太复杂了。当然,在Visual Basic中,编写这个程序相当简单,只需要简单地拖放几下,再加上两行代码就行了。JDK没有可视化的界面构造器,所以必须通过编写代码来完成这一切工作,如例2-2所示。在本书中,将在第7章~第9章介绍编写图形化应用程序的内容。

例2-2 ImageViewer.java

建立并运行applet

本书给出的前两个程序是Java应用程序。它们与所有本地程序一样,可以独立地运行。然而,正如上一章提到的,有关Java的大量宣传都在炫耀Java能够在Web浏览器中运行applet的能力。

下面介绍一下如何利用命令行建立并运行applet。然后,利用JDK自带的applet查看器加载applet。

最后,在Web浏览器中显示。

首先,打开shell窗口并将目录转到CoreJavaBook/v1ch2/WelcomeApplet,然后,输入下面的命令:

javac WelcomeApplet.java

appletviewer WelcomeApplet.html

图2-10显示了在applet查看器窗口中显示的内容。

第一条命令是大家已经非常熟悉的调用Java编译器的命令。它将WelcomeApplet.java源文件编译成字节码文件WelcomeApplet.class。

然而,不要运行Java程序,而是调用appletviewer程序。这是JDK自带的一个特殊工具,它可以帮助我们快速地测试applet。这里需要向这个程序提供一个HTML文件,而不是Java类文件名。WelcomeApplet.html的内容请参看下面的例2-3。

例2-3 WelcomeApplet.html


如果熟悉HTML,就会注意到一些标准的HTML指令和applet标记,它们用于告诉applet查看器需要加载一个代码存放在WelcomeApplet.class中的applet。applet查看器将忽略applet标记之外的所有HTML标记。

当使用一个已经启用Java 2的浏览器查看HTML文件时,其他的HTML标记才能够显现出来。遗憾的是,浏览器的情况有点复杂。

? Mozilla(以及Netscape 6及以上的版本)在Windows、Linux 和Mac OS X环境下支持Java。要想试验一下applet,只需要下载这些浏览器的最新版本并确保Java被启用。

? Internet Explorer的某些版本根本不支持Java。其他也只支持Microsoft Java Virtual Machine的过时版本。如果在Windows环境下运行Internet Explorer,就需要从http://java.com 上下载并安装Java插件。

? 如果使用Macintosh 运行 OS X,那么Safari和Internet Explorer集成了Macintosh的Java实现。在编写本书时支持JDK 1.4。OS 9支持过时的版本1.1。

假定有一个支持Java 2平台的浏览器,可以在浏览器中试着加载applet。

1)启动浏览器。

2)选择File→Open File(或等效的操作)。

3)进入CoreJavaBook/v1ch2/WelcomeApplet目录。在文件对话框中,将会看到WelcomeApplet.html文件。加载这个文件,浏览器就加载了applet以及周边的文本。显示效果基本上如图2-11所示。

可能会发现这个应用程序是活动的,并且可以与Internet进行交互。点击Cay Horstmann按钮,applet会让浏览器显示Cay的网页。点击Gary Cornell按钮,applet会让浏览器弹出一个邮件窗口,其中包含已经填写好的Gary邮件地址。

需要注意,在查看器中的两个按钮都不起作用。

applet查看器没有能力发送邮件或显示一个网页,因此会忽略这里的操作请求。applet查看器适于用来单独地测试applet,但是,最终需要将applet放置到浏览器中,以便检测与浏览器以及Internet的交互情况。

最后,在例2-4中给出了这个applet的代码。现在,只要浏览一下就可以了。在第10章中,还会再次讲述applet的编写。

在本章中,学习了有关编译和运行Java程序的机制。现在可以转到第3章开始学习Java语言了。

例2-4 WelcomeApplet.java

觉得文章不错的话,可以转发此文关注小编,之后持续更新干货文章