前言
Java与C++相关,Java的大量特性是从C/C++继承过来的。最初Java被称为Oak,1995年被命名为Java。Java的最初推动力不是Internet!相反,主要动机是对平台独立(即体系结构中立)语言的需要。这种语言可以嵌入到这种消费类电子设备的软件。Java是可移植、平台独立的,可以用它生成在不同环境下运行于各种CPU之上的代码!
在计算机语言开发领域,人们都会感受到Java的影响和力量。许多创新性的特征、结构以及概念,已经成为了所有新语言的基准组成部分,Java影响力的最重要例子可能是C#,C#是由Microsoft创建的用于支持.NET Framework的语言,C#与Java密切相关。例如,两者共有相同的语法,都支持分布式编程,并且都利用相同的对象模型。当然,也有区别,总的看来这两门语言很相似。
Java applet
Java applet是一种特殊的Java程序,是为了能够在Internet上传送而设计的,可以在兼容Java的web浏览器中自动运行,它通常用于显示服务器提供的数据、处理用户输入或者提供在本地执行而不是服务器上执行的简单功能,本质上可以将某些功能从服务器移动到客户端。它也扩展了在cyberspace中自由流动的对象的范畴。相比阅读电子邮件或者下载时是在查看被动的数据,在执行之前代码也只是被动的数据,而applet是动态的,自我执行的程序,然而他们却是由服务器初始化的。动态就在安全性和可移植性方面带来了问题,必须防止客户端上自动下载和执行破获性的工作,那么Java以一种高效而且优美的方式解决了这些问题。
(1)安全性--Java通过将applet限制在Java执行环境中,并且不允许访问计算机的其他部分来实现这种保护,这被认为是Java的一个创新。同时Java不支持或者不允许使用指针(不支持程序员能够访问和修改指针),如果可以就会使Java程序突破Java执行环境和宿主计算机之前的防火墙
(2)可移植性--同一个applet必须能够在连接到Internet的大量不同类型的CPU、操作系统和浏览器环境中下载并且执行,为不同的计算机开发不同版本的applet是不切实际的。所以需要能够生成可移植的可执行代码的代码,其实有助于安全性的相同机制也可以用于帮助实现可移植性。
字节码
允许Java解决上述问题的关键是,Java编译器的输出不是可执行代码而是字节码(bytecode).字节码是高度优化的指令集合,这些指令由Java运行时系统执行,即由Java虚拟机(Java Virtual Machine,JVM)执行。本质上,原始的JVM被设计为字节码解释器(interpreter for bytecode)。特别的处于性能方面,许多现代语言被设计为将源代码编译成可执行代码。但Java这样设计有助于解决与基于web的程序相关的主要问题:
(1)将Java程序编译成字节码可以更容易地在各种环境中运行,因为只需要针对各种平台实现Java虚拟机就可以了。
(2)对于给定的系统只要存在运行时包,所有Java程序就可以在该系统中运行
(3)Java程序由JVM执行,有助于安全,因为JVM执行所以能够包含程序并且防止它在系统之外产生负效应。
(4)将程序编译成中间形式,然后由虚拟机解释执行,相对于直接编译成可执行代码,执行速度慢一些但对于Java来说,区别并不大,因为字节码已经被高度优化!在性能上,Java引入了HotSpot技术,HotSpot为字节码提供了即时(Just-In-Time,JIT)编译器。而JVM包含JIT编译器,可以根据要求一部分一部分将选择的字节码事实编辑为可执行代码,而不是整个Java程序一次性地全部编译。
(5)Java执行各种运行时检查,而这些检查只在执行时执行,事实上JIT编译器在执行期间根据需要编译代码。不是编译所有字节码序列-而是只编译那些能从编译中受益的字节码,剩余代码仍然只是进行解释。
servlet:服务器端的Java
applet只是B/S这个整体的一半。Java对于服务器也是有用,servlet是在服务器上执行的小程序,像applet动态扩展了web浏览器的功能一样,后者动态扩展了web服务器的功能,有了servlet,Java横跨了B/S连接的两端。
servlet用于动态地创建发送到客户端的内容,比如商店用servlet在数据库中查找商品价格,然后使用价格信息动态生成发送到web页面,尽管通过CGI(公共网络接口)机制也可以获取,但servlet提供了一些优点。servlet包括所有Java程序被编译成字节码,并且由JVM执行,所以他们具有高度的可移植性