Java相关的特性及Java白皮书的关键术语(7Gosling)

 JAVA是一种编程语言和环境,旨在解决现代编程实践中的许多问题。 它最初是为消费电子产品开发先进软件的一个重要项目的一部分。 这些是可靠的便携式分布式实时嵌入式系统。

1.简单性

2.面向对象

       不幸的是,这是业内最被滥用的流行语之一。 面向对象的设计仍然非常强大,因为它有助于界面的清晰定义,并且可以提供可重用的“软件IC”。面向对象设计的简单定义是它是一种将设计集中在数据(=对象)上的技术。 它的接口。 与木工类比,“面向对象”的木匠主要关心的是他正在建造的椅子,其次是用于制造它的工具; 一个“非OO”的木匠会主要考虑他的工具。 这也是定义模块如何“即插即用”的机制

3.分布式

       有时网络被集成到语言和运行时系统中(几乎)透明。 对象可以是远程的:当应用程序具有指向对象的指针时,该对象可以存在于同一台机器上,也可以存在于网络上的其他机器上。 远程对象上的方法调用被转换为RPC(远程过程调用)。分布式应用程序看起来非常像非分布式应用程序。 两种情况都使用了基本相似的编程模型。 但是,分布式案例确实要求应用程序注意网络故障的后果。 该系统自动处理了大部分问题,但有些问题需要根据具体情况进行处理。从那时起,该模型大部分已经消失:对现有网络环境中生活的语用学做出让步。 主要是因特网。因此,JAVA现在有一个非常广泛的例程库,可以轻松地使用TCP和IP协议,如http和ftp.JAVA应用程序可以通过URL打开和访问网络,同时程序员可以轻松访问本地文件系统

4.健壮性

        JAVA旨在编写需要在各种方面可靠的程序。 有很多强调早期检查可能的问题,后来的动态(运行时)检查,以及消除错误的情况。强类型语言(如C ++)的一个优点是它允许进行大量的编译时检查所以bug 可以早点找到。 不幸的是,C ++从C中继承了许多漏洞,这是相对宽松的(主要问题是方法/过程声明)。 InJAVA,isquire声明并且不支持C样式隐式声明。链接器理解类型系统并重复编译器的许多类型检查以防止版本不匹配问题。之前提到过,自动垃圾收集避免了存储分配问题。单个最大的 JAVA和C / C ++之间的区别在于JAVA具有一个指针模型,可以消除覆盖内存和破坏数据的可能性。 JAVA没有指针运算,而是具有真正的数组。 这允许执行子标记检查。 并且不可能通过强制转换将任意整数转换为指针。

5.安全性

      JAVA旨在用于网络/分布式情况。 为了安全起见,很多重点都放在了安全性上.JAV可以构建无病毒,无篡改的系统。 身份验证技术基于公钥加密。“健壮”和“安全”之间存在强大的相互作用。 例如,对指针语义的更改使得应用程序无法访问数据结构或访问它们可以访问的对象中的私有数据。 这关闭了大多数病毒活动的大门。

6.体系结构中立

        JAVA旨在支持网络上的应用程序。 通常,网络由具有各种CPU和操作系统体系结构的各种系统组成。 为了使aJAVA应用程序能够在网络上的任何地方执行,编译器生成体系结构中立的目标文件格式 - 在JAVA运行时存在的情况下,编译的代码可在许多处理器上执行。这不仅适用于网络,也适用于单个系统 softwaredistribution。 在目前的个人计算机市场中,应用程序编写者必须生成与IBM PC和Apple Macintosh兼容的应用程序版本。 随着PC市场(通过Windows / NT)多样化到许多CPU架构,而苹果公司将68000转向PowerPC,这使得在所有平台上运行的软件的生产几乎不可能。 WithJAVA,所有平台上的相同版本的应用程序.JAVA编译器通过生成与特定计算机体系结构无关的字节码指令来完成此操作。 相反,它们的设计既易于在任何机器上进行解释,又可以轻松地转换为本机代码。

7.可移植性

        架构中立是便携式的一大块,但还有更多内容。 与C和C ++不同,规范中没有“依赖于实现”的方面。 指定原始数据类型的大小,以及对它们的算术行为。 例如,“int”始终表示asigned twos补充32位整数,“float”始终表示32位IEEE754浮点数。 在这个时代做出这些选择是可行的,因为基本上所有有趣的CPU都具有这些特性。作为系统一部分的库定义了可移植接口。 例如,有一个抽象的Window类及其针对Unix,Windows和Mac的实现.TheJAVAsystem本身非常便携。 新的编译器是用Java编写的,运行时是用ANSI C编写的,具有干净的可移植性边界。 可移植性边界基本上是POSIX

8.解释型

       JAVA解释器可以直接在解释器已被移植的任何机器上执行JAVA字节码。 而且因为链接更加增量†Windows和Mac版本尚未完成。 JAVA6的10和轻量级进程,开发过程可以更加快速和开发。作为字节码流的一部分,更多的编译时信息在运行时可用。 这是链接器的类型检查所基于的,以及RPC协议派生的基础。 它还使程序更易于调试。

9.高性能

       如果解释的字节码的性能通常绰绰有余,则有些情况下需要更高的性能。 字节代码可以在运行时(在运行时)转换为运行应用程序的特定CPU的机器代码。 对于那些习惯于编译和动态加载器的正常设计的人来说,这有点像将最终的机器代码生成器放在动态加载器中。字节代码格式的设计考虑到了这一点,因此生成机器代码的实际过程通常很简单。 产生了相当好的代码:它执行自动寄存器分配,并且编译器在生成字节码时会进行一些优化。在解释代码中,我们在SS10上每秒获得大约300,000个方法调用。 转换为机器代码的字节码的性能几乎与本机C或C ++无法区分。

10.多线程

        我们周围的世界同时发生着许多事情。多线程是一种构建由多线程构建的应用程序的方法†。 不幸的是,在常规单线程C和C ++样式中编写处理许多事情的程序可能要困难得多.JAVA有一套复杂的同步原语,这些原语基于广泛使用的监视器和条件变量范例

11.动态性

         在许多方面,JAVA是一种比C或C ++更动态的语言。 它被设计为适应不断变化的环境。例如,在生产环境中使用C ++的一个大问题是它始终实现的方式的副作用。 如果公司A生成一个类库(即插即用组件库),并且公司B购买它并在其产品中使用它,那么如果A更改它的库并分发新版本,那么B几乎肯定必须重新编译和重新分发它们的软件。 在最终用户独立获得A andB软件的环境中(比如A是OS供应商而B是应用程序),如果A将升级分发到其库,那么来自B的所有用户软件都将中断。 可以在C ++中避免这个问题,但它非常困难,并且它实际上意味着不直接使用任何语言的o功能

猜你喜欢

转载自blog.csdn.net/qian1314520hu/article/details/85016699