精华内容
下载资源
问答
  • Android Studio3.0开发JNI流程,C++调用Java以及Java调用C++C++/Java互相调用一个简单案例
  • Qt提供Android应用中写Java代码的功能。这就像人们用Android Studio(或者Eclipse等)开发Android应用程序时可用写C++程序一样。默认情况下,Qt只能用Qt提供的模块(大多数情况下已经够用了)写C++程序。但是,在...
  • 5、六种主流编程语言C++、PYTHON、JAVA对比
  • 词法分析器代码,包含javac++两种实现。编译原理实验。
  • javaRSA加密C++RSA解密

    2017-11-28 16:32:04
    项目: JAVA生成的RSA的密文,通过C++来解密。 RSA这里就不多介绍了大家自己去看。 JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的。 重点来到了:RSA使用过程 1、C++随机生成一对...
  • c/c++java互通 AES加密解密; 只使用基本string,数组运算实现加密算法;不依赖其它加密lib
  • C++调用Java方法

    2018-10-17 16:00:08
    Android Studio项目,此Demo实现Java调用C++函数,然后C++函数回调Java方法、纯C++直接调用Java方法,此为github地址链接
  • aes加解密算法(javac++互通)
  • 关于C++JAVA,AES/ECB/PKCS5Padding 互相通信的问题一点小见解和代码。 有需要的可以下载一下。
  • Java c++ socket通信

    2016-03-20 21:40:03
    Java客户端,c++服务端通过socket进行网络通信,传输数据
  • c++java互调代码示例

    2012-10-26 17:26:28
    通过代码和问题详细说明c++java互调方法
  • 4、c语言和c++和Python-和Java优缺点 4、c语言和c++和Python-和Java优缺点
  • c++ 转换java工具破解版,可以转换c++代码到java代码。
  • C++ to Java Converter

    2018-12-10 09:22:04
    超强的C++ to Java转换工具!!希望对大家有帮助。无污染。
  • 萌新,C++Java、Python 选择哪个好?

    千次阅读 多人点赞 2021-03-18 11:08:51
    如果你还处于大一,大二,或者刚刚入门阶段,那么我认为,语言的选择并不重要,更重要的是底层/通用基础的学习,例如数据结构,算法,计算机网络这些,因为这些语言,是存在很多相同的特性的,例如你学习了 C++,...

    大学那会也被这个问题被困惑了大半年,直到毕业拿了几个大厂offer

    image.png

    才发现语言的选择也就那一回事,我猜不少人刚入门的人依然被这个问题困扰着,所以决定认真分享一波我的经历。

    如果你还处于大一,大二,或者刚刚入门阶段,那么我认为,语言的选择并不重要,更重要的是底层/通用基础的学习,例如数据结构,算法,计算机网络这些,因为这些语言,是存在很多相同的特性的,例如你学习了 C++,后面要转 Java,那么其实还是可以很快就上手的。

    而且,等到了差不多毕业去应聘校招的时候,其实公司并不会对语言有严格的要求,例如你要面试后端的岗位,那么 Java,C++,Python,Go 等,随便熟悉一门就可以了,反正我当时自己学习的是 Java 技术栈,面腾讯时,特么没问过我一句 Java,投递了其他公司的 C++ 岗位,面试时,跟面试官说我学的是 C++ 就可以了,面试官就不问 C++ 了,而是着重问别的知识,例如项目,算法,计算机基础等等。

    所以我认为,对于学生而言,语言的选择并不重要,当然,工作了多年的另说,因为学生和工作多年的还是不一样,这里有个学习成本在这里,但是对于学生的话,毕业入职公司之后,其实你工作的内容和你掌握的技术栈不一定是匹配的,例如你学的是 Java,入职的第一个项目,可能需要你使用 python,Go 啥的,不过你完全不用担心自己没学过,因为公司会给你很多时间去学习,而且你学过 Java,学起其他语言会很快的。而对于工作多年的,一入职可能就需要你要有产出,不会给你很多时间学习,当然,工作多年的语言都选好啦,并不存在这个疑惑。

    所以呢,我认为学习哪个语言都可以,看你自己喜欢哪个语言,大一和大二那会,我还是建议大家多花时间在基础知识的学习上,例如数据结构与算法,操作系统,计算机基础,数据库等等,因为这部分知识,无论是对你未来的求职 还是个人的成长,都有非常大的帮助。

    然后呢,确定自己的技术栈,是要走前端还是要走后端,这些反而比语言的选择更加走重要吧,因为这会影响你后期很多知识的学习,前端和后端,除了基础知识的学习外,后面的学习还是有挺多的区别的。

    如果你实在不知道怎么选择,那我就建议你走 Java 后端开发吧,按照目前的行情,Java 后端找个工作还是不难,很多公司也都有 Java 后端的岗位,当然,如我上面所说,你基础知识掌握的好,到时候面其他后端开发也是完全可以的。

    下面我也总结了一套 Java 后端的学习路线,跟着这套学习路线,校招水个中大厂的 offer,概率还是挺大,到时候记得帮我点个赞就好啦

    一、Java 入门

    注意,下面所有推荐的书籍,大家都可以在这里下载到:【干货分享】计算机书籍很贵?别瞎找了,我发现了一个宝藏github,贡献给大家

    一开始肯定要了解一波 Java 语言的特性,很多人都关心一开始看什么资料,其实我不推荐入门阶段看的太多太杂,因为你不知道哪些是有用的,哪些是过时的,或者在目前阶段用不到的。

    对于初学者尤其是没有一点编程基础的人来说,要渡过这个从零到一的过程,往其实是非常艰难的,挫败感会非常强。如果有人领路,或者选择一门优质的课程,效果会好的很多。没事,这篇文章就来当作你们的领路人!!!

    下面这些学习资料都是我曾经读过或者看过的,没看过的我也不会介绍。还是那句话,资料和视频都是辅助,顶多领你入门,剩下的还是靠自己。

    学习书籍推荐:《Java核心卷1》,这个算是入门书籍吧,入门书籍我看的不多,暂时介绍这一本,大家可以去网上搜索,但个人感觉看完这本书差不多了。

    有一些基础的可以看《Java编程思想》,这本书也很好,解决了我很多疑惑,不过有点难度,我是选择性看的。

    Java 编译器推荐用 IntelliJ IDEA,安装步骤自己百度去搜索。

    视频推荐:这里推荐高琪Java300集,b 站搜索就可以了。讲的还是挺好,入门的话,感觉看前面 100 集就可以了。

    二、Java 进阶

    想要靠 Java 来吃饭,单单靠看书刷视频肯定是不够的,咱们还得深入学习一波 Java 语言的特性,为了让大家少走弯路,我总结了如下核心知识:

    集合模块:主要是包括各种常用集合:例如 Set(包括HashSet,TreeSet), Map(包括 HashMap,HashTable),List(包括ArrayList,LinkedList)等等,上面列举的都得学习它的源码

    多线程:synchronize,volatile,线程池,并发包(如lock等等),太多了,学了你们自然知道,我也不说的太详细了。

    推荐看《Java 并发编程艺术》+《Java并发编程实战》,这两本就够了,《Java并发编程艺术》感觉得看三四遍才行,第一遍看了就忘光了,第二遍会有其他的收获,第三遍就可以吊打面试官了,书籍的下载方式我上面已经说了。

    各种文件流:file,inputStream,outputStream等等,反正就是各种文件流,看书时你们自然会看到,必须多实践,不详细介绍。

    虚拟机:虚拟机是必须学习的了,重点是GC部分,推荐看《深入理解Java虚拟机:JVM 高级特性与最佳实践》,一本就差不多够了,多看四五遍就行了。

    其他:还有很多,如反射,注解,异常等。

    三、JavaWeb 入门

    学了上面那么多,啥程序、网站也没写出来,有点难受?没事,这个时候,我们就要开始撸网站了,如果是以 Java 作为开发语言的,那么 JavaWeb 是必须学的了。这个时候你可以入门学习下这些(注意,不用深入,快速找个视频入门就可以了

    1、mysql、html+css+js 、 tomcat、xml等。推荐看视频,自己去搜索 JavaWeb的视频,那么哪里不会补哪里,这些知识,几个小时就可以入门一门的了。至于 msyql,入门推荐看《mysql不知必会》,进阶看《mysql技术内幕》,看完就差不多了。

    2、servlet+jsp 系列。

    不建议直接学习框架,也是应该先学习 servlet,这些底层才是最重要滴。servlet可以跟着视频学,至于 jsp 其实很少用了,不过还是可以了解一下。

    ### 四、框架的学习框

    Servlet 写太麻烦了,只有认真学过 servlet 的人才能吹框架的好处,所以必须先学 servlet 再来学习框架,主要有三大框架:Spring + SpringMVC + Mybatis。

    其实 SpringMVC 也是属于 Spring 吧,MVC 只是一种思想,这里学习顺序是先建议学习 Spring,直接看视频入门学习就可以了,后面再买书,掌握到什么程度?最后是要能知道一些原理,例如IOC,AOP的原理,使用了什么设计模式等等。

    不过现在搭 ssm 太麻烦,基本都是用 SpringBoot 了,所以 SpringBoot 也必须,之后有时间的话,也要学习下 SpringCloud.

    五、中间件的学习

    必须学的中间件:redis,Redis 基本面试必问,工作也基本的都会使用到,所以必须掌握,推荐书籍《Redis 设计与实现》、《Redis开发与运维》。两本书刷完,就差不多了,或者说第一本书刷完就差不多了。

    其他的话,像消息队列啊,分布式等相关框架,有时间也可以学习一波。

    六、一个完整的项目

    把上面的 Java 基础以及框架学了,就要做个完整的项目了,我只能说,项目非常非常重要,这时候自学以及跨行业的劣势就非常大了,因为面试的过程,一定会问项目,而且必须是你自己亲自做过的项目,假如你只是看视频,没有动手实践,很容易就会被问懵。所以一定一定一定要亲自动手做一个项目。

    当然不是说这个问题就成了死结了,大家可以选择实操课程去解决自己在项目经验上的缺失,特别是那种基于真实项目的课程。

    一定要至少做一个项目;一定要至少做一个项目;一定要至少做一个项目;

    关于项目的推荐,楼主也正在总结收集中,后面应该会整理出来。

    七、计算机基础的学习

    看过我文章的都知道,我一直强调计算机基础的重要性,所以这里必须列举要学的有哪些。主要包括:计算机网络 + 操作系统 + 数据库 + 汇编 + 计算机组成原理 + 编译原理 等等。

    假如你没那么多时间去学习的话,我给你列个优先级吧

    1、计算机网络 + 操作系统

    2、数据库 + 计算机组成原理(数据库相应你们可能已经先学过 MySQL 了)

    3、汇编 + 编译原理

    这方面我也总结了一份计算机基础的学习资料:计算机专业必看的几门视频教程

    另外,算法的学习也是必经之路,这里给大家推荐一个大佬的刷题笔记

    BAT大佬的刷题笔记太经典

    最后

    以上无论是视频还是书籍,我都千辛万苦帮你找来了,书籍直接这个 GitHub 上找:【干货分享】计算机书籍很贵?别瞎找了,我发现了一个宝藏github,贡献给大家。后面会慢慢更新一些高质量的资料。

    绝对有帮助,别忘了送个赞呗,楼主泪目感谢。

    作者简洁

    作者:大家好,我是帅地,从大学、自学一路走来,深知算法计算机基础知识的重要性,目前专注于写这些底层知识,提升我们的内功,帅地期待你的关注,和我一起学习,点击了解我四年大学学习之路 转载说明:未获得授权,禁止转载

    展开全文
  • JAVAC++工具

    2018-09-20 10:35:27
    JAVA代码转C++代码的工具,可以按照目录进行转换,虽然不是全部都转换的很好,但还是不错的
  • C++java语法的异同整理

    千次阅读 2019-05-04 23:05:07
    文章目录C++中的虚函数和JAVA中的抽象方法区别C++虚函数与JAVA中抽象函数比较关于接口与抽象类: C++中的虚函数和JAVA中的抽象方法区别 C++虚函数与JAVA中抽象函数比较 1:java中没有虚函数的概念,但是有抽象函数...

    Java与C++与基础语法异同

    javaC++
    double 要用%f;double 要用%d
    布尔型:boolean;布尔型:bool
    字符型占2个字节,Unicode编码格式字符型占1个字节,Assci编码格式
    If , while,for 中进行真假判断时只能使用逻辑表达式,不能用1和0数字来表示真假可以用0和1来表示真假
    如果你定义了有参的构造函数,则当你调用无参的构造函数时,必须自己定义无参的构造函数;不需要
    java 中数组是引用类型,只能在堆中创建数组可以在栈中创建
    较长的整数后要加L,隐含为long类型较长的整数不需要加L
    安全性高:当高级类型转换为低级类型会报错!例;想要将double转换为float, float a=2.0f(F)
    取余时:被除数和除数可以是实数;但所得余数的正负只和被除数相同
    Java中没有指针:A a=new A();A *a=new A();
    java中不行C和C++ 中枚举类型enum是可以用0,1……来表示的
    java不存在全局变量或者全局函数C++可以定义全局变量和全局函数
    java不支持运算符重载C++支持运算符重载
    java不支持默认函数参数C++支持默认的函数参数
    java中类继承,如果父类方法要重写,不用加任何关键字C++要加 virtual 关键字
    Java中,super可以表示父类,this表示类本身
    字符串是用类对象(String和StringBuffer)来实现的 [1]c和c++不支持字符串变量,在c和c++程序中使用null终止符代表字符串的结束
    java类继承采用关键字“extends"C++类继承采用符号“:”
    java中运算符都用运算符“.”C++中的域运算符用“::”,指针运算用“->"
    Java增添了三个右移位运算符“>>>”,具有与“逻辑”右移位运算符类似的功用,可在最末尾插入零值。“>>”则会在移位的同时插入符号位(即“算术”移位)
    静态引用的字串会自动转换成String对象c\c++没有独立的静态字符数组字串可供使用
    java中采用关键字“import”以包的形式导入,文件层级之间采用符号“.”隔开C++中包含文件采用预处理命令“#include”,文件层级之间用符号“\”隔开
    java中声明常量的关键字是“final”,只不过 java中关键字final还有另外的作用: 当一个成员函数被定义为final,则这个成员函数不能被重写;当一个类被定义为final,则这个类不能被继承C++中声明常量的关键字是“const”
    java的接口是通过使用关键字“interface”定义实现的,java的接口可以多继承,一个接口可以拥有几个父接口(也叫做接口的扩展),实现接口的类必须要有关键字“implement”来定义C++的接口是通过定义纯虚类来实现的
    在java中方法的局部变量位于栈上,类对象位于堆上,所以方法内部类对象不能使用局部变量,但是可以使用常量
    Java中创建多线程有两种方法,一种是类实现“Runable”接口,一种是类继承“Thread”虚类,然后这两种方法都要对run()函数进行重写C++创建多线程有三种办法,一种是用Windows的API函数“CreateThead()”,一种是MFC中的函数“AfxBeginThread()”,一种是MS的“_beginthreadex()”函数

    [1] c和c++不支持字符串变量,在c和c++程序中使用null终止符代表字符串的结束,在Java中字符串是用类对象(String和StringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
    (1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
    (2)字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
    (3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
    (4)可对字符串用“十”进行连接操作。
    Java多线程的调度方法有
    setPriority(设置优先级),sleep(睡眠),join(加入),yield(让步);
    关键字“synthronized(锁的标志)”,同步代码块的格式为: synthronized(threadname)

    Java多线程间实现通信,需要用到如下3个方法:
    wait()表示让当前线程进入等待状态
    notify()表示恢复一个等待中的线程
    notifyAll()恢复所有等待中的线程

    java的认知& java与C++的异同

    javaC++
    java为解释性语言(源代码通过java编译器编译成字节码交由JVM解释执行)C/C++为编译型语言(源代码经过编译和链接后生成可执行的二进制编码)
    java的执行速度比C/C++的执行速度慢,java能够跨平台执行C/C++不可以
    java纯面向对象(所有代码在类中实现,除基本类型外,所有类型都为类)C++兼具面向过程和面向对象编程的特点
    java中没有指针的概念,防止了C++语言中操作指针可能引起的系统问题,使程序变得更加安全c++有指针概念
    java不支持多继承(java引入了接口的概念,可以同时实现多个接口,也具有多态性)C++支持多继承(无接口概念)
    java自己提供了垃圾回收器来实现垃圾的自动回收,不需要显示的管理内存的分配。(java不存在析构函数,引入了finalize()方法,当垃圾回收将要释放无用内存时,会首先调用该方法)C++需要开发人员去管理对内存的分配,包括申请和释放。(释放资源的代码放在析构函数中)
    java没有预处理器,不支持预处理功能(包括头文件和宏的定义)注:java提供了import 机制与C++的预处理器功能类似。C++支持预处理
    java不支持goto**[1]**语句(java中goto是保留关键字)C++支持goto语句
    java不支持强制类型转换(java需要开发人员显示的强制类型转换) [2]C++支持自动强制类型转换
    java具有平台无关性(每种类型分配固定的长度)C++具有平台性(同一种类型在不同的平台分配的长度不同)
    java包含一些标准库,用于完成特定的任务,同时这些库简单易用,能够大大的缩短开发周期。(提供了访问数据库的JDBC库,用于实现分布式对象的RMI等标准库)C++依靠一些非标准的,由其他厂商提供的库
    java的程序代码是在包package里面==[3]==C++中所有的程序代码都在一个“.h”或者“.cpp”文件里面

    [1] 注:goto语句也称为无条件转移语句,其一般格式如下:
    goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
    如: label: i++;

    [2] 注:java引入泛型的概念,更好的处理类型的问题
    java和c\C++的简单区别(string):
    C中没有String引用类型,它是用字符数组表示,用‘\0’表字符结束;而C++和java中有String引用类型;
    另外,C++中的String对象可以用s[i]进行操作,而Java中则不可以,需要转换为char[]才行;
    [3] package(包)的名字是用点号建立的,并能用import关键字实现C++的“#include”的一部分功能。例如下面这个语句:

    import java.awt.*;

    (#include并不直接映射成import,但在使用时有类似的感觉。)
    补充

    1. 最大的障碍在于速度:解释过的Java要比C的执行速度慢上约20倍。无论什么都不能阻止Java语言进行编译。写作本书的时候,刚刚出现了一些准实时编译器,它们能显著加快速度。当然,我们完全有理由认为会出现适用于更多流行平台的纯固有编译器,但假若没有那些编译器,由于速度的限制,必须有些问题是Java不能解决的。
    2. 所有东西都必须置入一个类。不存在全局函数或者全局数据。如果想获得与全局函数等价的功能,可考虑将static方法和static数据置入一个类里。注意没有象结构、枚举或者联合这一类的东西,一切只有“类”(Class)。
    3. 尽管表面上类似,但与C++相比,Java数组采用的是一个颇为不同的结构,并具有独特的行为。有一个只读的length成员,通过它可知道数组有多大。而且一旦超过数组边界,运行期检查会自动丢弃一个异常。所有数组都是在内存“堆”里创建的,我们可将一个数组分配给另一个(只是简单地复制数组句柄)。数组标识符属于第一级对象,它的所有方法通常都适用于其他所有对象。
    4. 对于所有不属于主类型的对象,都只能通过new命令创建。和C++不同,Java没有相应的命令可以“在堆栈上”创建不属于主类型的对象。所有主类型都只能在堆栈上创建,同时不使用new命令。所有主要的类都有自己的“封装(器)”类,所以能够通过new创建等价的、以内存“堆”为基础的对象(主类型数组是一个例外:它们可象C++那样通过集合初始化进行分配,或者使用new)。
    5. Java中不必进行提前声明。若想在定义前使用一个类或方法,只需直接使用它即可——编译器会保证使用恰当的定义。所以和在C++中不同,我们不会碰到任何涉及提前引用的问题。
    6. Java没有预处理机。若想使用另一个库里的类,只需使用import命令,并指定库名即可。不存在类似于预处理机的宏。
    7. Java用包代替了命名空间。由于将所有东西都置入一个类,而且由于采用了一种名为“封装”的机制,它能针对类名进行类似于命名空间分解的操作,所以命名的问题不再进入我们的考虑之列。数据包也会在单独一个库名下收集库的组件。我们只需简单地“import”(导入)一个包,剩下的工作会由编译器自动完成。
    8. 被定义成类成员的对象句柄会自动初始化成null。对基本类数据成员的初始化在Java里得到了可靠的保障。若不明确地进行初始化,它们就会得到一个默认值(零或等价的值)。可对它们进行明确的初始化(显式初始化):要么在类内定义它们,要么在构建器中定义。采用的语法比C++的语法更容易理解,而且对于static和非static成员来说都是固定不变的。我们不必从外部定义static成员的存储方式,这和C++是不同的。
    9. 在Java里,没有象C和C++那样的指针。用new创建一个对象的时候,会获得一个引用(本书一直将其称作“句柄”)。例如:
        String s = new String(“howdy”);
        然而,C++引用在创建时必须进行初始化,而且不可重定义到一个不同的位置。但Java引用并不一定局限于创建时的位置。它们可根据情况任意定义,这便消除了对指针的部分需求。在C和C++里大量采用指针的另一个原因是为了能指向任意一个内存位置(这同时会使它们变得不安全,也是Java不提供这一支持的原因)。指针通常被看作在基本变量数组中四处移动的一种有效手段。Java允许我们以更安全的形式达到相同的目标。解决指针问题的终极方法是“固有方法”(已在附录A讨论)。将指针传递给方法时,通常不会带来太大的问题,因为此时没有全局函数,只有类。而且我们可传递对对象的引用。Java语言最开始声称自己“完全不采用指针!”但随着许多程序员都质问没有指针如何工作?于是后来又声明“采用受到限制的指针”。大家可自行判断它是否“真”的是一个指针。但不管在何种情况下,都不存在指针“算术”。
    10. Java提供了与C++类似的“构建器”(Constructor)。如果不自己定义一个,就会获得一个默认构建器。而如果定义了一个非默认的构建器,就不会为我们自动定义默认构建器。这和C++是一样的。注意没有复制构建器,因为所有自变量都是按引用传递的。
    11. Java中没有“破坏器”(Destructor)。变量不存在“作用域”的问题。一个对象的“存在时间”是由对象的存在时间决定的,并非由垃圾收集器决定。有个finalize()方法是每一个类的成员,它在某种程度上类似于C++的“破坏器”。但finalize()是由垃圾收集器调用的,而且只负责释放“资源”(如打开的文件、套接字、端口、URL等等)。如需在一个特定的地点做某样事情,必须创建一个特殊的方法,并调用它,不能依赖finalize()。而在另一方面,C++中的所有对象都会(或者说“应该”)破坏,但并非Java中的所有对象都会被当作“垃圾”收集掉。由于Java不支持破坏器的概念,所以在必要的时候,必须谨慎地创建一个清除方法。而且针对类内的基础类以及成员对象,需要明确调用所有清除方法。
    12. Java具有方法“过载”机制,它的工作原理与C++函数的过载几乎是完全相同的。
    13. Java不支持默认自变量。
    14. Java中没有goto。它采取的无条件跳转机制是“break 标签”或者“continue 标准”,用于跳出当前的多重嵌套循环。
    15. Java采用了一种单根式的分级结构,因此所有对象都是从根类Object统一继承的。而在C++中,我们可在任何地方启动一个新的继承树,所以最后往往看到包含了大量树的“一片森林”。在Java中,我们无论如何都只有一个分级结构。尽管这表面上看似乎造成了限制,但由于我们知道每个对象肯定至少有一个Object接口,所以往往能获得更强大的能力。C++目前似乎是唯一没有强制单根结构的唯一一种OO语言。
    16. Java没有模板或者参数化类型的其他形式。它提供了一系列集合:Vector(向量),Stack(堆栈)以及Hashtable(散列表),用于容纳Object引用。利用这些集合,我们的一系列要求可得到满足。但这些集合并非是为实现象C++“标准模板库”(STL)那样的快速调用而设计的。Java 1.2中的新集合显得更加完整,但仍不具备正宗模板那样的高效率使用手段。
    17. “垃圾收集”意味着在Java中出现内存漏洞的情况会少得多,但也并非完全不可能(若调用一个用于分配存储空间的固有方法,垃圾收集器就不能对其进行跟踪监视)。然而,内存漏洞和资源漏洞多是由于编写不当的finalize()造成的,或是由于在已分配的一个块尾释放一种资源造成的(“破坏器”在此时显得特别方便)。垃圾收集器是在C++基础上的一种极大进步,使许多编程问题消弥于无形之中。但对少数几个垃圾收集器力有不逮的问题,它却是不大适合的。但垃圾收集器的大量优点也使这一处缺点显得微不足道。
    18. Java内建了对多线程的支持。利用一个特殊的Thread类,我们可通过继承创建一个新线程(放弃了run()方法)。若将synchronized(同步)关键字作为方法的一个类型限制符使用,相互排斥现象会在对象这一级发生。在任何给定的时间,只有一个线程能使用一个对象的synchronized方法。在另一方面,一个synchronized方法进入以后,它首先会“锁定”对象,防止其他任何synchronized方法再使用那个对象。只有退出了这个方法,才会将对象“解锁”。在线程之间,我们仍然要负责实现更复杂的同步机制,方法是创建自己的“监视器”类。递归的synchronized方法可以正常运作。若线程的优先等级相同,则时间的“分片”不能得到保证。
    19. 我们不是象C++那样控制声明代码块,而是将访问限定符(public,private和protected)置入每个类成员的定义里。若未规定一个“显式”(明确的)限定符,就会默认为“友好的”(friendly)。这意味着同一个包里的其他元素也可以访问它(相当于它们都成为C++的“friends”——朋友),但不可由包外的任何元素访问。类——以及类内的每个方法——都有一个访问限定符,决定它是否能在文件的外部“可见”。private关键字通常很少在Java中使用,因为与排斥同一个包内其他类的访问相比,“友好的”访问通常更加有用。然而,在多线程的环境中,对private的恰当运用是非常重要的。Java的protected关键字意味着“可由继承者访问,亦可由包内其他元素访问”。注意Java没有与C++的protected关键字等价的元素,后者意味着“只能由继承者访问”(以前可用“private protected”实现这个目的,但这一对关键字的组合已被取消了)。
    20. 嵌套的类。在C++中,对类进行嵌套有助于隐藏名称,并便于代码的组织(但C++的“命名空间”已使名称的隐藏显得多余)。Java的“封装”或“打包”概念等价于C++的命名空间,所以不再是一个问题。Java 1.1引入了“内部类”的概念,它秘密保持指向外部类的一个句柄——创建内部类对象的时候需要用到。这意味着内部类对象也许能访问外部类对象的成员,毋需任何条件——就好象那些成员直接隶属于内部类对象一样。这样便为回调问题提供了一个更优秀的方案——C++是用指向成员的指针解决的。
    21. 由于存在前面介绍的那种内部类,所以Java里没有指向成员的指针。
    22. Java不存在“嵌入”(inline)方法。Java编译器也许会自行决定嵌入一个方法,但我们对此没有更多的控制权力。在Java中,可为一个方法使用final关键字,从而“建议”进行嵌入操作。然而,嵌入函数对于C++的编译器来说也只是一种建议。
    23. Java中的继承具有与C++相同的效果,但采用的语法不同。Java用extends关键字标志从一个基础类的继承,并用super关键字指出准备在基础类中调用的方法,它与我们当前所在的方法具有相同的名字(然而,Java中的super关键字只允许我们访问父类的方法——亦即分级结构的上一级)。通过在C++中设定基础类的作用域,我们可访问位于分级结构较深处的方法。亦可用super关键字调用基础类构建器。正如早先指出的那样,所有类最终都会从Object里自动继承。和C++不同,不存在明确的构建器初始化列表。但编译器会强迫我们在构建器主体的开头进行全部的基础类初始化,而且不允许我们在主体的后面部分进行这一工作。通过组合运用自动初始化以及来自未初始化对象句柄的异常,成员的初始化可得到有效的保证。
      public class Foo extends Bar {
       public Foo(String msg) {
       super(msg); // Calls base constructor
       }
       public baz(int i) { // Override
       super.baz(i); // Calls base method
       }
      }
    1. Java中的继承不会改变基础类成员的保护级别。我们不能在Java中指定public,private或者protected继承,这一点与C++是相同的。此外,在衍生类中的优先方法不能减少对基础类方法的访问。例如,假设一个成员在基础类中属于public,而我们用另一个方法代替了它,那么用于替换的方法也必须属于public(编译器会自动检查)。
    2. Java提供了一个interface关键字,它的作用是创建抽象基础类的一个等价物。在其中填充抽象方法,且没有数据成员。这样一来,对于仅仅设计成一个接口的东西,以及对于用extends关键字在现有功能基础上的扩展,两者之间便产生了一个明显的差异。不值得用abstract关键字产生一种类似的效果,因为我们不能创建属于那个类的一个对象。一个abstract(抽象)类可包含抽象方法(尽管并不要求在它里面包含什么东西),但它也能包含用于具体实现的代码。因此,它被限制成一个单一的继承。通过与接口联合使用,这一方案避免了对类似于C++虚拟基础类那样的一些机制的需要。
        为创建可进行“例示”(即创建一个实例)的一个interface(接口)的版本,需使用implements关键字。它的语法类似于继承的语法,如下所示:
    
      public interface Face {
       public void smile();
      }
      public class Baz extends Bar implements Face {
       public void smile( ) {
       System.out.println("a warm smile");
       }
      }
    1. Java中没有virtual关键字,因为所有非static方法都肯定会用到动态绑定。在Java中,程序员不必自行决定是否使用
    2. JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继承,多态)。而由于C++为了照顾大量的C语言使用者, 而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷。 Java和c++的相似之处多于不同之处,但两种语言几处主要的不同使得Java更容易学习,并且编程环境更为简单。

    C++中的虚函数和JAVA中的抽象方法区别

    C++虚函数与JAVA中抽象函数比较
    • 1:java中没有虚函数的概念,但是有抽象函数的概念,用abstract关键字表示,java中抽象函数必须在抽象类中,而且抽象 函数不能有函数体,抽象类不能被实例化,只能由其子类实现抽象函数,如果某个抽象类的子类仍是抽象类,那么该子类不需要实现其父类的抽象函数。
    • 2:C++中的有虚函数的概念,用virtual 关键字来表示,每个类都会有一个虚函数表,该虚函数表首先会从父类中继承得到父类的虚函数表, 如果子类中重写了父类的虚函数(不管重写后的函数是否为虚函数),要调用哪个虚函数,是根据当前实际的对象来判断的(不管指针所属类型是否为当前类,有可 能是父类型),指针当前指向的是哪种类型的对象,就调用哪个类型中类定义的虚函数。每个类只有一张虚拟函数表,所有的对象共用这张表。
      C++的函数多态就是通过虚函数来实现的。
    • 3:C++中,如果函数不是虚函数,则调用某个函数,是根据当前指针类型来判断的,并不是根据指针所指向对象的类型。
    • 4:Java中,如果函数不是抽象函数,而是一个普通函数,它是默认实现类似C++中虚函数功能的,也就是说,调用某个函数,是根据当前指针所指向对象的类型来判断的,而不是根据指针类型判断。正好与C++中的普通函数相反。即:JAVA里自动实现了虚函数。

    两者的对应关系如下:

    C++java
    虚函数普通函数
    纯虚函数抽象函数
    抽象类抽象类
    虚基类接口

    纯虚函数: 主要特征是不能被用来声明对象,是抽象类,是用来确保程序结构与应用域的结构据具有直接映射关系的设计工具。带有纯虚函数的类称为抽象类,抽象类能被子类 继承使用,在子类中必须给出纯虚函数的实现,如果子类未给出该纯虚函数的实现,那么该子类也是抽象类,只有在子类不存在纯虚函数时,子类才可以用来声明对象。抽象类也能用于声明指针或引用,或用于函数声明中。具有抽象类特性的类还有构造函数和析构函数,全部是保护的类。如果没有给出纯虚函数的实现,则在它所在的类的构造函数或析构函数中不能直接或间接的调用它。纯虚函数的实现可以在类声明外进行定义。

    • 5. C++中一般都是把析构函数声明为虚函数。因为虚函数可以实现动态绑定,也就是到底调用哪个函数是根据指针当前指向哪个对象来确定的,不是根据指针的类型来确定。如果C++中不把析构函数声明为虚函数,那么其有个子类,重写了虚函数,那么当父类指针指向一个子类对象时,当调用析构函数时,只调用父类的析构函数,而无法调用子类的析构函数,所以一般情况是把析构函数声明为虚函数,实现动态绑定。当然如果一个类不包含虚函数,这经常预示不打算将它作为基类使用。当一个类不打算作为基类时,将析构函数声明为虚拟通常是个坏主意。
        标准 string 类型不包含虚函数,如果把String作为基类继承得到子类会出问题。

    总之:多态基类应该声明虚析构函数。如果一个类有任何虚函数,它就应该有一个虚析构函数;如果不是设计用于做基类或不是设计用于多态,这样的类就不应该声明虚析构函数。

    关于接口与抽象类:
    • c++中没有接口的概念,与之对应的是纯虚类,即只含有纯虚函数的类,c++抽象类的概念是含有纯虚函数成员的类。这是因为c++提供多继承,而像java、c#这些只提供单继承(避免多继承的复杂性和低效性)的语言为了模拟多继承功能就提供了接口概念,接口可以继承多个。
        abstract class是抽象类,至少包含一个纯虚函数的类就叫做抽象类。
        但是如果一个类,所有的成员都是纯虚函数,那么它和一般的抽象类在用法上是有区别的。至少microsoft给的com接口定义全部都是仅由纯虚函数构成的类。因此把这样的类定义叫做纯虚类也不算错。
        纯虚函数和虚函数的区别在于前者不包含定义,而后者包含函数体。
        那么纯虚类就是不包含任何实现(包括成员函数定义和成员变量定义。前者代表算法,后者代表结构)。不包含任何算法和结构的类叫做纯虚类,应该没有问题。
        在java里面的确没有纯虚类的概念,因为java里没有纯虚函数这个概念。java管虚函数叫做abstract function,管抽象类叫做abstract class,直接说来,java根本没有virtual这个关键字,都用abstract代替,因此java里面根本就没有pure这个概念。有那就是interface。在interface里面定义的函数都不能有函数体,这个在java里面叫做接口。那么c++里面与interface等同的概念就是纯虚类了,c++用纯虚类来模拟interface这个抽象概念,因此这里说的“纯虚类”与java的abstract class不同,与c++的一般抽象类也不同。“纯虚类”与c++一般抽象类的区别就好比java里面interface 和 abstract class的区别。
        抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类中没有重新定义纯虚函数,而只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体的类。
        抽象类是不能定义对象的。
    未完待续>_<
    

    展开全文
  • C++代码转java工具

    2018-03-28 12:45:49
    C++代码转java工具 C++代码转java工具 C++代码转java工具
  • C++服务器与java进行socket通信案例

    热门讨论 2012-10-08 11:56:24
    C++服务器与java进行socket通信案例
  • C++Java 如何呼叫Matlab 所提供的函数;C++Java 如何呼叫Matlab 所提供的函数;C++Java 如何呼叫Matlab 所提供的函数;C++Java 如何呼叫Matlab 所提供的函数;
  • 华为C++/C/java代码规范(完整版)

    热门讨论 2018-03-14 08:57:04
    最新的华为代码规范,适用于C++/C/java,高清带目录,格式标准的代码给自己和维护者都是一种享受,建议程序员多看看。
  • C++JAVA的区别

    千次阅读 多人点赞 2019-04-26 16:31:06
    C++JAVA的区别 语言层面 JAVA是纯面向对象语言,所有变量和方法都在类中声明和定义 C++为了向前兼容c语言则保存部分面向过程特性。 C++是编译型强类型语言,由编译器直接编译成本地机器识别的机器语言 ...

    C++与JAVA的区别

    语言层面

    JAVA是纯面向对象语言,所有变量和方法都在类中声明和定义
    C++为了向前兼容c语言则保存部分面向过程特性。

    C++是编译型强类型语言,由编译器直接编译成本地机器识别的机器语言
    JAVA是半编译半解释型语言,由编译器得到class字节码文件,然后由虚拟机解释执行,由JIT即时编译器进行热点代码探测直接翻译成机器码。

    JAVA没有指针,虽然虚拟机底层实现还是依赖指针,但不对外开放,更加安全。
    C++ 存在各种指针*、常量指针、指向指针的指针,还有与指针对应的取址&,c++指针使用不当可能存在野指针,指向一个已删除的对象或者有访问权限限制的内存区域。

    类与继承

    C++可以实现多继承抽象基类,
    JAVA只能实现单继承,但可以进行接口多实现和接口多继承接口

    C++的抽象基类用virtual
    JAVA中抽象类用abstract,接口用interface

    C++有类还有结构体、联合体,其中类成员变量默认访问权限为private
    JAVA只有类,类的成员变量默认访问权限为default,是一种包可见访问权限

    操作层面

    C++可以进行函数重载、还可以进行运算符重载
    JAVA只允许函数重载、不允许运算符重载

    c++中有goto和const,而java中作为保留字
    JAVA中有final来定义常量,synchronized用来做同步,transient用来禁止变量进行序列化

    JAVA引入了真正的数组,将指针从中去掉
    C++采用的是“伪数组”,需要时刻关注数组越界问题

    内存管理

    JAVA有自动内存管理
    C++需要手动分配内存和释放内存,采用new和delete或者malloc和free,其中new分配内存并且进行初始化(调用构造函数),delete清除对象(调用析构函数)并且释放内存

    c++程序内存分区为代码段、数据段、堆、栈,其中代码段用来存储程序代码,数据段用来存储全局变量静态数据、堆用于动态内存分配、栈用来存储局部变量函数参数。
    JAVA内部内存分区为程序计数器、堆、栈、方法区,其中栈又分为本地方法栈和虚拟地栈、分别用来存储本地方法和JAVA方法的局部变量、程序计数器用来存储当前线程执行的字节码行号、堆用来存储对象实例、方法区用来存储常量、静态变量、编译后的机器代码等信息。

    其他

    • JAVA线程是直接映射到系统上的多线程,具有天然多线程优势
    • C++字符串string是可变的,JAVA的String是不可变的
    • JAVA的API比较丰富
    展开全文
  • c/c++java互通 AES加密解密,算法ECB

    热门讨论 2012-09-05 08:56:38
    最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...
  • 面向对象编程C++Java比较教程,绝版书吧,中文版和英文版PDF都有,英文很清晰,中文比较清晰,适合C++Java或者JavaC++的程序员
  • JavaC++的性能对比

    万次阅读 多人点赞 2019-01-20 14:55:40
    前两天水群,和别人扯到C++Java的性能对比,感觉现在好多人已经不再说java慢了,甚至好多人认为java性能已经和C++差不多了。但是正好我司有个模块在尝试javaC++,这就引来大家的一片质疑,后来我在网上找到这样...

    前两天水群,和别人扯到C++和Java的性能对比,感觉现在好多人已经不再说java慢了,甚至好多人认为java性能已经和C++差不多了。但是正好我司有个模块在尝试java转C++,这就引来大家的一片质疑,后来我在网上找到这样一份数据,大多数情况下C++无论在运行速度还是内存占用,比Java有更大的优势。
      最终,我们讨论的结论是,java这些年来在性能上提升了非常多,甚至平均性能已经与C++不相伯仲了,但是在某些对性能要求极高的情况下还是不及C++。也就是说C++的性能天花板要比Java高一些。但反过来,Java的开发效率和其生态也是C++没法比。
      整理后的数据如下,原文https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/java-gpp.html

    reverse-complement

    sourcesecsmemgzcpucpu load
    Java3.32609,71221837.5464% 44% 44% 76%
    C++ g++2.93980,71622804.5251% 23% 33% 51%

    pidigits

    sourcesecsmemgzcpucpu load
    Java3.1337,3649383.3699% 2% 3% 4%
    C++ g++1.894,3805131.882% 99% 4% 2%

    fasta

    sourcesecsmemgzcpucpu load
    Java2.3242,21224736.3065% 85% 47% 76%
    C++ g++1.331,74027114.2981% 81% 81% 82%

    fannkuch-redux

    sourcesecsmemgzcpucpu load
    Java17.9831,180128270.5797% 99% 97% 99%
    C++ g++10.121,85298039.95100% 100% 96% 100%

    spectral-norm

    sourcesecsmemgzcpucpu load
    Java4.2633,57295016.3996% 96% 98% 95%
    C++ g++1.981,16410447.8799% 99% 99% 100%

    binary-trees

    sourcesecsmemgzcpucpu load
    Java8.39960,05683527.3981% 85% 74% 90%
    C++ g++3.68119,05280911.9398% 76% 77% 78%

    n-body

    sourcesecsmemgzcpucpu load
    Java22.0032,272148922.071% 0% 0% 100%
    C++ g++9.421,70417639.412% 100% 1% 0%

    k-nucleotide

    sourcesecsmemgzcpucpu load
    Java8.74470,116181227.1271% 73% 93% 74%
    C++ g++3.73156,080162411.6075% 70% 72% 96%

    mandelbrot

    sourcesecsmemgzcpucpu load
    Java6.9676,31679627.0697% 97% 97% 97%
    C++ g++1.5125,64017915.99100% 100% 99% 99%

    regex-redux

    sourcesecsmemgzcpucpu load
    Java10.50571,73692931.6371% 73% 66% 92%
    C++ g++1.83203,52013154.4150% 45% 100% 49%

    Java

    openjdk 11 2018-09-25
    OpenJDK Runtime Environment 18.9 (build 11+28)
    OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

    C++ g++

    g++ (Ubuntu 8.2.0-7ubuntu1) 8.2.0

    原文中还有Java vs C, Java vs C#,Java vs Substrate VM的对比,java和C就差更多了,但是和C#旗鼓相当。

    展开全文
  • C++是不好学,但是我告诉你java也不好学。C++难是难在语言本身,java难是难在各种框架和库。你单纯学个java语法,你什么玩意也做不了,java的东西都在java之外。 上图仅供娱乐,不过今天我们主要探讨JavaC++间...
  • C++Java比较

    万次阅读 多人点赞 2017-05-08 09:48:24
    “作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且Java的语法无疑是非常熟悉的。事实上,Java本来就是从C++衍生出来的。”  然而,C++Java之间仍存在一些显著的差异。可以这样说,这些差异...
  • C/C++服务器(VS2010)与Java客户端(eclipse); 都是控制台程序;
  • 主要介绍了C++JAVA的字符串,JAVA 中String 和StringBuffer的区别,需要的朋友可以参考下
  • C++Java怎么选择,哪个好找工作?

    千次阅读 2020-12-17 10:53:14
    JavaC++各有各的优势,至于选择什么方向要看你的兴趣爱好,只要你基础扎实我相信找工作都不难,而且语言都是相通的。 从两者语言入门来说:Java入门相对简单,C++入门相对难,精通更难! 从学习侧重来说:Java...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 748,186
精华内容 299,274
关键字:

c++java

java 订阅
c++ 订阅