博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Java基础第一讲:Java的故事和Java编程环境搭建

Posted on 2012-03-06 21:11  月不识己  阅读(310)  评论(0编辑  收藏  举报
RSS
 

Java基础第一讲:Java的故事和Java编程环境搭建

13SEP

java_lesson01

一、《Java基础讲座》前言:

学习Android如果Java基础不好,势必举步维艰,所以从今天开始连载《Android的Java基础讲座》。本系列讲座假想对象是Java没有任何基础的朋友。Java基础知识不是高科技,无数人都会,但是基础好的并不多,如何用清晰、简练、生动有趣的方式把Java的基础概念讲清楚,也比较困难。我能承诺的是用心去做、持续修订每一讲,本系列分35讲,具体目录可以看这里

二、Java的故事:

我们知道人可以使用程序软件来操控计算机的硬件来完成一些工作,而软件(程序)则是由某种编程语言编写的。Java就是这样一种正在广泛流行和使用的面向对象的编程语言,也是我们今后研究的重点语言。

1、Java的诞生

让我们把时空切换到1982年,那一年一个伟大的公司诞生于美国斯坦福大学校园,它的名字叫Sun Microsystems,直译的话叫太阳微系统公司,事实上Sun是Stanford University Network 的缩写。Sun在IT行业中被认为是最具创造性的企业。是极少数几个同时拥有自己微处理器、电脑系统、操作系统的公司。

1990年的一天,Sun的总裁麦克尼利(McNealy)听说他最好的一个工程师詹姆斯.高斯林(James Gosling)打算离职,他感觉事态很严重。直觉告诉他优秀的员工的离去意味着公司正在出大麻烦。麦克尼利必须找高斯林和其他员工好好谈谈,看看问题出在哪里。

这些员工的意见很一致。Sun公司本来是硅谷极为特殊的一个公司,以充满活力、富于创新著称。太阳微系统公司一直很尊重员工,尽量发挥他们的创造力和热情。但是,近年来,太阳微系统公司却越来越像成熟的大公司了。连哥斯林这样的人,公司也安排他去做一些为老系统写升级软件这种琐碎的工作。正在扼杀着太阳微系统公司员工的创新思想和工作热情。高斯林他们想做一些伟大的、革命性的事情,但在Sun公司现在的状况中是不可能实现的。

image 
Java的创造者 詹姆斯.高斯林(James Gosling)

随后,麦克尼利采取了一个大胆的举动,他让高斯林自己组建一个完全独立于公司的小组,由小组成员自己决定工作目标和进度。麦克尼利对哥斯林说:“我不管你们要做什么,要多少钱、多少人,也不管你们花多长时间做出来,公司都无条件支持。”

这个后来取名为“绿色小组”所要研究的产品就是十年后风靡IT界的数字家电、后PC设备和家庭网。事实证明,绿色小组的研究并不十分成功,直到2001年,Sun在数字家电方面的业绩并不很突出。但是,绿色小组的一个副产品,高斯林发明的Java程序设计语言,却深深改变了这个世界……

绿色小组成立之初只有4个人。他们有一个很模糊的想法,甚至连最终的目标产品是硬件还是软件也不知道。但是他们知道必须发明一些技术或者产品让Sun公司赶上信息领域的下一波大浪潮。

当时人类已经发明了很多种消费类电子产品,包括微机、手机、手持电脑、录相机、电视机、洗衣机、冰箱、微波炉等等。他们认为要将这些设备数字化并用网络互联讲是今后的方向(物联网?)。绿色小组将这个需求归结成两个产品原型目标,即发明一种手持遥控设备来实现所有家电设备的互联(硬件);发明一种程序设计语言,用它来编写能在这些设备上运行的小巧程序(软件)。

高斯林给当时设计了一种运行在虚拟机中的面向对象的语言,起名叫Oak(橡树,高斯林窗外的一颗树)。

image

但是申请注册上商标时,发现Oak被其他公司注册了,不得不重新起名。当时他们正在咖啡馆里喝着印尼爪哇(Java)岛出产的咖啡,有一个人灵机一动说就叫Java怎么样,并得到了其他人的赞赏,于是他们就将这种程序语言命名为Java。

java-logo

绿色小组的成员每周工作七天,平均每天工作12到14个小时,后期工程师们几乎住在实验室,没日没夜地干,只是每隔几天回家洗澡换衣服。三年以后他们制作出了第一台样机,尽管实现了基本功能,但造价在一万美元以上,尽管市场前景不明朗,技术上也还有很多问题,Sun公司的管理层还是用奖金和股权大大奖励了绿色小组的成员,并加大投入,努力实现产品化。

但是公司内外对其产品都不看好,市场也并不认可。绿色小组的成员在沮丧和失望中度过了整个1993年和1994年。在士气最低落的时候,大部分成员都离开了绿色小组,有的甚至离开了Sin公司。留下来的人也失去了工作热情。不少人每天早上11点钟上班,下午4点钟就离开了。有些人一天到晚只是玩游戏,还有的人则念学术论文。

在黑暗的日子里他们都期待着上天能眷顾他们这些苦命的人,期待着某种奇迹出现……

当时互联网已经出现了20年左右,但Ftp和Telnet的方式无法在科研人员之外的人群普及和应用,1994年一个名叫网景的公司推出了一种叫做Netscape浏览器的东西,加速了互联网的普及;高斯林他们意识到互联网是一个今后的发展方向。开始制作针对互联网的Java应用,希望会有所斩获。

1995年初的一天,高斯林和以往一样不停地参加各种会议以期让人们认可他们的产品,这次他参加的是“硅谷-好莱坞”互联网及娱乐业的研讨会。演讲刚开始是,大家对高斯林的讲解意兴阑珊,直到他将鼠标移向一个分子模型,这个分子模型动起来了,而且会随着鼠标的移动上下翻滚!场面立刻发生了逆转,会场一下子沸腾起来,人们惊叹不已、啧啧称奇。刹那间,人们对互联网的潜力进行了一番新的审视!也就在刹那间,这一批有影响力的人成了高斯林最忠实也是最有力的说客。

Java活下来了,并且成了互联网时代最强势、最具代表性的语言。

2、微软和Sun针对Java的世纪之战

Java特点是,一次编写,到处运行,可以适应于任何平台。而互联网就是这样一个可以是任意平台的超大网络。所以Java借着互联网快速发展的东风,扶摇而上,迅速穿红。

面对Java金矿,大家都跃跃欲试…… 这其中要数微软和Sun之间的斗争最为典型:

1996年9月的某一天,微软浏览器部门的主管艾达姆·波茨瓦斯几经考量之后,提笔给时任微软CEO的比尔·盖茨写了一邮件,他非常恳切地提醒比尔·盖茨注意一个正在形成的威胁。他写到:"必须意识到Java不仅仅是一种语言,如果它只是一种语言,我们愿意并且能够容易地为它建立最佳的表现形式,事情可以圆满解决了。但是事实上,Java绝不仅仅是一种语言,它是COM的替代者!" 而COM恰恰是Windows的编程模型。而Java编程很多时候比C++编程要容易的多,更致命的是他是跨平台的。波茨瓦斯也提出了对抗Java的方法,就是悄悄地为Java提供某些扩展,使得用Java 编写的程序能够在Windows中工作得更好,但是在其它平台上却不能运行。

盖茨显然被这封信吓坏了,他第二天就回信了:"这可把我吓坏了。我不清楚微软的操作系统要为Java的客户应用程序代码提供什么样的东西,而这些东西将足够让它来取代我们的市场地位。了解这一点非常重要,是应该最优先考虑的事情。"(没想到,这封信成为几年后司法部针对微软的反托拉斯案的呈堂证供。)

自此微软和Sun针对Java的世纪之战拉开了……

sun-vs-microsoft

第一回合:微软推出J++语言,并推出了Visual j++集成编程工具,对Java进行了大量的修改。1997年,Sun公司以歧视使用Java软件,旨在维持其视窗操作系统的垄断地位,违反反垄断法为由起诉微软,2001年1月,SUN胜诉,根据双方达成的和解协议,微软不得对Windows操作系统中包含的Java语言作任何改动,并获赔2000万美元。

第二回合:2001年年底,微软在推出新版操作系统Windows XP和新版IE时,故意不安装Java软件,并且推出自己仿造Java创造的语言C#和.net框架。2002年的3月8日,SUN公司向美国加州地区法庭提出起诉,称此举造成它直接经济损失高达10亿美元。2002年6月,微软干脆称从2004年起,因为安全原因微软的Windows操作系统将不再支持Java语言。

就在双方口水战日益升级之际,迎来了有关SUN诉微软案的第一次听证会。SUN起诉微软的听证会被安排在 2002年12月的第一周,当时,在巴尔的摩市下了近三年来最大的一场雪。整个城市几乎都停止运转。但是弗雷德里克·摩兹法官坚持要求开庭,并且要求几十位与案件有关的律师到场出席;据审判时一位目击者说,为了保证早上能够到庭,法官他自己在会议室中睡了一晚。

几周后,也就是2002年12月23日,摩兹法官发布了那份长达42页的判决书,他裁定微软公司必须在其Windows操作系统和IE中发布与其竞争的 Java编程语言。摩兹法官的意见是:在微软的垄断下,Java拥有一个并不健全的市场,比如说,大部分PC上所安装的Java软件要么就是旧版本,要么就是仅适用于Windows的版本,这使得其它软件开发者对Java平台产生了厌恶的情绪,这些都是因为微软反竞争行为的结果,看来微软已经利用Windows的垄断地位来破坏SUN对Java的销售渠道。树立市场正义的唯一方法是纠正微软的所作所为,"阻止微软从它过去的错误中获得将来的利益!"

针尖对麦芒的斗争一直在继续……

和解:2004年4月2日,两者达成和解协议微软将向Sun赔付20亿美元以消解旧怨,他们开始共同应对来自IBM和Linux的挑战。

从上面的故事中可能有同学认为Sun是正义的,微软是非正义的,是这样的吗?

我们可以再看看下面的故事……

3、Oracle和Google针对Java的再次对决

事实上,不止微软一家意识到Java是座金矿。Oracle是第二家从Sun手中购买Java许可证的公司,而IBM甚至比Sun更早的意识到Java在企业级应用方面的价值,在对Java支持上投入了巨大的精力,我们平时编写Java程序使用的Eclipse IDE集成编程环境,就是IBM主导开发、用以争夺Java领导权的重大举措(有空可以细讲IBM和Sun的恩恩怨怨,从Eclipse这个名字就可以看到其中的火药味)。

“和谐”的阴影:

IBM和Intel为了争夺Java的话语权,向Sun发出了新一轮的挑战,2005年他们支持Apache开源社区发起了一个叫做Harmony的项目,Harmony有个有趣的中文意思–和谐。

Harmony的目的有两个: 
1、在 Apache Licence v2 的许可之下,独立的(不阅读 Sun JDK 的源代码,仅仅根据 Java SE 5 specification)开发一个与 Java SE 兼容的 JDK。 
2、通过 Harmony 的开发社区,创建一个模块化的架构(包括虚拟机和类库)。该架构允许所有的独立开发项目可以共享运行时组件。

简单的说,Harmony就是让其他公司可以使用它来绕开SUN JDK的商业限制。Sun为了保持自己对Java的主导权,坚决不给Harmony 颁发JDK认证。

这让开源社区Apache和SUN发生了决裂……

“太阳”的终结:

Sun创造了Sparc、Solaris、Java等伟大的产品,Sun曾经风光无限,市值估价2000亿美金。Sun预测到网络就是计算机,可是真正的网络时代到来时,它却没有真正调整过来,不断的亏损和决策失误让它举步维艰。

2009年4月Oracle宣布以74亿美金收购Sun,2010年1月欧盟决定无条件同意这项收购,一个伟大公司就这样走到生命的尽头。

Java的创造者James Gosling在自己的博客贴出了一幅画,并写了一句话So long, old friend… (再见了,老朋友)image

(墓前站的是Linux的吉祥物Tux塔克斯和Java的吉祥物Duke杜克)

虽然Sun已经离去,Java还会继续前行……

“机器人”的小伎俩:

1998年Sun的共同创始人Andy Bechtolsheim给了斯坦福大学的两个学生一笔10万美金的天使投资,他们成立了一个小公司名字叫——Google。

image

2007年11月5日,已经成长为互联网领域内巨人的Google发布了一个叫做Android的手机操作系统平台。Android采用我们上面提到的Harmony来作为JDK(Java开发工具包)的替代品,使用Dalivk虚拟机来替代JVM(Java虚拟机),它这次从头至尾都没有说它用的是Java,可是所有的Java程序员都懂这就是Java ……

Oracle对Google的诉讼:

2010年8月12日,Java专利权的新主人Oracle指控Google在Android开发中“故意,直接并反复侵犯Oracle的Java相关的知识产权”,新一轮的斗争正在继续。

三、Java的版本演进

1995年5月23日 Java语言发布
1996年 1月,JDK1.0诞生, 
4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术, 
9月,约8.3万个网页应用了JAVA技术来制作
1997年2月18日 JDK1.1发布
1998年12月4日 JDK1.2(Java2)发布 
随后,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME),为Java今后的方向指明了道路。
2000年5月8日 J2SE1.3发布
2000年5月29日 J2SE1.4发布
2004年9月30日 J2SE1.5发布,成为Java语言发展史上的又一里程碑。 
为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0
2005年6月 Java SE 6.0发布。J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME

四、Java JDK 安装和编程环境搭建

接下来我们就开始学习这个改变了世界的编程语言。我们学打扑克牌需要先买一副扑克牌,然后打开牌盒先认认牌。学习一门语言的第一步就是搭建它的编程环境,然后写一个简单的Java程序的例子,简单了解一下。最后看看别人都用这个语言都弄出来些什么好玩的程序。

1、JDK的下载(Windows环境):

JDK的意思是Java Development Kit ,直译就是Java开发套件。JDK是我们学习Java必备工具。

我们可以从Oracle的网站可以下载最新版的JDK。

a、访问http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击Download JDK按钮

15I5XH53PVU40EVL{E2U6DO

b、在出来的页面中点击 Download 按钮

[J_U0VBNW`5DB4@)76D@{I8

c、在下面的页面中选择Platform为Windows,然后点击 Continue 按钮

$AFO)UY2%GX~{74}3WK0(3P

安装过程我就不演示了,只需要建议的是,可以把 JDK安装在类似 “C:\javasoft” 的目录中,而不是c:\program fileI下。

d、在接下来的页面里点击 带下划线的下载链接即可

ZRM3QMHJ]GU$07(2T(NW{)H

2、JDK的安装:

a、下面介绍一下安装步骤,双击下载回来的 jdk-6u21-windows-i586.exe,点击下一步

image

b、更改安装位置为 c:\javasoft\jdk1.6.0_21

image

c、稍等片刻

image

d、在选择JRE(Java Runtime Environment Java运行时环境)安装目录步骤时可以直接点下一步。

image

e、安装jre的过程中竟然有个OOo(OpenOfficeOrganization)的广告

image

f、再稍等一下就可以看到成功安装的提示

image

g、最后打开命令行窗口敲一个命令检查是否运行正常 java –version ,这是个查看Java版本号的命令,我们这次安装的是JDK 1.6 的 第21个更新包,所以看到的反馈应该是这样:

image

好吧,恭喜你完成了最重要的一步 ^_^ 。

3、环境变量

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等。Java的运行环境需要配置如下几个参数,JAVA_HOME,classpath和Path,下面简单叙述一下:

在“我的电脑”上点右键,在随后的菜单中选属性,可以看到系统属性选项卡,右下角就是“环境变量”按钮。

image

点击“新建…”:变量名写JAVA_HOME,变量值写 c:\javasoft\jdk1.6.0_21,这样就配置好了 JAVA_HOME,这个变量时其他JAVA程序约定俗称的寻找Java安装目录的依据。

@L]~L(F`~Z{T1UDHTKEBOIQ

找到变量Path,点击“编辑…”,在最前端加入“%JAVA_HOME%\bin;” 这样, 我们就可以在任何路径下使用java和javac命令了。

8RGH1A4M8O42(L3Z`ACU4`I

找到classpath,如果没有则新建一个。变量值为:“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar” ,留意一下最前面的”.”,它代表当前目录。 classpath的作用是让java虚拟机能够找到class文件的位置。

_I$_(FF5BGQE89%~@7L6TXE

配置完成后需要检测一下,运行cmd,敲命令 javac –version , 如果不报错,就说明配置成功了。

image

4、创建、编译和运行一个Java文件

a、我们建立一个目录,今后所有的实验都将在这里进行 “c:\workspace\java”

b、在java目录下建立今天课程的目录 lesson01,记住目录名小写

c、创建 Lesson01.java :建立一个名字叫 Lesson01.java 的文件,右键用Editplus打开(不会使用EditPlus的请自行搜索和学习使用,很简单不用怕)。在文件中写入:

1 class Lesson01{
2 }

@SJJ4)2BB~NY@35J)R]Q9BY

上面的代码你可以理解成:有个东西叫Lesson01

d、编译 Lesson01.java : 在命令行窗口(不了解命令行窗口的同学可以自行搜索并学习)中敲入如下命令

javac Lesson01.java

如果成功的话会没有任何提示,并且会出现一个名字叫 Lesson01.class 的文件,生成class的过程就是编译的过程。

DD_7H]UQ6A5088714NJH2L5

e、运行 Lesson01.class :在命令行窗口中敲入如下命令,

1 java Lesson01

提示如下图所示:意思是“在主线程中产生了一个叫做没有main这个方法的错误”

image

我们下面就来尝试修正这个错误,重新编辑 Lesson01.java ,内容如下:

1 class Lesson01{
2     public static void main(String[] args){
3         System.out.println("欢迎进入Java的世界!");
4     }
5 }

image

再次编译、运行,这次看到将是:

image

恭喜你成功完成了一个Java程序从创建、编译到运行的全过程,Java的世界就此向你展开。

六、Java虚拟机和Java程序运行原理

我们在命令行中运行一下 java –version ,看看结果:

image

注意它的反馈信息实际上有3行,分别是java sdk的版本,JRE的版本和 JVM的版本, 而Java HotSpot Client Virtual Machine 就是Sun公司开发的Java虚拟机。

那么什么是Java虚拟机?

Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。

Java程序的运行过程大致就是先吧Java源文件(后缀是.java的文件)编译成(.class)文件,然后再运行class文件。

七、Java程序演示(Demo)

Java可以做些什么,同学们可以先到java安装目录的demo子目录(C:\javasoft\jdk1.6.0_21\demo)中看一看,这就是个本节课的作业,大家去寻宝吧。

image

最后送大家一架钢琴,JavaSoundDemo.jar 这个小程序是我从Mac OS自带的JDK包目录里发现的,双击即可运行,鼠标放上去就会有音乐飘出,尽情的演奏吧^_^

image

这个文件我打包源文件里了,不用向我单独要。

本讲就到这里,Take your time and enjoy it 。

 

Tags: harmonyJames GoslingjavacJREJVMoak

Leave a Reply

 
 
  1. renxindj

    2010/08/06 at 10:11 am

    能不能把 PPT 和代码给我。谢谢,正在学习中!!

     
  2. renxindj

    2010/08/06 at 10:11 am

    邮箱是 renxindj@sina.com
    renxindj@msn.cn

     
  3. pospso

    2010/09/13 at 10:10 am

    挑个错误::“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\toos.jar”
    最后少了个L字母,应该为:
    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

     
    • Nebulayao

      2010/09/13 at 11:41 am

      感谢pospso指正,已修改。

       
  4. zzzrlhzl

    2010/09/21 at 9:48 am

    无意中发现,对我帮助很大,非常感谢作者的劳动

     
  5. ddtou

    2010/09/28 at 9:20 am

    感谢作者的辛勤劳动,写的非常地道,希望能顺利完成

     
  6. love214925

    2010/12/17 at 10:49 pm

    大虾,不是70天更新完吗?您也很忙吧,我这种菜鸟时刻关心着您呢

     
  7. kingsen_su

    2010/12/18 at 7:02 pm

    百度出来的 刚看完第一章 帮助很大 谢谢

     
  8. Jang

    2011/01/30 at 9:09 pm

    膜拜作者

     
  9. 3qverymuch

    2011/02/12 at 11:15 am

    多谢阿,正在学习。

     
  10. bamboo

    2011/02/12 at 2:29 pm

    感谢作者的辛勤劳动阿,帮助很大

     
  11. UP30

    2011/03/30 at 6:10 pm

    请问代码在哪里下载呢?谢谢

     
  12. alanpo

    2011/04/14 at 9:07 am

    Thank you!

     
  13. Vincent

    2011/04/21 at 10:34 pm

    Very good, Thanks

     
  14. winnie

    2011/05/01 at 11:53 pm

    按照您说方式配置变量,但是执行javac的时候总是出现“’javac’ 不是内部或外部命令,也不是可运行的程序或批处理文件。”
    不知道到底是什么地方出了错,希望有人帮我!

    calsspath
    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

    path
    %JAVA_HOME%\bin; (这个后面是path之前的值)

    JAVA_HOME
    c:\javasoft\jdk1.6.0_21

     
    • winnie

      2011/05/03 at 10:42 pm

      没有人回答我啊?!

       
      • safelong

        2011/05/04 at 3:35 pm

        你在dos操作下,用cd命令进入%JAVA_HOME%\bin,运行一下javac,如果成功,退出%JAVA_HOME%\bin目录,再试试看

         
        • Keung

          2011/05/30 at 8:35 pm

          我也遇到同样的问题,按照你的方法 (用cd命令进入%JAVA_HOME%\bin,运行一下javac) 试了之后成功了,但退出%JAVA_HOME%\bin目录后比如c盘根目录后再执行的话就不行了。不知是为什么。高手请指点迷津呀。

           
          • keung

            2011/06/07 at 10:40 pm

            我重装了系统,再试一下,不知为什么竟然又可以啦。

             
      • liguixu

        2011/11/14 at 1:01 pm

        是不是命令错了 java完以后要有个空格 这样你在式下

         
  15. shely

    2011/06/30 at 2:04 pm

    感谢作者的辛勤劳动阿,帮助很大

     
    • jenny

      2011/07/19 at 12:44 pm

      按照文中讲解配置环境变量,运行javac -version时提示“’javac’ 不是内部或外部命令,***”,最后将环境变量中的%JAVA_HOME%替换成具体的地址“D:\Java\jdk1.6.0_10”就OK了,诡异,但也是个方法,分享下。另,讲得好清楚呀,谢谢谢谢~~~

       
  16. james

    2011/09/15 at 11:14 pm

    very good!

     
  17. 海若痕

    2011/09/21 at 9:22 pm

    WIN7下JAVA装好了,编译时找不到文件

     
    • liguixu

      2011/11/14 at 1:02 pm

      我也是找不到 求解