Java白皮书

  |  

摘要: Java白皮书

【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:算法题刷刷
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


Java 设计者写过一个很有影响力的白皮书,用来解释设计的初衷。白皮书可以在这里看: 《The Java Language Environment: Contents A White Paper》

并且发布了一个简短的摘要,摘要分为 11 个术语。摘要中的论述如下

简单性

  • 希望构建学习成本低的编程系统
  • Java剔除了C++中许多很少使用、难以理解、易混淆的特性
  • 没有头文件、指针运算、结构、联合、操作符重载、虚基类等
  • 希望支持开发能够在小型机器上独立运行的软件

面向对象

  • 重点放在数据(对象)和数据的接口上
  • 面向对象的能力与C++一样
  • C++的多重继承在Java中用接口概念取代
  • 与C++相比,Java提供更丰富的运行时自省功能

分布式

  • Java有丰富的库可以处理HTTP之类的TCP/IP协议
  • 通过URL访问网络上的对象,就好像访问本地文件一样

健壮性

  • Java采用的指针模型可以消除重写内存和损坏数据的可能性
  • Java编译器可以检测许多其他语言仅运行时才能检测的问题

安全性

  • 防止运行时堆栈溢出
  • 防止破坏自己的进程空间之外的内存
  • 防止未经授权读写文件
  • 沙箱环境执行

体系结构中立

  • Java编译器生成与特定体系结构无关的字节码
  • 只要有Java运行时系统,字节码就可以在任何机器上解释执行
  • 解释字节码比全速运行机器指令慢
  • 即时编译:虚拟机可以将执行最频繁的字节码序列翻译成机器码

可移植性

  • 与C++不同,Java规范中没有依赖具体实现的地方
  • Java的int永远是32位整数
  • 二进制数据以固定格式存储,消除了字节顺序的困扰
  • Java的字符串用标准Unicode格式存储
  • 除了UI外,其它Java库都可以支持平台独立性
  • 处理文件、正则表达式、XML、日期时间、数据库、网络连接、线程

解释型

  • Java解释器可以再任何移植了解释器的机器上执行Java字节码
  • 链接是一个增量式且轻量级的过程,开发变得快捷且具有探索性

高性能

  • 字节码可以在运行时动态地翻译成运行该应用的特定CPU的机器码
  • 即时编译器可以监控经常执行哪些代码并优化这些代码
  • 即时编译器知道哪些类已经加载,如果特定函数不会被覆盖,则使用内联

多线程

  • 不在追求更快的处理器,而着眼于过得更多处理器
  • web编程需要并发类解决处理器等待服务器响应的问题

动态性

  • 库中可以添加新方法和实例变量而对客户端没有影响
  • 可以将某些代码添加到正在运行的程序中

Share