java发展史与java的语言特性

概述:

Java 体系比较庞杂,功能繁多,这也导致很多人在自学 Java 的时候总是感觉无法建立

全面的知识体系, 无法从整体上把握Java 的原因。 在这里我们先简单了解一下Java 的版本。

具体的Java 体系知识结构,将在后面详细讲述。

Java 分成三种版本,分别是Java 标准版(JavaSE)、Java 微缩版(JavaME)和Java 企业版(JavaEE),

每一种版本都有自己的功能和应用方向。

1:Java标准版: JavaSE(Java Standard Edition)

JavaSE(Java  Standard  Edition)是 Sun公司针对桌面开发以及低端商务计算解决方案而开

发的版本,例如:我们平常熟悉的Application 桌面应用程序。这个版本是个基础,它也是

我们平常开发和使用最多的技术,Java 的主要的技术将在这个版本中体现。本书主要讲的

就是JavaSE。

2:Java微缩版:JavaME(Java Micro Edition)

JavaME(Java ,Micro Edition) 是对标准版JavaSE 进行功能缩减后的版本,于1999 年 6月

由Sun Microsystems第一次推向Java团体。它是一项能更好满足 Java开发人员不同需求

的广泛倡议的一部分。Sun Microsystems 将 JavaME 定义为“一种以广泛的消费性产品为目标

的高度优化的Java 运行时环境,包括寻呼机、移动电话、可视电话、数字机顶盒和汽车导

航系统。 ”

JavaME 是致力于消费产品和嵌入式设备的开发人员的最佳选择。尽管早期人们对它看好而

且 Java 开发人员团体中的热衷人士也不少,然而,JavaME 最近才开始从其影响更大的同属产

品JavaEE和JavaSE 的阴影中走出其不成熟期。

JavaME在开发面向内存有限的移动终端(例如寻呼机、 移动电话)的应用时,显得尤其实用。

因为它是建立在操作系统之上的,使得应用的开发无须考虑太多特殊的硬件配置类型或操作

系统。因此,开发商也无须为不同的终端建立特殊的应用,制造商也只需要简单地使它们的

操作平台可以支持JavaME 便可。

3:Java企业版:JavaEE(Java Enterprise Edition)

JavaEE(Java Enterprise Edition)是一种利用 Java 平台来简化企业解决方案的开发、部

署和管理相关的复杂问题的体系结构。JavaEE技术的基础就是核心 Java平台或 Java平台的标

准版,JavaEE 不仅巩固了标准版中的许多优点,例如“编写一次、随处运行”的特性、方便存

取数据库的 JDBC API、CORBA 技术以及能够在 Internet 应用中保护数据的安全模式等等,

同时还提供了对EJB(Enterprise  Java  Beans)、 Java  Servlets  API、 JSP(Java  Server  Pages)

以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时

间的体系结构。

JavaEE体系结构提供中间层集成框架来满足无需太多费用而又需要高可用性、高可靠性以

及可扩展性的应用的需求。通过提供统一的开发平台,JavaEE 降低了开发多层应用的费用和复

杂性,同时提供对现有应用程序集成强有力支持,完全支持 Enterprise Java Beans,有良

好的向导支持打包和部署应用,添加了目录支持,增强了安全机制,提高了性能。

JavaEE 是对标准版进行功能扩展,提供一系列功能,用来解决进行企业应用开发中所面临

的复杂的问题。具体的我们会放到后面JavaEE 的课程去讲。

4:三个版本之间的关系

JavaEE(JavaEE) 几乎完全包含JavaSE 的功能,然后在JavaSE 的基础上添加了很多新的功能。

JavaME(JavaME)主要是JavaSE的功能子集,然后再加上一部分额外添加的功能。

如下图所示:

java发展史与java的语言特性

Java的API类库之中有一组所谓的核心类(CoreClass,即 java.*),在核心类之外还有

所谓的扩充类(Extended  Class,即javax.*)。根据对这两种类的支持程度,进而区分出几

种不同的Java 版本。

我们必须以Java Standard Edition(JavaSE)作为基准,这个版本做了所有 Java标准规格

之中所定义的核心类,也支持所有的 Java基本类。JavaSE定位在客户端程序的应用上。

从 JavaSE 往外延伸,其外面为 Java Enterprise Edition(JavaEE),此版本除了支持所有的

标准核心类外,而且还增加了许多支持企业内部使用的扩充类,支持 Servlet/JSP 的

javax.servlet.* 类、支持 Enterprise Java Bean的 javax.ejb.* 类。当然,JavaEE 必定支

持所有的Java 基本类。JavaEE定位在服务器端(server-side)程序的应用上。

从JavaSE向内看,是Java  Micro  Edition(JavaME),它所支持的只有核心类的子集合,在JavaME

CLDC的规格之中,只支持java.lang.* 、java.io.* 、以及 java.util.* 这些类。此版本

也增加了一些支持“微小装置”的扩充类,如 javax.microedition.io.* 类。然而,此版

本并不支持所有的 Java 基本类,就标准的 JMECLDC, 也就是能在 PalmOS 上执行的

KVM(KVirtualMachine)来说,它就不支持属于浮点数(float、double)的 Java 基本类。JavaME

定位在嵌入式系统的应用上。

最里层,还有一个Java的Smart  Card版本,原本在Java的文件之中并没有这样定义,

但是将它画在JavaME内部是很合理的。因为 SmartCard版本只支持 java.lang.* 这个核心类,

比起JavaME所支持的核心类更少,但它也有属于自己的扩充类,如 javacard.*、javacardx.*

这些类。 SmartCard版本只支持Boolean与Byte这两种Java基本类, 此版本定位在SmartCard

的应用上。

java的前期:

1:Java历史

在上世纪 90 年代初,sun 公司有一个叫做 Green 的项目,目的是为家用消费电子产品

开发一个分布式代码系统,这样就可以对家用电器进行控制,和它们进行信息交流。詹姆

斯·高斯林(James  Gosling)等人基于 C++开发一种新的语言 Oak(Java 的前身)。Oak是一

种用于网络的精巧而安全的语言。 Sun 公司曾依此投标一个交互式电视项目,但结果是被 SGI

打败,Sun 打算抛弃 Oak。随着互联网的发展,Sun 看到了 Oak 在计算机网络上的广阔应用

前景,于是改造Oak,在1995 年5月以“Java”的名称正式发布,从此 Java走上繁荣之路。

当然提到 Java 历史,不得不提的一个故事就是 Java 的命名。开始“Oak”的命名是以

项目小组办公室外的树而得名,但是 Oak 商标被其他公司注册了,必须另外取一个名字,

传说有一天,几位 Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在

咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫 Java 怎样,得到了其他人的赞同,

于是,Java这个名字就这样传开了。当然对于传说,了解一下就好了,不必过于认真。

2:Java大事记

JavaEE

JavaSE

JavaME

作为学习Java 的人士,对Java 历史上发生的大事件有一个了解是应该的。

JDK(Java Software Develop Kit) :Java 软件开发工具包。JDK 是 Java 的核心,包

括了Java运行环境,一系列 Java开发工具和 Java基础的类库。目前主流的 JDK 是 Sun 公

司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的 JDK,例如 IBM公司开

发的JDK,BEA 公司的Jrocket,还有GNU组织开发的JDK 等等。

时间                                         事件

1995年5 月23日                         Java 语言诞生

1996年1 月                                第一个JDK—JDK1.0诞生

1997年2 月18日                          JDK1.1发布

1998年12月8日                           Java2 企业平台J2EE发布

1999年6 月                                Sun发布 Java 三个版本:标准版J2SE,企业版 J2EE,微型版J2ME

2004年9 月30日                          JavaSE5.0发布

2006年12 月                              JavaSE6.0发布

3:Java特点

简单地说,Java 具有如下特点:简单的、面向对象、平台无关、多线程、分布式、安全、高性能、可靠的、解释型、自动垃圾回收等特点。

这里只解释一下平台无关和分布式,其余的在后面会逐步接触到。

3.1:平台无关

所谓平台无关指的是:用 Java 写的程序不用修改就可在不同的软硬件平台上运行。这

样就能实现同样的程序既可以在Windows 下运行,到了 Unix 或者 Linux 环境不用修改就直

接可以运行了。Java主要靠Java虚拟机(JVM)实现平台无关性。

平台无关性就是一次编写,到处运行:Write Once, Run Anywhere

3.2:分布式

分布式指的是:软件由很多个可以独立执行的模块组成,这些模块被分布在多台计算机

上,可以同时运行,对外看起来还是一个整体。也就是说,分布式能够把多台计算机集合起

来就像一台计算机一样,从而提供更好的性能。

4:Java标准组织——JCP

JCP(Java Community Process) 是一个开放的国际组织,成立于 1995 年,主要职能

是发展和更新 Java 技术规范、参考实现(RI) 、技术兼容包(TCK) 。Java 技术和 JCP 两者

的原创者都是 SUN计算机公司。组织成员可以提交 JSR(Java Specification Requests) ,

通过讨论、认可、审核以后,将进入到下一版本的规范里面。

也就是说JCP 是目前Java技术发展事实上的控制者和领导者。

java语言的特性:

高级语言执行方式分为两种:一种是编译型,一种是解释型。

编译型:将高级语言一次性翻译成机器代码,可以脱离开发环境运行,通常运行效率比较高。但是难以移植,C/C++、Pascal属于编译型语言。

解释型:用特定的解释器对源程序逐行解释成机器代码并立即执行,不会进行整体的编译和链接处理。效率低,但是跨平台比较容易。Ruby、Python都属于解释型语言。

Java语言比较特殊,他需要经过编译,但是会生成一种与平台无关的字节码(.class文件),这种字节码需要用java解析器来执行。java可以看作即是编译型也是解释型的语言。java中负责执行字节码的就是虚拟机JVM。java生成的代码不面向任何平台,它只面向虚拟机,所以只要在特定平台上安装了JVM,便可运行java程序。相同的字节码是无法在不同的平台上运行的,JVM就相当于一个转换器,它的作用如下

java发展史与java的语言特性

JDK包含了JRE,而JRE就包含了java虚拟机。一个空类是可以被编译通过的,但是没法被执行通过,因为java中一个类要能被JVM执行,必须要包含main方法。

java与C、C++的区别:C++中需要自己回收动态分配的内存,这样往往不安全,容易造成内存泄漏。而java具有自动的垃圾回收机制(垃圾回收成为GC),java中的内存分配和回收都是JRE在后台自动完成的。JRE会自动回收那些不再使用的内存,通常JRE会提供一条超级线程来检测和控制,让CPU在空闲时或者内存不足时进行垃圾回收。java虚拟机的堆内存存放着正在运行的应用程序所创建的所有对象,这些对象通过垃圾回收机制来回收。当一个对象不再被引用的时候,JVM的一个超级线程便会释放这个空间。垃圾回收器还会整理内存中的记录碎片,然后把整理出来的内存分配给新的对象。垃圾回收使得java比C++更加安全。为了让垃圾回收机制更快的回收垃圾,当我们的对象不再使用时,将它的引用设置为null,这样可以暗示垃圾回收机制回收该对象。程序员也可以通过调用对象的finalize()或System.gc()来让系统进行垃圾回收,但只是建议。

面向过程语言与面向对象语言的区别:面向过程语言的不够直观,与人类的思维不够一致,其适应性差,可扩展性不强,当用户需求发生改变的时候,需要修改很多模块,它的维护成本非常大。而面向对象语言更加符合人类的思维,其可重用性、扩展性、可维护性更强,适用于开发大型软件。

C或C++中允许用goto语句让程序的控制流从一处转向另一处,这样使得程序的结构十分混乱。而java中去掉了goto语句,将goto语句作为保留字(也就是现在没有goto,也许以后会有)。

面向对象的三大特征:封装、继承、多态。封装就是将对象的实现细节隐藏起来,然后用一些公用的方法将对象的功能暴露出来。多态指的是子类的对象可以赋给父类变量,但是在运行的时候能够表现出子类的特征,这意味着同一类型的对象在运行时可能表现出不同的特征。

类的封装性:将各种信息细节隐藏起来,并通过公用方法来暴露该类对外所提供的功能。

继承:类之间共享属性和操作的机制叫做继承。java只支持单继承。

类的属性就是对对象的状态的抽象,类的操作就是对对象的为的抽象。

继承:属于is-a的关系

组合:属于has-a的关系,表现为在一个类里保存另一个对象的引用。

API文档:就是用来说明每个类、方法的功能,方便编程人员的调用。用注释/**             */,然后利用命令javadoc可以生成API文档.

上一篇:成都PC网站建设需要考虑哪些费用呢


下一篇:Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门