Java语言的优势
- 1)简单性
- 2)面向对象
- 3)分布式
- 4)健壮性
- 5)安全性
- 6)可移植性
- 7)解释型
- 8)体系结构中立
- 9)多线程
- 10)动态性
- 11)高性能
Java的设计者编写的白皮书以关键术语来解释设计的初衷,如以下:白皮书相关链接
1)简单性
Java 语言的底层是用C++写的,尽管在设计的时候发现C++不太适用,但是设计时仍偏向C++,以便系统容易理解。剔除了C++中许多很少使用,难以处理,容易混淆的特性。
这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等。拿指针举例,对于C++来说程序员是可以通过指针直接操作内存的,在Java语言中真正操作内存的是Java虚拟机(JVM)。所有的Java程序都是运行在Java虚拟机当中的,而Java虚拟机在执行过程中再去操作内存。当然,我们也得出结论,Java虚拟机也是通过C++实现的。
2)面向对象
**Java语言是一个面向对象的语言。简单地讲,面向对象设计是一种程序设计技术。对程序员来说,更容易理解,因为人类通常是以对象的方式认知世界的。采用面向对象的方式可以让复杂问题简单化。**它将重点放在数据(即对象)和对象的接口上。
用蛋糕师打一个比方:一个“面向对象的”蛋糕师始终首先关注的是所制作的蛋糕,其次才是所使用的原料;一个“非面向对象的”蛋糕师主要考虑的是所用的原料。
在本质上,Java的面向对象能力与C++是一样的。
Java与C++的主要不同点在于多重继承、在Java中,取而代之的是更简单的接口概念。与C++相比,Java 提供了更丰富的运行时自省功能
3)分布式
Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java语言具有强大的、易于使用的连网能力,非常适合开发分布式计算的程序。Java应用程序可以象访问本地文件系统那样通过URL访问远程对象。
使用Java语言编写Socket通信程序十分简单,使用它比使用任何其它语言都简单。而且它还十分适合于开发公共网关接口(CGI)脚本的开发,另外还可以使用Java小应用程序(Applet)、JSP、Servlet等等手段来构建更丰富的网页。
4)健壮性
Java的设计目标之一在于使得Java编写的程序具有多方面的可靠性。Java非常强调进行早期的问题检测、后期动态的(运行时)检测,以及消除容易出错的情况……Java与C/C++最大的不同在于Java采用指针模型可以消除重写内存和损坏数据的可能性。
主要说的是自动垃圾回收机制(GC机制),由于屏蔽了指针,不容易导致内存泄漏,Java虚拟机负责调度GC机制,不需要程序员干涉。而不用花费几个小时来检查由于指针bug而引起内存冲突。
此外,许多在其它语言中必须通过运行才会暴露出来的错误,在编译阶段就被发现了
5)安全性
Java要适用于网络/分布式环境。为了实现这个目标,安全性颇受重视。使用
Java可以构建防病毒、防篡改的系统。
从一开始,Java就设计成能够防范各种攻击,其中包括:
· 运行时堆栈溢出,这是蠕虫和病毒常用的攻击手段。
· 破坏自己的进程空间之外的内存。
· 未经授权读写文件。
Java的存储分配模型是防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。
6)可移植性
与C和C++不同,Java规范中没有“依赖具体实现”的地方。
即:与平台的无关性,在Java中,数值类型有固定的字节数,这消除了代码移植时一个令人头痛的主要问题。二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串则采用标准的Unicode 格式存储。
除了与用户界面有关的部分外,所有其他Java库确实能很好地支持平台独立性。你可以处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等,Java虚拟机提供了一个字节码到底层硬件平台和操作系统的屏障,直接屏蔽掉了操作系统之间的差异使得Java程序经过编译后生成的字节码文件(能被Java虚拟机识别)是与平台(操作系统)无关的
7)解释型
Java 解释器可以在任何移植了解释器的机器上直接执行字节码。由于连接是 一个增量式且轻量级的过程,所以,开发过程也变得更加快捷,更加具有探索性。
大家用过Python语言吗?当我们使用Python语言进行编程时,得先进入Python语言环境,然后输入源程序,再运行它,Python语言环境一句句地解释、运行,直接得出结果。这种语言就是解释型语言。
而像C/C++这样的语言就不是这样的了,我们先使用编辑软件或集成开发环境(IDE)编写源程序,然后对其进行编译,生成可执行文件。然后我们再通过操作系统执行这个可执行文件得到结果。这种语言就是编译型语言。
Java程序开发三步骤:编写源程序.java文件 -> javac.exe编译器:编译 -> Java字节码文件:.class文件 -> jvm运行
因此以把Java看成是混合型的语言。先编译后解释,对,没看错,.java文件编译为.class文件后,再经jvm于不同类型的系统和机器上解释运行。和也就是说,相对于C/C++语言来说,Java语言写出来的程序效率低,执行速度慢。但他性能比一般解释型语言要高(具体参考本节的高性能点)
8)体系结构中立
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在许多处理器上运行。
Java 编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以动态地转换成本地机器代码。一次编写,到处运行
9)多线程
Java是多线程语言,完美支持多线程并发。Java在多线程处理方面性能超群,具有让你惊喜的强大功能,而且在Java语言中进行多线程处理很简单。
线程,是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程机制使应用程序能够并行执行 ,而且同步机制保证了对共享数据的正确操作。通过使用多线程 ,程序设计者可以分别用不同的线程完成特定的行为 ,而==不需要采用全局的事件循环机制 ==,这样就很容易地实现网络上的实时交互行为。
从而使得程序能够具有更好的交互性、实时性。
10)动态性
Java与C或C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而对客户端却没有任何影响。在Java中找出运行时类型信息十分简单。
当需要为正在运行的程序增加代码时,动态性将是一个非常重要的特性,Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。
并且 java通过接口来支持多重继承 ,使之比严格的类继承具有更灵活的方式和扩展性
Java中的动态性主要体现在反射机制、动态字节码操作、动态编译、执行其他脚本编码等方面,在后期建立各模块之间的互通,这就意味着在现有的应用程序下可以实现各模块之间的互连。
11)高性能
Java语言源程序编写完成后,先使用Java伪编译器进行伪编译,将其转换为中间码(也称为字节码),再解释;字节码可以(在运行时)动态地转换成对应运行这个应用的特定CPU的机器码。
Java提供了一种“准实时”(Just-in-Time,JIT)编译器----即时编译器,仅在运行时才进行,将其编译成为平台相关的机器码(由于现在已经运行了,无需再考虑可移植性)将其缓冲下来,这样速度就会更快。
而且我们实际编写项目中通常会用到一些Java中间件,像网关、缓存、负载均衡、数据库、分布式架构等方面都有涉及,这都可以较快提高我们项目的性能,同时Java可以通过虚拟机来优化提升运行效率。
参考文献 :Java核心技术卷一
参考链接1参考链接2参考链接3