从结构化编程到面向对象编程
  C语言的产生标志着现代计算机语言时代的开始。C语言是功能强大、高效的结构化语言,简单易学。
  程序越来越复杂这一事实贯穿编程语言的历史。
  20世纪60年代提出了结构化编程方法。这种结构化的编程思想被像C这样的语言所应用,第一次使程序员可以相对轻松地编写适度复杂的程序。然而,当一个工程项目达到一定规模后,即使使用结构化编程方法,编程人员也无法对它的复杂性进行有效管理。
  20世纪80年代初期,许多工程项目的复杂性都超过了结构化方法的极限。为解决这个问题,面向对象编程(object-orientedprogramming,OOP)新方法诞生了。一旦一个程序的代码超过25000~100000行,就很难从总体上把握它的复杂性了。C++突破了这个限制,帮助程序员理解并且管理更大的程序。
  C++通过增加面向对象的特性扩充了C。因为C++产生在C的基础之上,因此它包括了C所有的特征、属性和优点。
  从C/C++到Java
  Java的最初推动力并不是因特网,而是源于对独立于平台(也就是体系结构中立)语言的需要。这种语言可创建能够嵌入微波炉、遥控器等各种家用电器设备的软件。用作控制器的CPU芯片是多种多样的,但C和C++以及其他绝大多数语言的缺点是只能对特定目标进行编译。尽管为任何类型的CPU芯片编译C++程序是可能的,但这样做需要一个完整的以该CPU为目标的C++编译器,而创建编译器是一项既耗资巨大又耗时较长的工作。因此需要一种简单且经济的解决方案。为了找到这样一种方案,Gosling和其他人开始一起致力于开发一种可移植、跨平台的语言,该语言能够生成运行于不同环境、不同CPU芯片上的代码。
  如果万维网(WWW)的成型和Java的实现不是同时发生的话,那么Java可能保持它有用、但默默无闻的用于电子消费品编程语言的状态。然而,随着万维网的出现,Java被推到计算机语言设计的最前沿,因为万维网也需要可移植的程序。
  因为计算机业被Intel,Macintosh和UNIX这3个竞争对手垄断,大多数程序员都在其中的某个领域内长期工作,所以对可移植语言的需求就不是那么迫切。但是,随着因特网和Web的出现,关于可移植性语言的旧问题又被提了出来。毕竟,因特网由不同的、分布式的系统组成,其中包括各种类型的计算机、操作系统和CPU。尽管许多类型的平台都可以与因特网连接,但用户仍希望他们能够运行同样的程序。
  事实上,开始被设计为解决小范围问题的Java语言同样可以被用在大范围的因特网上。这个认识使他们将Java的重心由电子消费品转移到Internet编程。
  Java的大部分特性是从C和C++中继承的。Java设计人员之所以故意这么做,主要是因为他们觉得,在新语言中使用熟悉的C语法及模仿C++面向对象的特性,将使他们的语言对经验丰富的C/C++程序员有更大的吸引力。
  Java的优势:安全性和可移植性
  在网络中,有两大类对象在服务器和个人计算机之间传输:被动的信息和动态的、主动的程序。
  例如,当你阅读电子邮件时,你在看被动的数据。甚至当你下载一个程序时,该程序的代码也是被动的数据,直到你执行它为止。但是,可以传输到个人计算机的另一类对象却是:动态的、可自运行的程序,虽然这类程序是客户机上的活动代理,但却是由服务器来初始化的。例如,被服务器用来正确地显示服务器传送数据的程序。
  Java可用来生成两类程序:应用程序(applications)和Javaapplet(小应用程序)。
  应用程序是可以在你的计算机的操作系统中运行的程序,从这一方面来说,用Java编制的应用程序多多少少与使用C或C++编制的应用程序有些类似。而Java的重要性就在于它具有编制小应用程序的功能。小应用程序是可以在Internet中传输并在兼容Java的Web浏览器中运行的应用程序。小应用程序实际上就是小型的Java程序,能像图像文件、声音文件和视频片段那样通过网络动态下载,它与其他文件的重要差别是,小应用程序是一个智能的程序,能对用户的输入作出反应,并且能动态变化,而不是一遍又一遍地播放同一动画或声音。
  当使用一个兼容Java的Web浏览器时,你可以安全地下载Java小应用程序,不必担心病毒的感染或恶意的企图。Java实现这种保护功能的方式是,将Java程序限制在Java运行环境中,不允许它访问计算机的其他部分。
  要使连接到Internet上的各种各样的平台都能动态下载同一个程序,就需要有能够生成可移植性执行代码的方法。Java解决上述两个问题——安全性和可移植性的关键在于Java编译器的输出并不是可执行的代码,而是字节码(bytecode)。字节码是一套设计用来在Java运行时系统下执行的高度优化的指令集,该Java运行时系统称为Java虚拟机(JavaVirtualMachine,JVM)。在其标准形式下,JVM就是一个字节码解释器。
  在一个给定的系统中,只要系统运行包存在,任何Java程序就可以在该系统上运行。记住:尽管不同平台的Java虚拟机的细节有所不同,但它们都解释同样的Java字节码。
  Java的主要特性
  简单(Simple)
  安全(Secure)
  可移植(Portable)
  面向对象(Object-oriented)
  健壮(Robust)
  多线程(Multithreaded)
  体系结构中立(Architecture-neutral)
  解释执行(Interpreted)
  高性能(Highperformance)
  分布式(Distributed)
  动态(Dynamic)
  在C/C++中,程序员必须手工地分配并且释放所有的动态内存。这有时会导致问题,因为程序员可能忘记释放原来分配的内存,或者释放了其他部分程序正在使用的内存。Java通过替你管理内存分配和释放,可以从根本上消除这些问题。
  Java通过提供面向对象的异常处理机制来解决由“被零除”或“文件未找到”这样的情况引起的问题,一个写得很好的Java程序,所有的运行时错误都可以并且应该被你的程序自己进行管理。
  Java的字节码经过仔细设计,因而很容易便能使用JIT编译技术将字节码直接转换成高性能的本机代码。Java运行时系统在提供这个特性的同时仍具有平台独立性。