之前c++,最近java有点混乱,总结一下:

1.在写java程序的时候会发现,假如你自己写了一个类class A{。。。},这个时候你要实例化,必须new一个;但是在c++里面就不用,c++中你可以直接声明A a;

为何:

  a.java里面所有变量都是引用(除了基本类型),引用就相当于一个指针,因此你必须要new,不然没法使用;当然在c++里面,指针可以光声明,扔在那里不new,你用的时候还是要new的,java编译器在安全方面做出了优化。

  b.c++里面,A a;这句运行时,会自动调用默认构造函数,给你构造一个出来,这是一个实例对象,不是引用,A中的field是有值的,不过这个值可能是一个你不想要的。

2.关于RTTI的实现机制,java跟c++是不同的,但原理是一样的:

  a.java如果实现RTTI,很简单,java的每个类都生成一个class文件。比如现在有一个基类shape,其子类有circle,square等。有一个vector i,在java中,vector如果没有被泛型化,可以放入任何object。这时你可以把circle,square都放进去,upcasting。取出来的时候,需要downcasting回shape,比如(shape)i[0],这时在java中会进行RTTI,但是这种括号形式的造型,在c++中不会进行RTTI,只会被强制转换为()中类型。那RTTI如何进行呢,因为每个类都是一个class,被加载到内存中后,字节码是不同的,因此可以方便进行RTTI。

  b.c++中,也有RTTI,在dynamic_cast跟typeid中进行。很容易推测,要进行RTTI就要需要知道类的信息,在java中有Class类记录类型信息,其实在c++中也有type_info,(个人认为这两个东西,本质上是一样的),只是很少人用到。因此,在c++中,RTTI的进行依据是type_info。

  c.别的还木有看,只看了dynamic_cast的运作原理:dynamic_cast是类型转换,upcast比较好理解,但downcast,这里如何操作的呢?当类中存在虚函数时,编译器就会在类的成员变量中添加一个指向虚函数表的vptr指针,每一个class所关联的type_info object也经由virtual table被指出来,通常这个type_info object放在表格的第一个slot。当我们进行dynamic_cast时,编译器会帮我们进行语法检查。如果指针的静态类型和目标类型相同,那么就什么事情都不做;否则,首先对指针进行调整,使得它指向vftable,并将其和调整之后的指针、调整的偏移量、静态类型以及目标类型传递给内部函数。其中最后一个参数指明转换的是指针还是引用。两者唯一的区别是,如果转换失败,前者返回NULL,后者抛出bad_cast异常。

转载于:https://www.cnblogs.com/xiayou/p/4236841.html

关于c++跟java区别的几个总结相关推荐

  1. php和python和java-python与java区别

    Python和Java都是很火的编程语言,对于想学习编程的人员来说,常常被这个问题所困扰:我是该学Python还是Java呢?想要解决这个问题,还需结合自身实际情况和两种语言的特点进行分析. 以下是P ...

  2. python和java的区别-python与java区别

    Python和Java都是很火的编程语言,对于想学习编程的人员来说,常常被这个问题所困扰:我是该学Python还是Java呢?想要解决这个问题,还需结合自身实际情况和两种语言的特点进行分析. 以下是P ...

  3. JavaScript入门→HTML引用JS、变量、表达式操作符、数组Array数组对象、选择结构循环结构、函数、JavaScript与JAVA区别

    插入引用JS 变量 表达式 操作符 数组 选择判断结构 循环结构 函数 JavaScript与JAVA区别 绝学无忧. 唯之与阿,相去几何? 善之与恶,相去何若? 人之所畏,不可不畏. 荒兮其未央哉! ...

  4. java语言与其他语言的区别是_Java语言特点有哪些?Java区别其他语言特点详解

    Java语言特点有哪些?Java区别其他语言特点详解 Java是目前最流行的编程语言之一,那你知道为什么Java这么火吗?相比其他编程语言,Java的特点又有哪些呢?跟着小编一起来了解一下吧. 一.简 ...

  5. python构造方法与java区别_一张图秒懂Java和Python的区别,你知道吗?

    对于程序员的语言千千万JAVA\C\C++\PHP\Python不同的程序员使用着不同的语言,做着功能相似需求却不同的产品. 但是最近Python在人工智能的推动下突然出现在人们的面前,其实和Java ...

  6. C# 与java区别总结 收集

    节选自<C++.Java/C#之比较>http://dev.firnow.com/course/3_program/c++/cppsl/2008520/117228.html 使用指针,由 ...

  7. dalvik虚拟机与Java区别_05 Android---java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)...

    大家好,我是森森 这节课我简单给大家介绍一下java虚拟机跟安卓系统虚拟机的区别.可能时间太晚了,有点不在状态,也有点紧张,大家见谅. 05java虚拟机跟dalvik虚拟机的区别 这篇文章重点写一写 ...

  8. scala java 区别_Scala(和Java)中的类和类型之间有什么区别?

    当您说"类型"时,我将假设您主要是指静态类型. 但是我将在短期内讨论动态类型. 静态类型是可以被静态证明的程序一部分的属性(静态表示"不运行它"). 在静态类型 ...

  9. cc java区别_cC和C++和java的问题有啥区别?

    2008-02-18 回答 JAVA和C++都是面向对象语言.也就是说,它们都能够实现面向对象思想(封装,继乘,多态).而由于c++为了照顾大量的C语言使用者, 而兼容了C,使得自身仅仅成为了带类的C ...

  10. python与java区别-Java与Python到底有什么区别和共同点详细对比

    JAVA:Java是一种计算机编程语言,最常用于开发Android智能手机应用程序.它于1995年由Sun Microsystems的James Gosling首次发布,后来被Oracle Corpo ...

最新文章

  1. Java HotSpot VM 命令行参数【官方版】
  2. Android 使用Application类保存应用的全局数据
  3. 360p4虚拟服务器,360安全路由p4c常见的问题以及解决方法介绍
  4. matplotlib散点图点大小_一步步学Matplotlib炫酷可视化(上)
  5. python生成器generator:深度学习读取batch图片
  6. 远程工作时的协作工具
  7. android 判断对象,Android网络判断知识小结
  8. 电脑向linux服务器传输文件,windows如何通过ssh工具向linux服务器上传和下载文件?...
  9. 代码投毒、删库跑路,开源生态链安全该如何保证?
  10. zookeeper清空hbase_HBase在zookeeper下不创建目录
  11. 图算法之k-Core
  12. js案例练习:跟随鼠标移动的小天使
  13. vivado布线congestion拥塞
  14. 微信小程序云开发之将云数据库信息导出到Excel表格并复制下载链接
  15. c语言中除法除以1000与1e3,北京航空航天大学C语言b第二讲(第三、四章)数据类型、运算符与表达式和最简单的C程序设计.ppt...
  16. 消除span之间的空隙
  17. android轮播图简单实现(左右无限滑动,自动轮播)
  18. 认识WebStorm-小程序框架wepy
  19. IDEA的一些玄学问题
  20. 五绝------送卢兄之某传xiao之都

热门文章

  1. Unicode和Ascii转byte,Unicode占二个byte,Ascii占一个byte
  2. Silverlight:使用Storyboard控制动画--控制动画事件交互
  3. 从Text文本中读值插入到数据库中
  4. python入门系列:对象引用、垃圾回收、可变性
  5. CF888E Maximum Subsequence(meet in the middle)
  6. 安装mariadb、安装Apache
  7. 企业如何杜绝云端数据泄密?
  8. 团队作业-第二周-测试计划
  9. 第11章 路由器OSPF动态路由配置
  10. SQL SERVER2000教程-第二章-创建和管理数据库 第六节 压缩数据库