Java是一种包括语言、虚拟机、即时编译、类库、执行环境的平台;
执行环境提供安全性、跨操作系统的可移植性、自动垃圾收集等服务;
设计初衷:简单性、面向对象、网络技能、健壮性、安全性、体系结构中立、可移植性、解释型、高性能、多线程、动态性
简单性:Java剔除了C++中的:头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等;
面向对象:一种程序设计技术。C++多继承;Java单继承+接口、Java中元类模型(metaclass);
网络技能:Java应用程序能够通过URL打开和访问网络上的对象,便捷如访问本地文件。简化socket等网络连接,远程方法调用机制使得分布式对象之间可以进行通信;
健壮性:Java早期的问题检测、后期动态的(运行时)检测,消除有出错倾向的状态……Java采用的指针模型可以消除重写内存和损坏数据的可能。Java编译器可以检测许多在其他语言中仅在运行时才能检测出来的问题。Java不需要使用指针构造诸如字符串、数组这样的数据结构,必要时也可以具有指针的能力,如链表。Java绝对安全:绝不会存取一个坏的指针造成内存分配错误,也不必防范内存泄漏。
安全性:Java适用于网络/分布式环境。其安全机制难以蒙骗:运行时堆栈溢出、在自己的处理空间之外破坏内存、未经授权读写文件、等不安全的做法被防范。Java有数字签名类。Java的安全机制比ActiveX强得多,因为ActiveX是在应用程序运行时加以控制并制止恶意性破坏的。
体系结构中立:编译器生成体系结构中立的目标文件格式,只要有Java Runtime Environment就能执行。即时编译:将使用最频繁的字节码序列翻译成机器码。即时编译缓解了生成解释字节码速度拖慢的问题。虚拟机还可以检测指令序列的行为以增强其安全性;
可移植性:Java规范中没有依赖具体实现的地方,基本数据类型的大小及有关算法都做了明确的说明。二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串均以标准的Unicode格式存储。作为系统组成部分的类库,定义了可移植的接口;
解释型:Java解释器可以在任何移植了解释器的机器上执行Java字节码。
高性能:即时编译器(just in time compiler)可以监控经常执行哪些代码并优化这些代码以提高速度。还可以消除函数调用(即内嵌),即时编译器知道哪些类已经加载。如果基于当前加载的类集,且特定的函数不被覆盖的话就可以内嵌。必要时,还可以撤销优化。
多线程:多线程带来更好的交互响应和实时行为。多线程编译简单。
动态性:将某些代码加入正在运行的程序中时,动态性非常重要。Java当前版本允许程序员知道对象的结构和行为。对于必须在运行时分析对象的系统(Java GUI 构建器、智能调试器、可插拔组件以及对象数据库)非常有用。
Java5.0添加了泛型、“for each”循环、可变元参数、自动装箱、元数据、枚举、静态导入;
Java7添加了基于字符串的switch、变形操作符、二进制字面量、异常处理改进;