Java 特性

面向对象

面向对象设计是一种程序设计技术

重点放在数据(即对象)和对象的接口上

  • ​ 用木匠打一个比方, 一个“ 面向对象的” 木匠始终关注的是所制作的椅子, 第二位才是所使用的工具;一个“ 非面向对象的” 木匠首先考虑的是所用的工具。在本质上,Java 的面向对象能力与C++" 是一样的。

分布式

​ 分布式系统是多个处理机通过通信线路互联而构成的松散耦合的系统

​ 处理像HTTP 和FIT 之类的TCP/IP 协议。Java 应用程序能够通过URL 打开和访问网络上的对象, 其便捷程度就好像访问本地文件一样。

可移植性

​ Java 规范中没有“ 依赖具体实现” 的地方基本教据类型的大小以及有关运算都做了明确的说明

​ 数据类型具有固定的大小, 这消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式进行存储和传输, 消除了字节顺序的困扰。字符串是用标准的Unicode 格式存储的。

​ 作为系统组成部分的类库, 定义了可移植的接口

多线程

如今, 我们非常关注并发性, 因为摩尔定律行将完结。我们不再追求更快的处理器, 而是着眼于获得更多的处理器, 而且要让它们一直保持工作。Java 在当时很超前。它是第一个支持并发程序设计的主流语言

动态性

反射

Java本质为静态语言,而不是动态语言。动态语言显著的特点是在程序运行时,可以改变程序结构或变量类型,典型的动态语言有Python、ruby、javascript等。Java不是动态语言,但Java具有一定的动态性,表现在以下几个方面 :

  • 反射机制;
  • 动态字节码操作;
  • 动态编译;
  • 执行其他脚本代码;

简单性

​ Java 发布时,实际上C++ 并不是最常用的程序设计语言。很多开发人员都在使用VisualBasic 和它的拖放式编程环境。这些开发人员并不觉得Java 简单。很多年之后Java 开发环境才迎头赶上如今,Java 开发环境已经远远超出大多数其他编程语言的开发环境

​ 简单的另一个方面是小。Java 的目标之一是支持开发能够在小型机器上独立运行的软件。基本的解释器以及类支持大约仅为40KB ; 再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核) 大约需要增加175KB

​ 在当时,这是一个了不起的成就。当然,由于不断的扩展,类库已经相当庞大了。现在有一个独立的具有较小类库的Java 微型版(Java Micro Edition), 这个版本适用于嵌人式设备。

健壮性

​ Java 的设计目标之一在于使得Java 编写的程序具有多方面的可靠性, Java 投入了大量的精力进行早期的问题检测、后期动态的(运行时)检测, 并消除了容易出错的情况……Java 和C++ 最大的不同在于Java 采用的指针模型可以消除重写内存和损坏数据的可能性。
​ Java 编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。至于第二点,对于曾经花费几个小时来检查由于指针bug 而引起内存冲突的人来说, 一定很喜欢Java的这一特性。

安全性

​ Java 适用于网络/ 分布式环境。为了达到这个目标, 在安全方面投入了很大精力。使用Java 可以构建防病毒、防篡改的系统。从一开始,Java 就设计成能够防范各种攻击,其中包括:

  • 运行时堆栈溢出。如蠕虫和病毒常用的攻击手段。
  • 破坏自己的进程空间之外的内存。
  • 未经授权读写文件。

体系结构中立

​ 编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码, 只要有Java 运行时系统, 这些编译后的代码可以在许多处理器上运行。Java 编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行, 而且还可以动态地翻译成本地机器代码

​ 当时, 为“ 虚拟机” 生成代码并不是一个新思路。诸如Lisp、Smalltalk 和Pascal 等编程语言多年前就已经采用了这种技术。

​ 当然, 解释虚拟机指令肯定会比全速运行机器指令慢很多。然而, 虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译

​ Java 虚拟机还有一些其他的优点。它可以检测指令序列的行为, 从而增强其安全性。

解释型

java虚拟机可以在任何安装了jre的环境中运行
Java解释器可以在任何移植了解释器的机器上执行Java字节码
链接是一个增量式且轻量级的过程(开发过程变得更加快捷,更加具有探索性)

高性能

尽管对解释后的字节码性能已经比较满意, 但在有些场合下还需要更加高效的性能。字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特定CPU 的机器码。

性能始终是一个考虑因素。Java平台通过采用一种方案,使解释器可以全速运行而无需检查运行时环境,从而实现了卓越的性能。该 自动垃圾收集器 运行作为一个低优先级后台线程,确保高概率在需要时,导致更好的性能,内存可用。可以设计需要大量计算能力的应用程序,以便可以根据需要用本机机器代码重写计算密集型部分,并与Java平台连接。通常,用户认为交互式应用程序即使被解释也能快速响应。

posted @ 2021-06-10 11:11  我豪  阅读(176)  评论(0)    收藏  举报