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++比较相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  3. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  4. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  5. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  6. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  7. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  8. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  9. java基本类型转换,随记

    java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...

  10. 科学处理java.lang.StackOverflowError: null异常

    java.lang.StackOverflowError: null异常处理 在项目运行中出现StackOverflowError 首先要检查在编码中是否有明显的递归编码,比如死循环或者无限循环调用. ...

最新文章

  1. 阿里巴巴开源技术汇总:115个软件(一)
  2. Python之迭代器和生成器(Day17)
  3. oracle 尖括号_Oracle常用函数整理
  4. The DVMM Lab at Columbia University
  5. 在 Shell 脚本中执行语法检查调试模式
  6. Spring常见的十八中异常Exception
  7. 【财务思维】上市定价
  8. 红米airdots掉了怎么查找_红米K30 Pro 荣耀V30pro 这两款手机该怎么选呢?
  9. linux 时间会跳吗,linux系统时间暂时跳跃
  10. linux6.5怎样安装vim,在Centos 6.5下成功安装和配置了vim7.4
  11. maven处理和java平级的资源文件
  12. 笨方法“学习python笔记之关键字
  13. Hive中分组取前N个值
  14. 自动化测试C语言程序,自动化测试程序之一自定义键盘的模拟测试程序(C语言)...
  15. 软件开发:到底谁还在传言软件巨头濒临死亡?
  16. php画图抗锯齿,​CSS3如何实现字体抗锯齿渲染效果?-webkit-font-smoothing属性(实例)...
  17. FT232串口驱动安装教程
  18. no zuo no die _0_
  19. 单片机C语言延时程序
  20. MS Castap学习(1)

热门文章

  1. ORA-01439: 要更改数据类型, 则要修改的列必须为空
  2. 单元测试|unittest生成测试报告
  3. [jobdu]二进制中1的个数
  4. 视频播放器倍速、清晰度切换、m3u8下载
  5. Bugzilla 操作手册
  6. JavaBeans 教程
  7. Dell服务器组建阵列-Raid(无阵列卡)
  8. 使用MATLAB Compiler
  9. ASP木马Webshell安全解决办案
  10. 超微主板升级bios_没法用新CPU给老主板更新BIOS?别着急,AMD借你一块CPU