java白皮书的关键术语
或者java相对于其他编程语言,有哪些特性?具体?
参考书籍:java核心技术第一卷
先来陈述一下java的发展简史:
java,1991年,Sun公司下的两位工程师,最初想设计一种“代码短小、紧凑、与平台无关”的计算机语言,并将这个项目命名为Green。这种需求促使开发团队联想到了早期的一种模型–Pascal的实现在早期的PC上尝试过这种模型:刚开始设计出的一种为假想的机器生成中间代码的可移植 语言 (假想的机器称为虚拟机–java虚拟机JVM的由来),这种中间代码可应用到所有安装解释器的机器上。Green的工程师也使用了虚拟机,从而解决了课题中的主要问题。
不过,Sun公司的人都有UNIX的背景,因此,所开发的语言是以c++为基础的,而不是Pascal,并将这种语言命名为java,然而,Green项目因没有找到买家,最后解散了。
随着web浏览器的盛行,java语言开发者意识到“我们能够建立一个最酷的浏览器。我们已经拥有在客户机/服务器主流模型中所需要的体系结构中立、实时、可靠、安全—这些在工作站环境并不太重要,所以,我们决定开发浏览器。”HotJava浏览器,开发比较成功,引起了人们对java的狂热追求。
作为java创始公司Sun趁势逐渐发布了java的java1.x版本等。
除了“标准版”(javaSE)之外, Sun还推出了两个其他的版本:一个是用于手机等嵌入式设备的“微型版”(javaME);另一个是用于服务器端处理的“企业版”(javaEE)。
讲到java的版本,在此补充一下java的相关术语:
术语名 | 缩写 | 解释 |
---|---|---|
Java Development Kit | JDK | 编写Java程序的程序员使用的软件 |
Java Runtime Environment | JRE | 运行Java程序的用户使用的软件 |
Standard Edition | JDK | 编写Java程序的程序员使用的软件 |
Java Development Kit | SE | 用于桌面或简单的服务器应用的Java平台 |
Enterprise Edition | EE | 用于复杂的服务器应用的Java平台 |
Micro Edition | ME | 用于微型手机cell phone和其他小型设备的Java平台 |
Java 2 | J2 | 一个过时的术语,用于描述1998年~2006年之间的Java版本 |
Software Development Kit | SDK | 一个过时的术语,用于描述1998年~2006年之间的JDK |
Update | u | Sun的术语,用于发布修改的bug |
NetBeans | Sun的集成开发环境 |
1 简单性
由java的发展史可以看到,java是基于c++开发的,不过java剔除了c++中许多很少使用的,难以理解的,易混淆的特性。如没有头文件,指针运算,结构,联合,操作符重载,虚基类等,但也保留了一些c++中不适当的特性,如switch。总而言之,java语言是易于理解由相对c++简单的语言。
java的发展史也说了,java的设计模型的原型是“代码短小、紧凑、与平台无关”,故代码短小是简单的另一方面,java基本解释器以及类支持大约仅为40KB,再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核)大约需要增加175KB。在当时,这是一个了不起的成就。当然,由于不断的扩展,类库已经相当庞大了。现在有一个独立的具有较小类库的Java微型版( Java Micro Edition)用于嵌入式设备。
2 面向对象
简单地说,面向对象是一种技术,它将重点放在数据(对象)和对象的接口上。在本质上, Java的面向对象能力与C++是一样的。Java与C++的主要不同点在于多继承,在Java中,取而代之的是简单的接口概念,以及Java的元类( metaclass)模型。
3 网络技能
java有一个扩展的例程库,用于处理http和ftp这样的tcp/ip协议,通过url打开和访问网络路径上的对象,和访问本地文件一样快捷。诸如socket,远程方法调用机制等
4 健壮性
java和c++最大的不同在于java采用的指针模型没有内存重写,损坏数据的隐患。
java不需要指针就能构造诸如字符串,数组这样的结构;且具有指针的能力,如链表,永远不会存取一个“坏的”指针,造成内存分配的错误,也不必防范内存泄漏。
5 安全性
从一开始java就被设计成防范各种攻击:
运行时堆栈溢出
在自己的处理空间之外破坏内存
未经授权读写文件
然后一系列的安全特性不断加入到java中,如数字签名等等。
6 体系结构中立
虚拟机的概念。
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有java运行系统,就可以在许多处理器上运行。java编辑器通过生成与特定计算机体系结构无关的字节码指令来实现这一特性,精心设计的字节码不仅可以很容易在各种机器上解释执行,还可以迅速翻译成本地机器代码。
7 可移植性
与c或c++不同,java规范中没有“依赖具体实现”的地方,基本数据类型的大小以及有关算法都做了明确的说明。
例如, Java中的int永远为32位的整数,而在C/C++中, int可能是16位整数、 32位整数,也可能是编译器提供商指定的其他大小。惟一的限制只是int类型的大小不能低于shortint,并且不能高于long int。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式进行的存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。
作为系统组成部分的类库,定义了可移植的接口。例如,有一个抽象的Window类给出了在UNIX、 Windows和Macintosh环境下的不同实现。
8 解释性
Java解释器可以在任何移植了解释器的机器上执行Java字节码。
事实上,早期的Java开发工具的速度相当慢。现在,使用即时编译器将字节码翻译成机器码。
9 高性能
10 多线程
多线程可以带来更好的交互响应和实时性。
java把多线程的实现交给了底层的操作系统或线程库来完成, 调用多线程的代码在不同机器上,完全相同。
尽管如此,多线程编译的简单性使java成为服务器端开发语言的原因之一。