1、简单
Java语言和C++语言在很多方面几乎相同,但二者各有各的优势。但如果从语言的简单性来看,Java要比C++简单,C++中许多容易混淆的概念,或者被Java弃置不用了,或者以一种更清晰、更容易理解的方式实现。
2、面向对象
基于对象的编程更符合人的思维模式,使人们更容易解决复杂的问题。Java是面向对象的编程语言。将在后面详细讨论类与对象、子类与继承、接口与实现以及内部类与异常类等重要概念。
面向对象和面向过程的区别
面向过程:面向过程性能比面向对象高。因为类的调用需要实例化,开销较大,所以当性能为最重要考量因素时(如单片机、嵌入式开发、Linux/Unix等)一般采用面向过程开发。
面向对象:面向对象易维护、易复用、易扩展。因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
3、平台无关
Java语言的出现是源于对独立平台的语言需要,希望这种语言可嵌入各种家电设备的芯片上且易于维护,而当时的编程语言(如C、C++)都只能对特定的处理器芯片进行编译。
Java语言和其他语言相比,最大的优势就是编写的软件能在执行码上兼容,在所有的计算机上运行。Java之所以能做到这一点,是因为Java可以在计算机操作系统之上再提供一个Java运行环境(Java Runtime Environment, JRE)。该环境由Java虚拟机(Java Virtual Machine, JVM)、类库以及一些核心文件组成,也就是说,只要平台提供了Java运行环境,Java编写的软件就能在其上运行。
平台与机器指令
无论哪种编程语言编写的程序,都需要经过操作系统和处理器来完成程序运行,因此这里所指的平台是由操作系统(Operating System, OS)和处理器(CPU)所构成。与平台无关是指软件的运行不因操作系统、处理器的变化而无法运行或运行错误。
每个平台都会形成自己独特的机器指令,所谓的机器指令,就是可以被该平台直接识别、执行的一种由0、1组成的的序列代码。相同的CPU和不同的操作系统所形成的的平台的机器指令可能是不同的。
Java虚拟机与字节码
Java运行环境由Java虚拟机、类库以及一些核心文件组成。Java虚拟机的核心是所谓的字节码指令,即可以被Java虚拟机直接识别、执行的一种由0、1组成的序列代码。字节码并不是机器指令。因为它不和特定的平台相关,不能被任何平台直接识别、执行。Java针对不同平台提供的Java虚拟机的字节码指令都是相同的。
和C++不同的是,Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编译,而是针对Java虚拟机把Java源程序编译成字节码的中间代码,由Java虚拟机负责解释运行字节码。
4、多线程
Java的特点之一就是内置对多线程的支持。多线程允许同时完成多个任务。实际上单核处理器在同一时刻只能执行一个线程,但处理器可以在不同线程之间快速切换,由于处理器速度非常快,远远超出了人类接收信息的速度,所以给人感觉多个任务在同时进行。C++没有内置的多线程机制,因此只能调用操作系统的多线程功能进行多线程程序的设计。
5、动态
Java的基本组成单元就是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分布环境中动态的维护程序及类库。C/C++编译时就将函数库或类库中被使用的函数、类同时生成机器码,那么每当其类库升级之后,如果C/C++程序想具有新类库提供的功能,程序就必须重新修改、编译。
JAVA和C++的异同:
- 都是面向对象的语言,都支持封装、继承和多态。
- Java不提供指针直接访问内存,程序内存更加安全。
- Java的类是单继承的,C++支持多重继承;虽然Java的类不能多继承,但是接口可以多继承。
- Java有自动内存管理机制,不需要程序员手动释放内存。
- 在C语言中,字符串或字符数组最后都会有一个额外的字符’\0’来表示结束。而Java语言中没有结束符概念。