前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java白皮书摘要

Java白皮书摘要

作者头像
地鼠窝里有个Gopher
发布2022-10-30 14:32:14
2670
发布2022-10-30 14:32:14
举报

  这两节主要介绍了Java的历史,以及对Java的各种特性做了一个全面的概括性介绍,可以让我们窥得Java的全貌。

Core Java笔记1.1、1.2节

第1章 Java程序设计概述

1.1 Java程序设计平台

1.1.1 Java的历史

  Java的前身是Oak。20世纪90年代,研究人员为了避免C++在嵌入式设备中的复杂、庞大等劣势,着手开发了一个新的面向对象的编程语言Oak。   Oak当时主要用于嵌入式设备。但在当时所有公司对Oak语言还一无所知的情况下,就生产硬件产品的风险实在太大了,所以Oak语言也就因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。   到了1993年,Mosaic浏览器横空出世,它是互联网历史上第一个获普遍使用的网页浏览器。Mosaic的出现,点燃了之后互联网热潮的火种。   研发人员们认为,认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。于是1994年6、7月间,在经历了一场历时三天的讨论之后,团队决定再一次改变了努力的目标这次他们决定将该技术应用于万维网。作为原型,帕特里克·诺顿写了一个小型万维网浏览器WebRunner。   1995年,互联网的蓬勃发展给了Oak机会。业界为了使死板、单调的静态网页能够“灵活”起来,急需一种软件技术来开发一种程序,这种程序可以通过网络传播并且能够跨平台运行。这个时候,Sun公司想起了那个被搁置起来很久的Oak,并且重新审视了那个用软件编写的试验平台,由于它是按照嵌入式系统硬件平台体系结构进行编写的,所以非常小,特别适用于网络上的传输系统,而Oak也是一种精简的语言,程序非常小,适合在网络上传输。   Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的Applet(Applet是一种将小程序嵌入到网页中进行执行的技术),并将Oak更名为Java(在申请注册商标时,发现Oak已经被人使用了,再想了一系列名字之后,最终,使用了提议者在喝一杯Java咖啡时无意提到的Java词语)。1995年5月23日,Sun公司在Sun world会议上正式发布Java和HotJava浏览器。   至此,由于看到了Java的强大优势,IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微软等各大公司都纷纷停止了自己的相关开发项目,竞相购买了Java使用许可证,并为自己的产品开发了相应的Java平台。 1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。9月,约8.3万个网页应用了Java技术来制作。10月,Sun公司发布了Java平台的第一个即时(JIT)编译器。

1.1.2 Java简介

  Java并不只是一种语言,之前出现的许多语言也没能引起那么大的轰动。Java是一个完整的平台,有一个庞大的库,其中包含了许多可重用代码和一个提供诸如安全性、跨操作系统的可移植性以及GC等服务的执行环境。   相比C++,Java具有更令人赏心悦目的语法和更易于理解的语义。与此同时,Java本身不仅提供了可移植性、垃圾收集等功能,而且还提供了一个大型的库。所以可以说Java是一种功能齐全的出色语言,是一个高质量的执行环境,还提供了一个庞大的库。因此Java对广大程序员有着不可抗拒的吸引力。

1.2 Java“白皮书”的关键术语

  包括詹姆斯高斯林在内的Java的设计者们,在1996年编写了颇具影响力的“白皮书”,用于解释Java设计的初衷以及完成情况,并发布了一个简短的摘要,其中重点包括:

  1. 简单性(Simple and Familiar)
  2. 面向对象
  3. 分布式
  4. 健壮性(鲁棒性)
  5. 安全性
  6. 体系结构中立
  7. 可移植性
  8. 解释型
  9. 高性能
  10. 多线程
  11. 动态性

1.2.1 简单性(Simple and Familiar)

  • 这是一个无需深奥的专业训练就可以进行编程的系统。
  • 省去了C++中诸如头文件、指针、结构体、联合Union、运算符重载、虚基类等复杂的规则。
  • Java的目标之一是在微型设备上运行。它的基本解释器及类支持仅40KB,加上标准类库和线程的支持仅增加175KB,这在当时是了不起的成就(现在是Java Micro Edition)。

1.2.2 面向对象

  • 本质上,Java面向对象的能力和C++是一样的,在开发Java时,面向对象技术已经成熟。Java面向对象的特性与C++旗鼓相当。
  • Java与C++主要的不同在于多继承,Java中,取而代之的是接口Interface的概念。

1.2.3 分布式

  • Java有一个丰富的例程库,可以处理HTTP和FTP之列的TCP/IP协议。
  • Java程序可以通过URL打开和访问网络上的对象,其便捷程度就像访问本地文件一样。

1.2.4 健壮性(鲁棒性)

  • Java进行了大量早期的问题检测(Java编译器能在编译时检查出许多其他语言仅在运行时才能检测出来的问题),后期动态(运行时)检测,并消除了易出错的情况
  • Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性

1.2.5 安全性

  因为Java适用于网络环境,所以从一开始,Java就很注重安全方面,并设计成能够防范各种攻击,其中包括:

  • 运行时堆栈溢出。(蠕虫和病毒的常用攻击手段)
  • 破坏自己进程空间之外的内存。
  • 未经授权读写文件。

1.2.6 体系结构中立

  众所周知,Java代码一次编译,处处运行,正是因为其源代码(.java)以及生成的字节码文件(.class)是与特定机器无关的,而是都遵守同一种语法规范。

  • 编译器生成的class文件是体系结构中立的,只要有相应JRE的支持,这些代码可以在很多机器上运行。
  • 字节码除了可以在任何机器上解释执行,同时还可以动态翻译成本地的机器代码。如果每一句指令都由虚拟机解释执行,必然会比全速运行机器指令慢很多。但是Java虚拟机提供了即时编译(JIT)功能,将频繁执行的代码翻译成本地机器代码,从而加快其执行速度

1.2.7 可移植性

  与C和C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关运算都做了明确的说明。

  • 在Java中,数据类型具有固定的大小,这消除了代码移植时容易造成的问题。例如Java中的int在任何平台上都是32位,而C/C++中则可能是16位/32位,也可能是编译器指定的其他大小。
  • Java中二进制数据以固定的格式进行存储和传输,而且消除了字节顺序的困扰。字符串是使用标准的Unicode格式存储的。(Java将大小端的实现封装在内部,对外是透明的,默认是大端法,如果要小端需要重写串行化方法;C/C++默认是小端,小端不易产生内存分配不足造成的问题,因为先传输低位字节,而Java使用大端的好处就在于较早的发现BUG)
  • Java的Window类是一个较为失败的案例。当初的初衷是能够编写一个在Windows、Macintosh和各种UNIX上都是同一风格的程序,但是难度很大,最终也没有非常好的实现出来。
  • 不过除了用户界面的有关部分外,正则表达式、XML、日期时间、数据库、网络连接、线程等都很好的支持平台独立性,而不用程序员操心底层的操作系统。

1.2.8 解释型

  Java解释器可以在任何移植了字节码解释器(JVM)的机器上执行Java字节码文件。

1.2.9 高性能

  尽管对解释执行字节码的速度已经比较满意,但在要求更高效的场合下,字节码可以被JIT动态的翻译成对应当前特定CPU的机器语言,从而进一步提高执行速度。

  • 除此之外,更复杂的优化是消除函数调用(使用内联)。对于当前已经加载的类,如果特定的方法不会被覆盖,就可以使用内联。

1.2.10 多线程

多线程可以带来更好的交互响应和实时行为。

  如今,我们非常关注并发性,因为摩尔定律已经难以维持。我们不再追求更快的处理器,而是更着眼于充分利用当前的处理器资源,并让它尽可能保持工作。

  • Java是第一个支持并发程序设计的主流语言。当时Web编程刚刚起步,处理器要花很长时间等待程序响应。此时,就需要并发程序来确保用户界面不会“卡住”。

1.2.11 动态性

  Java相比C和C++更加具有动态性。它可以在正在运行的程序中动态的加载类并执行其代码。一个很好的例子是:从Internet上下载Java代码,然后在浏览器上解释执行。而如果使用C和C++就很难实现动态编译、链接等过程。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Core Java笔记1.1、1.2节
  • 第1章 Java程序设计概述
    • 1.1 Java程序设计平台
      • 1.1.1 Java的历史
      • 1.1.2 Java简介
    • 1.2 Java“白皮书”的关键术语
      • 1.2.1 简单性(Simple and Familiar)
      • 1.2.2 面向对象
      • 1.2.3 分布式
      • 1.2.4 健壮性(鲁棒性)
      • 1.2.5 安全性
      • 1.2.6 体系结构中立
      • 1.2.7 可移植性
      • 1.2.8 解释型
      • 1.2.9 高性能
      • 1.2.10 多线程
      • 1.2.11 动态性
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档