Java和C、C++比较
1、全局变量
Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。Java对全局变量进行了更好的封装。而在C和C++中,全局变量使用不当常常会造成系统的崩溃。
2、Goto语句
Java不支持C、C++中的Goto语句,而是通过异常处理语句try、catch、finally等来代替C、C++中Goto来处理遇到错误时跳转的情况,使程序更可读且更结构化。
3、指针
指针使C、C++中最灵活,也是最容易产生错误的数据类型。由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显示类型转换后,可以访问C++中的私有成员,从而破坏了安全性,造成系统的崩溃。而Java对指针进行了完全的控制,程序员不能直接进行任何指针操作,例如,把整数转化为指针,或者通过指针释放某一内存地址等。同时,数组作为类在Java中实现,很好地解决了数组访问越界这一在C、C++中不做检查的错误。
4、内存管理
在C中,程序员通过库函数malloc()
和free()
来分配和释放内存,C++中则通过运算符new和delete来分配和释放内存。再次释放已经释放的内存块或未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也会逐渐耗尽系统资源。而在Java中,所有的数据结构都是对象,通过运算符new为它们分配内存。通过new得到对象的处理权,而实际分配给对象的内存可能随程序运行而改变,Java对此自动地进行管理并且进行垃圾回收,有效地防止了由于程序员的误操作而导致的错误,并且更好地利用了系统资源。
5、数据类型的支持
在C、C++中,对于不同的平台,编译器为简单数据类型,如int、float等分别分配不同长度的字节数,例如,int在IBM PC中为16位,在VAX-11中为32位,这导致了代码的不可移植性,但在Java中,对于这些数据类型总是分配固定长度的位数,如对int型,它总占32位,这就保证了Java的平台的无关性。
6、类型转换
在C、C++中,由于可以通过指针进行任意的类型转换,因此常常带来不安全性;而在Java中,系统在运行时对对象的处理要进行类型相容性检查,以防止不安全的转换。
7、头文件
C、C++中用头文件声明类的原型及全局变量、库函数等,在大的系统中,维护这些头文件是很困难的。而Java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有数据成员的操作。同时,在Java中用import
语句来导入其它类,以使用它们的方法。
8、结构和联合
C、C++中的结构和联合中所有成员均为公有,这就带来了安全性问题。Java中不包含结构和联合,所有的内容都封装在类中。
9、预处理
C、C++中用宏定义来实现的代码给程序的可读性和安全性带来了困难。Java不支持宏,它通过关键字final
来声明一个常量,以实现宏定义中广泛使用的常量定义。
Java和C、C++比较相关推荐
- springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据
SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...
- Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几
Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...
- 在k8s中使用gradle构建java web项目镜像Dockerfile
在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...
- Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常
kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...
- OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3
OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...
- Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid
Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...
- 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码
java开发必知必会之看源码,而看源码的第一步则是找到源码
- java基本类型转换,随记
java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...
- 科学处理java.lang.StackOverflowError: null异常
java.lang.StackOverflowError: null异常处理 在项目运行中出现StackOverflowError 首先要检查在编码中是否有明显的递归编码,比如死循环或者无限循环调用. ...
最新文章
- 阿里巴巴开源技术汇总:115个软件(一)
- Python之迭代器和生成器(Day17)
- oracle 尖括号_Oracle常用函数整理
- The DVMM Lab at Columbia University
- 在 Shell 脚本中执行语法检查调试模式
- Spring常见的十八中异常Exception
- 【财务思维】上市定价
- 红米airdots掉了怎么查找_红米K30 Pro 荣耀V30pro 这两款手机该怎么选呢?
- linux 时间会跳吗,linux系统时间暂时跳跃
- linux6.5怎样安装vim,在Centos 6.5下成功安装和配置了vim7.4
- maven处理和java平级的资源文件
- 笨方法“学习python笔记之关键字
- Hive中分组取前N个值
- 自动化测试C语言程序,自动化测试程序之一自定义键盘的模拟测试程序(C语言)...
- 软件开发:到底谁还在传言软件巨头濒临死亡?
- php画图抗锯齿,​CSS3如何实现字体抗锯齿渲染效果?-webkit-font-smoothing属性(实例)...
- FT232串口驱动安装教程
- no zuo no die _0_
- 单片机C语言延时程序
- MS Castap学习(1)