目录
正所谓知彼知己,百战不殆。我们在学习任何一门技术之前,都需要提前了解这门技术的优势和特性,这样我们在学习过程中才会方向明确,知道为什么学,如何学以及如何应用。另外了解了这些特性,也有助于我们对Java这门面向对象编程语言有更加深刻的理解。
下面分别为从简单性、面向对象、编译解释性、稳健性、安全性、跨平台性、高性能这几个特点进行逐一阐述。
1、简单性
从前面的Java简述中,我们知道Java起初就是以结构简单为目标。Java语言继承了C++语言的众多优点,去除了C++中学习起来比较难的多继承、指针、内存回收等概念,所以Java语言学习起来更简单,使用起来也更方便。
2、面向对象
Java是一种面向对象的编程语言,而面向对象(Object Oriented)也是一种软件开发方法。面向对象是相对于面向过程来讲的, 其主要思想:围绕着“事物”来设计软件(即对象),在Java中用类(.java文件)表示,它可以看着是一个模板,它描述一类对象的状态和行为。
例如,汽车类,对象可以有:福特、宝马、丰田等。而对象状态包含汽车品牌、型号、颜色、大小等;对象行为包含汽车运行、停靠等。
为了让大型软件项目便于管理,降低开发和维护的成本,我们希望能按照人的思维方式进行编程,所以面向对象技术也就应运而生。面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,也更贴近事物的自然运行模式。
3、编译解释性
C、C++ 他们经过一次编译之后直接可以编译成操作系统了解的类型,可以直接执行的 所以他们是编译型的语言。
Java编译程序生成字节码,而不是通常的机器码,这使得Java开发程序比用其他语言开发程序快很多。之所以说Java是编译型语言,因为所有的.java代码都是要编译的; 之所以说它是解释型语言,是因为java代码编译后不能直接运行,它是解释运行在JVM上的。
当然,JVM为了提升代码执行效率,会做一些JIT优化。它会把.class的二进制代码编译为本地的代码直接运行,所以,Java语言又是编译的。
4、稳健性
从Java简介篇中,我们知道Java语言从一开始出现,就是用作编写家用电子产品软件,这也就注定它被从开始就需要设计成可以写高可靠和稳健软件的编程语言, 另外,Java消除了某些编程错误,使得用它写可靠软件相当容易。
首先,Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。在编译和运行时,Java都要对可能出现的一些问题进行检查,以消除错误的产生。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。
其次,内存管理方面,在常规语言如 C 和 C++中,程序员必须手动自已对内存进行分配和释放,这很容易造成内存泄露等问题。而Java语言通过JVM来自行管理内存,避免人为控制不当所造成内存泄漏问题。另外,Java不支持指针,它具备了消除重写存储和错误数据的可能性。
最后,异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以快速地找到出错的处理代码,这就简化了出错处理和恢复的任务。
5、安全性
Java的存储分配模型是它防御恶意代码的主要方法之一。浏览网页时,可能会感染病毒或木马,这些木马或者病毒轻者能使用户电脑系统崩溃,重则可以盗取用户的信息,对于这个问题,Java也是有相应的解决方案,使用Java编译的Applet程序将Java程序限制在一个Java运行环境中,而不允许它访问计算机的其他部分。这也就很好的保证了其运行的安全性。
6、跨平台性
我们常常听到一句口号 “一次编译,到处执行(write once, run anywhere.)。这里说的就是 Java 的跨平台性。
在 c 或 c++ 中,首先要将源代码文件编译为机器代码文件,然后再去执行它。这个过程中,机器代码文件必须在为其编译的平台才能执行(Windows、Linux、IOS 等),也就是说,我们的代码如果希望在多个平台执行,那就必须多次编译程序。这不仅给程序员带来了繁琐的开发步骤,比如代码做变更就要重新编译整个程序,同时这也给程序带来了更大的漏洞风险。当代码已经编译为可执行文件时,这个可执行文件不能动态更改,此时需要更改代码重新编译,以替换旧的可执行文件。
而Java语言则是,将代码编译为中间语言,中间语言是字节码,解释器是 Java 虚拟机(JVM)。字节码文件可以通用,JVM 是特定于平台的。
每一个平台都需要一个 JVM ,这里 JVM 是实现 “到处执行” 的前提,所以,在 Java 中,我们只需要生成一个字节码文件,就可以保证我们编写的程序在任何平台都能运行了。
7、高性能
Java是一种先编译后解释的语言,所以它不如全编译性语言快。但Java设计者制作了“及时”编译程序,这样就可以实现全编译了。Java性能的核心是Java虚拟机JVM。
JVM中有很多元素,每一个元素都对软件的性能有着深刻的影响。我们可以区分出对性能有影响的JVM的三个不同组件,开发人员可以对它们进行调整。
类加载器--当编译一个.java源文件时,它以.class文件的形式被转换为字节码。当你想在你的程序中使用这个类文件时,它必须由类加载器加载到主程序内存中。这个过程包括3个阶段,加载、链接和初始化,所有这些都对应用程序的性能有深刻的影响。
运行时内存/数据区 - 由5个核心部分组成,它负责提供内存来存储字节码、参数、对象、返回值和局部变量。
执行引擎 - 它负责执行每个类中存在的代码。然而,在执行程序之前,字节码本身需要被转换为JVM能够理解的指令。为了实现这一点,JVM可以使用解释器或JIT及时编译器。
说到编译,这里是Java的另一张王牌--即时编译器(JIT)编译器)。将字节码转换为本地机器语言执行的方式对它的速度有很大影响。JIT编译器与Java虚拟机(JVM)互动,将Java字节码序列变成本地机器代码。
重要的是,JIT编译器是按需编译代码的。这意味着,它只编译正在被调用的方法。这大大提高了整体效率,节省了时间。
在使用JIT编译器时,计算机硬件能够直接执行本地代码,而不是让JVM一次又一次地解释同一序列的字节码。如果编译后的方法被频繁地执行,这可能会导致大量的性能提升。
更重要的是,JIT编译器在编译为本地机器语言的同时,还能进行很多简单的优化。其中一些优化包括数据分析、从堆栈操作到寄存器操作的转换、通过寄存器分配减少内存访问,以及消除常见的子表达式。
8、多线程能力
Java是一种能够在语言层面上实现多线程的技术。多线程允许程序在多个计算核心和线程上执行并发的计算。更重要的是,多线程应用程序可以保持对输入的响应,即使是在执行长期运行的任务时。多线程现在比以往任何时候都更重要,特别是当硬件公司正在发布越来越强大的企业级。区分多线程和多处理也很关键。第一个术语指的是在多个CPU线程上并发执行计算的能力。另一方面,后者指的是一个系统同时运行多个处理器的能力,其中每个处理器可以操作多个线程。
一般来说,多线程是首选,因为CPU线程使用一个共享的内存区域,这有助于节省内存,并允许稍快的内容切换。