注:文章中有些地方出自《Java核心技术》一书
1.简单性
人们希望构建一个无须深奥的专业训练就可以进行编程的系统,尽管人们发现C++不太适用,但是Java在很多的设计上尽可能地接近C++。例如Java的语法就是C++语法的一个“纯净”版本。这里没有头文件,指针运算(甚至指针语法),结构,联合,操作符重构,虚基类等。
2.面向对象
开发Java时面向对象技术已经相当成熟了。Java的面向对象特性与C++旗鼓相当。Java与C++的主要不同点在于Java不支持多重继承,取而代之的是更简单的接口概念。与C++相比,Java提供了更丰富的运行时自省功能。
3.分布式
Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地的文件。
4.健壮性
Java的设计目标之一在于使得Java编程的程序具有多方面的可靠性。Java与C++的最大不同是Java采用指针模型可以消除重写内存和损坏数据的可能性。Java编译器能够检测到许多其他语言中仅在运行时才能检测出来的问题。
5.安全性
从一开始,Java就设计成能够防范各种攻击,其中包括:
运行时堆栈溢出。
破坏自己的进程空间之外的内存。
未经授权读写文件。
但是现在看来Java安全模型并没有预期预想的那么成功。
6.体系结构中立
Java采用“虚拟机”的手段进行编译,可以将执行最为频繁的字节码序列翻译成机器码,这一过程被称为即时编译。Java虚拟机还有一个优点,它可以检测指令序列的行为,从而增强其安全性。(代价是指令运行慢)
7.可移植性
与C和C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关运算都做了明确的说明。例如Java中int永远是32位的整数,这与C/C++有很大的区别。这个特性大大提高了Java程序的可移植性。字符串使用标准的Unicode格式存储的。
但是,在用户界面的可移植性上Java还存在着很多问题,虽然Java在这方面花了大量心血,却构建了一个大家都难以接受的库。不过除了与用户界面有关的部分外,所有其他的Java库都能够很好地支持平台的独立性。你可以处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等等,而不用操心底层操作系统。
8.解释型
Java解释器可以在任何移植了解释器的机器上执行Java字节码。
9.高性能
字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特性CPU的机器码。
10.多线程
Java是第一个支持多线程并发编程的主流语言。多线程可以带来更好的交互响应和实时行为。
11.动态性
当需要将某些代码添加到正在运行的程序中,动态性就是一个非常重要的特性。