【详解】Java语言的特点以及Java语言与C/C++的比较

一、Java语言的特点

1.跨平台性/可移植性

  1. 跨平台性也即平台无关性,指软件的运行不因操作系统、处理器的变化而导致程序无法运行或出现运行错误。
    以C++为例,当运行一段C++代码时,C++编译器首先会依据代码所在平台来针对CPU芯片进行编译、连接,产生机器指令,然后在相应平台上进行运行。因此,同一段C++代码针对不同的平台编译结果可能不同,无法保证C++编译器产生的可执行文件在所有平台上都能被正确运行,当换平台运行时可能需要修改源程序,并针对新的平台重新进行编译。
    在这里插入图片描述
    相反,Java源代码不针对具体的平台进行编译,而是会产生一种字节码中间文件(class文件),这种文件是平台无关且体系结构独立的。
    因此在任何一个具有java编译器的操作系统下,作为编译结果的字节码文件是相同的,都可以在任何具有JVM(Java虚拟机)的计算机上运行。JVM能够识别这些字节码文件,并且将字节码文件进行转换,使之能够在不同平台上运行。JVM能够解释并执行这种平台无关的字节码文件,实现跨平台运行。JVM是用C++编写的一个虚拟计算机;JVM屏蔽了操作系统之间的差异。
    在这里插入图片描述
  2. 这种跨平台性质也可以简化为Java语言只要编写一次,就能到处运行
  3. Java语言的跨平台性保证了Java语言的可移植性,任何Java源程序都可以移植到其他平台上。除此之外,Java语言的数据类型与机器无关,原始数据类型的存储方式是固定的,避开了移植时可能产生的问题。例如:在任何机器上,Java语言的整型都是32位的,而C++中整型的存储依赖于目标计算机。另外Java语言的字符串采用标准的Unicode格式保存,也保证了它的可移植性
  4. 不同的操作系统不同的平台对应的JVM和JDK版本都不一样,但是由于java编译器编译产生的字节码中间文件一样,所以JVM解释运行的结果也相同,即平台无关
  5. JVM实现平台无关的优缺点:
    优点:Java代码一次编写到处运行,平台无关
    缺点:执行相对麻烦,依赖虚拟机,必须在有JVM的平台上才能运行java程序
  6. java可以编写病毒,但是由于其依赖虚拟机,而多数情况下只有Java程序员会安装虚拟机,无法广范围传播,因此一般病毒脚本很少用java编写

2.面向对象

Java语言吸收了C++面向对象的概念,将数据封装于类中,是完全面向对象的。除了很少的基本数据类型,所有的数据都作为对象呈现,所有的GUI构建都是对象。与C++不同,Java语言中的所有函数都必须和对象相关(这些函数被称为类方法),即使是用于启动应用程序的主函数也不再是孤立的,必须捆绑在类中。Java中提供了封装、继承、多态的面向对象机制。

3.简单性

Java语言自身小巧玲珑,对硬件要求很低,只需要理解一些基本的概念,就可以编写适合于不同情况的应用程序。在Java中略去了运算符重载、多重继承等概念,并实现了垃圾自动回收机制,大大简化了程序设计者的内存管理工作。同时,Java语言底层是C++,相比C++来说,Java语言不需要操作指针,简化了程序员的编程工作

4.分布性

Java语言的分布性分为数据分布操作分布。数据分布是指将数据分别放在多个不同的主机上,操作分布是在多个不同的主机上布置相关工作,这些主机是网络中的不同成员
Java语言是面向网络的语言,提供丰富的类库来处理TCP/IP协议,用户可以通过URL地址在网上很方便地访问其他对象

5.健壮性

健壮性是指在程序编译和运行过程中会检查可能会出现的问题,避免错误的发生。在Java中有完善的异常处理机制,程序员可以将可能会产生运行异常的代码放在异常处理结构中,简化了异常处理过程,增强了程序的健壮性;Java中还有垃圾自动回收机制(GC机制),JVM负责调度GC机制,程序员不需要干涉,避免了内容丢失等动态内存分配导致的问题;Java不支持指针,避免了对内存的非法访问,C/C++指针操作可能会导致内存泄漏;Java中还去掉了C语言中可能产生错误的语法,减少了隐含错误的发生,例如:在C/C++中,“if (a=3)”这样的判断语句是合法的,而在Java中,必须是“if (a==3)”这样的判断语句,避免了隐含错误的发生。

6.安全性

  1. Java语言舍弃了C++的指针对存储器的直接操作,程序运行时,内存由操作系统分配,这样就避免病毒通过指针入侵系统,也避免了指针操作中易产生的错误。Java对程序提供了安全管理器,防止程序的非法访问
  2. 在Java中真正操作内存的是JVM,所有的Java程序运行在JVM中,JVM在执行过程中操作内存;而C++中程序员直接通过指针操作内存,更有驾驭感
  3. Java屏蔽指针的优缺点:
    优点:不容易导致内存泄露,更加安全
    缺点:效率问题,程序员驾驭感比较差

7.解释型

C/C++都是直接对CPU芯片进行编译,生成机器代码,所以代码的运行和特定的CPU有关。而Java语言不针对CPU直接编译,而是将程序编译成接近机器码的“中间字节码”文件,由JVM解释和执行

8.多线程

多线程允许同一个程序中有两个以上的执行线路,即同时做两件以上的事情。Java语言支持多线程,允许多个线程存于同一块内存中,共享内存资源。CPU轮流为每个线程分配时间片,每个线程在非配的时间片内处理任务。由于用户感觉不到时间片的轮流分配,从而认为几个任务是同时执行的,使得软件更加具有交互性和实时响应能力。另外,Java语言中提供了线程中的同步机制,保证了对共享数据的正确操作

二、Java与C/C++的区别

1.指针

Java中不支持指针,且增添了垃圾自动回收机制,从而有效防止了C++语言中指针操作失误(内存泄漏)。但Java中不是完全没有指针,虚拟机内部还是使用了指针,只是程序员不能使用而已,增加了Java程序的安全性

2.多重继承

Java语言不支持多重继承,但允许一个类继承多个接口extends+implement),也能实现多重继承的功能,也避免了C++中多重继承实现方式带来的诸多不便;而C++支持多重继承,允许一个类继承多个父类。但其使用复杂,容易引起麻烦,编程不易实现

3.数据类型及类

Java语言是完全面向对象的语言,所有的函数和变量必须是类的一部分,除了基本数据类型外,其余的都作为类对象。而C++允许将函数和变量定义为全局的。此外,Java中取消了C/C++中的结构和联合,消除了不必要的麻烦

4.自动内存管理

Java程序中所有的对象都是用new操作符建立在内存堆栈上,自动进行无用内存回收操作,不需要程序员进行删除。而C++中必须由程序员释放内存资源,增加了程序设计者的负担,且增加了程序的风险。Java当一个对象不再被用到时,垃圾回收器将它添加上标签以示删除。Java中的垃圾不是立即删除,而是等到一个限额时再统一进行删除

5.操作符重载

为了保证语言尽可能简单,Java不支持操作符重载。操作符重载被认为是C++的突出特点,Java语言中虽然可以通过类方法重载来实现类似功能,但仍然不如操作符重载方便

6.预处理能力

Java语言不支持预处理功能。C/C++在编译过程中都有一个预编译阶段,为开发人员提供了方便,但增加了编译的复杂性。Java虚拟机没有预处理器,但它提供的引入语句(import)与C++预处理器的功能类似

7.Java语言不支持全局变量和函数

作为一个比C++更纯的面向对象语言,Java中的所有变量和函数都应该包括在类中

8.字符串

Java语言中字符串都是用类对象(String和StringBuffer)来实现的,这些类是Java语言的核心,使得Java语言的字符串处理比C++更方便

9.goto语句

引用goto语句容易引起程序的结构混乱,因此结构化编程不建议采用goto语句。Java虽然指定goto作为关键字,但不支持goto语句,使程序更加简洁易读

10.类型转换

在C/C++中有时会出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在C++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值