Java入门(二)--Java语言介绍

Java历史

  1. Java的产生
    Java来自于Sun公司的一个叫Green的项目, 其原先的目的是为家用消费电 子产品开发一个分布式代码系统, 这样我们可以把E-mail发给电冰箱、 电视机等家用电器, 对它们进行控制, 和它们进行信息交流。开始, 准备采用C++,但C++太 复杂, 安全性差, 最后基于C++开发一种新的语言Oak(Java的前身), Oak是一种用于网络的 精巧而安全的语言, Sun公司曾依此投标一个交互式电视项目, 但结果是被SGI打败。 可怜的Oak几乎无家可归, 恰巧这时Mark Ardreesen开发的Mosaic和Netscape启发了Oak项 目组成员, 他们用Java编制了HotJava浏览器, 得到了Sun公司首席执行官Scott McNealy的 支持, 触发了Java进军Internet。 Java的取名也有一些趣闻, 有一天, 几位Java成员组的 会员正在讨论给这个新的语言取什么名字, 当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一 个人灵机一动说就叫Java怎样, 得到了其他人的赞赏, 于是, Java这个名字就这样传开了 。

  2. Java的历史:
    1995年5月23日,Java语言诞生
    1996年1月,第一个JDK-JDK1.0诞生
    1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
    1996年9月,约8.3万个网页应用了JAVA技术来制作
    1997年2月18日,JDK1.1发布
    1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
    1997年9月,JavaDeveloperConnection社区成员超过十万
    1998年2月,JDK1.1被下载超过2,000,000次
    1998年12月8日,JAVA2企业平台J2EE发布
    1999年6月,SUN公司发布Java的三个版本:标准版、企业版和微型版(J2SE、J2EE、J2ME)
    2000年5月8日,JDK1.3发布
    2000年5月29日,JDK1.4发布
    2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
    2001年9月24日,J2EE1.3发布
    2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
    2004年9月30日18:00PM,J2SE1.5发布,是Java语言的发展史上的又一里程碑事件。为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0

  3. Java与微软MS的爱恨情仇
    Java诞生的1995年,正是微软在软件产业地位达到巅峰的时代,Windows 95发布时的风光场面给人们留下的深刻印象至今难忘。尽管如此,作为最卓越的技术领袖,比尔?盖茨仍然敏锐地注意到Java。当他了解了Java的一些细节之后,给予了这样的评价:“Java是很长时间以来最优秀的程序设计语言。”基于此,微软于1996年3月申请并获得了Java许可证。微软对于Java的这一热情态度在当时大大提高了人们对Java的兴趣和信心,但也有不少人担心微软会依靠自己强大的影响力在标准之外另立标准,从而破坏Java的纯洁性。
    果然,从1997年发布Visual J++的第一个版本开始,微软就开始在Java中掺入自己的私有扩展。这毫无疑问引起Sun的高度重视。1997年10月,Sun向美国加州地方法院起诉微软公司违反两公司就微软使用Java技术所签定的合同,指控微软公司在自己的Java产品中做了“不恰当的修改”,违反了合同中承诺向用户提供Java兼容产品的条款。这一官司旷日持久,直到2001年1月双方达成和解,微软将继续提供采用Sun开发的Java技术的现有产品(包括测试版)。不过,Sun有限制地仅对包括Java 1.1.4的微软产品提供许可。到了2001年7月,微软公布新版的Windows XP将不再支持Sun的JVM,并且推出了.NET平台与Java分庭抗礼。
    现在回过头去看,当时的这一场官司对Java世界产生了深远的影响。如果没有这一场官司,也许很多Java程序员都在使用Visual J++,基于WFC开发Windows客户端程序,同时不得不面对被两个不同的事实标准所分裂的Java世界。

  4. 资料来源
    Java的产生与历史
    Java 20年:历史与未来

Java开发环境

JDK与JRE

JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。
如果安装了JDK,会发同你的电脑有两套JRE,一套位于 \jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15 目录下,后面这套比前面那套少了Server端的Java虚拟机,不过直接将前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可以选择是否安装这个位于 C:\Program Files\Java 目录下的JRE。如果你只安装JRE,而不是JDK,那么只会在 C:\Program Files\Java 目录下安装唯一的一套JRE。
JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。所以当你装完JDK后,如果分别在硬盘上的两个不同地方安装了两套JRE,那么你可以想象你的电脑有两台虚拟的Java PC机,都具有运行Java程序的功能。所以我们可以说,只要你的电脑安装了JRE,就可以正确运行Java应用程序。

  1. 为什么Sun要让JDK安装两套相同的JRE?
    这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在 \lib\tools.jar 里。从下面例子可以看出,先将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果: Exception in thread “main” java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 这个意思是说,你输入javac.exe与输入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一样的,会得到相同的结果。从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现\lib目录下的程序都很小,不大于29K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:\Program Files\Java目录下的那套JRE就是用来运行一般Java程序用的。
  2. 如果一台电脑安装两套以上的JRE,谁来决定呢?
    这个重大任务就落在java.exe身上。Java.exe的工作就是找到合适的JRE来运行Java程序。 Java.exe依照底下的顺序来查找JRE:自己的目录下有没有JRE;父目录有没有JRE;查询注册表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。

详细参考:
http://developer.51cto.com/art/200808/85286.htm
https://www.zhihu.com/question/20317448
http://www.cnblogs.com/myitm/archive/2011/05/03/2035942.html

JAVA_HOME

作用
  1. 为了方便引用,比如,你JDK安装在C:\Program Files\Java\jdk1.6.0目录里,则设置JAVA_HOME为该目录路径, 那么以后你要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串;
  2. 归一原则, 当你JDK路径被迫改变的时候, 你仅需更改JAVA_HOME的变量值即可, 否则,你就要更改任何用绝对路径引用JDK目录的文档, 要是万一你没有改全, 某个程序找不到JDK, 后果是可想而知的—-系统崩溃! 比如你开发的时候切换jdk版本。
  3. 第三方软件会引用约定好的JAVA_HOME变量, 不然, 你将不能正常使用该软件, 以后用JAVA久了就会知道, 要是某个软件不能正常使用, 不妨想想是不是这个问题, 比如tomcat。
配置过程

http://blog.csdn.net/javahuangfang/article/details/7482487
http://bbs.csdn.net/topics/340232733
https://www.zhihu.com/question/20779183

Path与ClassPath

作用
  1. 设置CLASSPATH
    这 是一个很有趣,当然也比较折磨初学者的问题, 这个变量设置的目的是为了程序能找到相应的”.class”文件, 不妨举个例子: 你编译一个JAVA程序—A.java, 会得到一个A.class的类文件,你在当前目录下执行java A, 将会得到相应的结果(前提是你已经设置CLASSPATH为”.”). 现在, 你把A.class移到别的目录下(例如:”e:\”), 执行java A, 将会有NoClassDefFindError的异常,原因就是找不到.class文件, 现在你把CLASSPATH增加为:”.;e:\”再运行java A, 看看会有什么结果:)~, 一切正常, java命令通过CLASSPATH找到了.class文件!
  2. 设置PATH
    道理很简单, 你想在任何时候都使用%JAVA_HOME%\bin\java 等来执行java命令吗, 当然不会, 于是, 你可以选择把 %JAVA_HOME%\bin添加到PATH路径下, 这样, 我们在任何路径下就可以仅用java来执行命令了.(当你在命令提示符窗口输入你个代码时,操作系统会在当前目录和PATH变量目录里查找相应的应用程序, 并且执行.
关于Path的另外一点说明和使用

windows操作系统或者linux都会有这么一个东西,之所以存在我的理解是:因为OS要管理的Program非常多,经常存在Pa调用Pb的问题,并且大部分时候Pa、Pb可能在一个目录下,比如system32,这样的话,程序调用起来如果每次都是全路径,很傻,当人用shell的时候再输入路径尤其反人类,因此将设置了一个Path的环境变量。OS会在启动的时候读取该变量,在shell里面输入的时候如果当前路径找不到就会去Path里面去找,如果找不到再报错。Path可以有好多个,每个以分号隔开。
基于此,我们可以把常用的程序(比如QQ,Wechat,Wiz,Foxmail等)的快捷方式放到一个统一的目录下面,然后将该目录设置到Path里面,这样在Win+R调出来的运行里面就可以直接输入快捷方式的名字就可以启动了。当我们有新的程序时,直接把快捷方式发送到这个目录,这个程序就可以启动。当然,可以将快捷方式名字改的简单点,比如foxmail改为mail之类的。

Javac与Java

JavaDoc

JDE

Java反编译工具介绍

Eclipse使用

再论HelloJava

在E:test/com/hello包下编写如下HelloWorld类:

public class HelloWorld {
    public static void main(String[] args) {
         System.out.println("HelloWorld : hello world");
    }
}

在类所在的目录下编译运行:
命令行切换到E:test/com/hello
配置环境变量情况下:
编译 javac HelloWorld.java
运行 java HelloWorld
结果 HelloWorld : hello world
未配置环境变量情况下:
因为Program Files中间有空格,所以要加双引号
编译 “C:\Program Files\Java\jdk1.8.0_45\bin\javac” helloWorld.java
因为安装jdk过程中,会把java.exe文件拷贝到系统环境变量下,所以这里可以直接用
因为运行时直接加载的是类的.class文件,所以后缀不带.java,所以运行时可以没有源文件。
运行 java HelloWorld
结果 HelloWorld : hello world

带有包的helloWorld的编译运行

在E:test/com/hello包下编写如下HelloWorld类:

package hello
public class HelloWorld {
    public static void main(String[] args) {
         System.out.println("HelloWorld : hello world");
    }
}

在类所在的目录下编译运行:
命令行切换到E:test/com
编译 javac hello/HelloWorld.java
运行时要返回包名所在目录(即E:test/com)
运行 java hello/HelloWorld(或hello.HelloWorld,亲试,两者都可以)
结果 HelloWorld : hello world
未配置环境变量情况下:
编译 “C:\Program Files\Java\jdk1.8.0_45\bin\javac” hello/HelloWorld.java
运行 java hello/HelloWorld
结果 HelloWorld : hello world

引用其他类的helloWorld的编译运行

在同一个包下,引用没有包名类
在E:test/com/hello包下编写如下HelloWorld类:

public class Hello {
    public void hello() {
         System.out.println("HelloWorld : hello world");
    }
}

在E:test/com/hello包下编写如下HelloWorld类:

public class HelloWorld {
    public static void main(String[] args) {
         Hello hello = new Hello();
         hello.hello();
    }
}

在类所在的目录下编译运行:
命令行切换到E:test/com/hello
可以直接编译运行类,会自动编译引用类
不可以直接运行,运行前必须先编译。
编译 javac HelloWorld.java
运行 java HelloWorld
结果 HelloWorld : hello world

引用有包名的helloWorld类的编译运行

在E:test/other/hello包下编写如下HelloWorld类:

package hello;
public class Hello {
    public void hello() {
         System.out.println("HelloWorld : hello world");
    }
}

在E:test/com/helloworld包下编写如下HelloWorld类:

package helloworld;
import hello.Hello;
public class HelloWorld {
    public static void main(String[] args) {
         Hello hello = new Hello();
         hello.hello();
    }
}

切换到包的上级目录,E:test/com
配置环境变量情况下:
编译 javac -classpath ../other; helloworld/HelloWorld.java
如果在其他盘比如D:home/hello/Hello.java则
编译 javac -classpath D:home/; helloworld/HelloWorld.java
运行同样
运行 java -classpath ../other; helloworld/HelloWorld
结果 HelloWorld : hello world
未配置环境变量情况下:
编译 “C:\Program Files\Java\jdk1.8.0_45\bin\javac” helloworld/helloWorld.java
运行 java helloworld/HelloWorld
结果 HelloWorld : hello world

引用在jar包中的helloWorld类的编译运行

在E:test/com/hello包下编写如下HelloWorld类:

package hello;
public class Hello {
    public void hello() {
         System.out.println("HelloWorld : hello world");
    }
}

把包及包中的类打成jar包Hello.jar,放在任意目录下,这里放在E:test/com下
在E:test/com/helloworld包下编写如下HelloWorld类:

package helloworld;
import hello.Hello;
public class HelloWorld {
    public static void main(String[] args) {
         Hello hello = new Hello();
         hello.hello();
    }
}

切换到包的上级目录,E:test/com
配置环境变量情况下:
编译 javac -classpath Hello.jar; helloworld/HelloWorld.java
运行 java -classpath Hello.jar; helloworld.HelloWorld(运行时classpath最后要有分号)
结果 HelloWorld : hello world

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值