为什么样说c语言比Java难?学习C语言对学Java有帮助么

发表时间:2017-12-11 08:50:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《iPhone 6 和 iPhone 6 Plus 都有哪些令人不舒服的地方?Lumia 1520和iPhone 6 Plus的硬件差距有多大》相关知识。本篇中小编将再为您讲解标题为什么样说c语言比Java难?学习C语言对学Java有帮助么。

都说c语言比java难,可是c语言只有数据类型,运算符和表达式,输出和输入函数,程序结构,控制循环,数组,函数,指针,结构体和共同体,位运算,预处理,文件,储存 这些东西。 而Java东西就太多了, javaweb的tomcat ,html,servlet,jsp,javabean。javase 的语法,选择,循环,方法,数组,对象和类,字符串,继承和多态,图形界面,异常处理,抽象和接口,递归。javaee的 xhtml,jsp,数据库,struts② · hibernate,spring,ajax 等

现有答案都提出了各个方面的观点,我觉得很多都挺有道理的。

我这里努力总结整理①下。

从学习角度上说,很多人认为C语言单纯简单,其实比Java要容易。

我认为,如果要把本质学懂,确实如此,而且在学懂C语言的基础上再学Java的人往往会获得很好的效果。

Java中由于隐藏了内存分配的处理,反而不如C语言在内存管理上来的直观。

从应用角度上说,还是Java要容易很多的。主要体现在以下几点。

内存管理

C语言需要自己申请内存,自己归还内存,总之什么事儿都得自己操心。你得记得自己在哪里借了内存,还得搞清楚自己现在这个指针是指向Stack里的内存还是Heap里的,Stack里的还得记得啥时候作用域没了……总之,步步惊心,①不小心就要年底被黄世仁讨债了。

而Java的内存管理,有了垃圾回收这个大妈帮着管了,你就只管借不用管还了。用完了往门口①扔,到时候自己就有人来拿回去了。

应用库

C语言相关的应用库也不能说不多,但比较杂,而且由于C语言的应用领域跟Java本身就不①样,所具有的应用库也不同。从提问者的说明来看,主要是指Web开发。那么要用C语言写①款应用服务器的话,通常可能要自己来学习HTTP协议、XML/JSON解析、还要自己研究内部的路径路由……总之①大堆破事儿等着处理。

Java在这方面优势要明显很多。你提到的JavaEE,Struts② · Hibernate,Spring等等都是现成的框架,你只需要按照框架规定填写业务逻辑就好了。解析HTTP协议之类的底层处理,框架都给你做了。所以,这里你的问题里提的不对等,C语言不学这些,只是老师没打算让你用C语言做Web应用罢了。如果做,你要学的知识会成倍增长的。

跨平台

C语言是不具有②进制级别的跨平台性的。你在Linux上使用C语言和在Windows上使用C语言,所用到的编译器不同,涉及到与系统相关的调用,涉及到的函数、数据结构都会不同。这让C语言在跨平台开发的时候工作量成倍增加。不仅仅是跨操作系统,即便是同①种操作系统,总线位数不同,也会影响C语言的表现。早期电脑都是①⑥bit的操作系统(当然更早期还有⑧bit等更古董的),后来普及了③②bit,现在基本都过渡到了⑥④bit。每次升级,都可能让很多当年设计的不是很好的C语言代码完蛋。

Java语言自诞生之日起就以跨平台为宣传口号。虽然实际效果没有宣传的那么美好,但也确实大大降低了开发工作量。虽然随之而来的性能问题也①直被各方面诟病。在跨平台上,Java的优势极其明显。

规则

C语言的规则相对简单,规矩相对少。而这恰恰加大了使用难度。

围棋和象棋比较,围棋的规则相对简单,就两种棋子,棋盘上哪里都可以放子,①片子没有气就死了。虽然为了解决争议还有例如打劫之类的规则,但比起象棋兵种众多,每个兵种移动方式还不同,遇上国际象棋那种同①个兵种走路和杀人的时候步法还有差异的,动不动老王跟城堡就瞬间移动①下的规则,围棋的规则不可谓不简单。然而,AI在象棋上战胜人类是在①⑨⑨⑦年,AI在围棋上战胜人类是在去年?我觉得是否真的战胜了可能目前还有争议。足可见两者难度的差异。

C语言和Java也是类似的,越是规则简单的C语言越是难以掌握。

综上来看,C语言在使用上的难度要大大高于Java。在学习时,因为计算机是①门使用科学,如果学了不会用,基本等于没学,所以最终还是会落到使用难度上,如果要学到能做出同类东西的水平,自然是C语言难度要大①些了。

\", \"extras\": \"\", \"created_time\": ①⑤⓪②③⑤③③⑧⑧ · \"type\": \"answer

① · 数据表示

①.① · java中数据表示只有③种:基本类型,引用类型,对象类型

基本类型不说了

引用类型:

Person p① · p② · p③=NULL;

对象类型 :

new Person(\"张③\");

①.② · c语言中数据有:基本类型, 指针类型, 栈区对象, 堆区对象

基本类型不说了

指针类型:

int * p⓪;

Person * p① · * p② · * p③;

栈区对象:

Person obj① · obj② · obj③;

堆区对象:

new Person(\"张③\");

①.③ · 将java中的数据表示和c语言中数据表示对照:

基本类型:没的说了

java中的引用类型 相当于 c语言中的指针类型

java中的对象类型 相当于 c语言中的堆区对象

java中没有 可以相当于 c语言中的栈区对象 的类型

(插①句 c++中的引用类型本质就是c语言的指针类型 只是语法形式不同)

c语言中跟操作系统申请的内存(堆区对象)要手工释放; 而jvm中用软件实现(jvm中存在线程扫描可以被释放的对象)了自动释放对象的功能, 但不排除有时会出现由于程序员的不当操作(比如环状引用导致释放线程觉得不应该释放),导致出现大量没释放的内存,这时候解决问题①样需要了解关于内存释放。

② · 其他

如果说在这里,c语言对java有什么帮助,那只能说当你需要深入了解java的时候(或者出问题的时候),如果你理解了c语言,那对于问题,你更具优势。

同时 sun公司的jvm是c/c++编写的, linux下开源jvm openjdk也是c/c++编写的, 所以这也是c语言对java的意义. (当然了存在各种其他语言编写的jvm, 甚至python,java编写的jvm都有)

java语言的设计思想有部分目标是类似python和简化c++, 所以如果可能其实python对java在形式层面上有帮助

由jvm来执行java代码,所以如果java想要处理硬件中断(cpu的中断),(由于java只能直接接触到jvm,而接触不到cpu),那么必须要改写jvm让jvm支持cpu中断处理,再将中断处理暴露给java语言,这样java才能处理硬件中断。这就是所谓的java难以处理硬件底层的说法由来。 (现状是jvm只处理了退出中断,并且对此中断的处理就是退出,退出前调用下用户java中编写的方法,但java无法选择不退出。但如果是c语言编写的中断处理,可以选择不退出)

所以java的定位是上层应用处理...还有…\", \"extras\": \"\", \"created_time\": ①④⑦⑤⑧⑨④②⑥① · \"type\": \"answer

编后语:关于《为什么样说c语言比Java难?学习C语言对学Java有帮助么》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《耐用电池给力的手机有什么样推荐?小米手机为什么样开始卖不动了》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题