C与Java的区别
都说了这么多了,我打个很简单的例子吧。
电梯LZ做过吧?我想肯定有的吧。酒店门口的,弥红灯见过吧?肯定有的吧?LZ去移动或联通冲过话费,或办理过宽带吗?有的吧?
1
电梯与弥红灯的程序是C写的
2
移动或联通充值系统,营业员操作电脑的那个是JAVA做的,柜式的是C做的
C是做底层开发的,能够直接抓取控制内存,基于硬件的。它所写出来的程序能够快速有效直接的被执行。并且C是面向过程的一门编程语言
JAVA
是需要有虚拟机进行解释的不能够操控硬件,抓取内存,因为它没有指针,它执行的时候需要进行转译成机器能懂得语言,然后才能被执行。
JAVA
主要做WEB开发
C主要用于
系统,硬件的开发
JAVA
能做的
C能做,C能做的JAVA不能做!并不是说JAVA没有C强,只能说,用处不一样,各有优势。
就这么多希望对LZ有帮助
想做好c语言或者JAVA前期一定要系统的学习一下。两者的区别:1、面向对象Java的面向对象的指向性很明显,而C则是一个正规的结构化语言。 Java中有一个字符串类String, 通过调用 Stringlength()就可以了解字符串的长度,但是在C语言中,则需要使用函数strlen(str)来得到字符串(字符数组)的长度。2、名称空间Java通过包(package)来实现名称空间,在C语言中,所有的函数都处于同一名称空间,也就是没有名称空间,因此就会很多程序提供的api接口函数都有一个前缀3、内存管理在Java中,基本不用考虑内存的问题,如果想用一个对象,new一个就可以,这个过程的背后则是JRE为对象分类的一定内存,当JRE检测到你不再使用这个对象的时候,他就会自动回收内存,也就是说你只管借东西,不用管归还,因为与有人当你的跟班,在你不使用的时候就把东西归还了,不过这个过程还是有的,只不过是JRE作的而已。达内教育
但是C语言则不同,如果你想用,你可以用malloc之类的方法申请内存,当你使用完了,因为没有跟班的,你需要自己把这块内存归还回去,也就是调用free方法来完成这个任务。由于需要显式的归还内存,因此当一个函数需要将一块内存返回给调用者的时候,问题就相对复杂了,不像面向对象和具有内存回收功能的Java那么直观了。
想学好C语言或者JAVA,必须要到专业的教育机构进行系统的学习。达内在培训行业是做的非常专业,拥有19年专注C语言培训,携手一线行业大咖研发课程,并亲自参与授课。60%实训项目,有4个课程进阶体系。同时达内有C语言和JAVA的线上公开课,可以进行免费的学习,感兴趣的可以参加一下达内的线上试听课,系统的学习一下。 免费试听报名入口
对于这个问题,在C语言当中,有几种解决方式:(1) 在调用者中先分配好内存,作为参数输送到被调用的函数中(2) 在被调用的函数中分配,使用完后在调用者中释放(3) 在被调用函数之中使用static变量,可以将该变量返回。
JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,摒弃了其他语言的不足之处,从根本上解决了c++的固有缺陷。
Java和c++的相似之处多于不同之处,但两种语言有几处主要的不同使得Java更容易学习,并且编程环境更为简单。
我在这里不能完全列出不同之处,仅列出比较显著的区别:
1.指针
JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误,如野指针所造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
2.多重继承
c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。
3.数据类型及类
Java是完全面向对象的语言,所有函数和变量都必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。
4.自动内存管理
Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于c++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:
Read r=new Read();
rwork();
语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。而c十十中必须由程序员释放内存资源,增加了程序设计者的负担。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。JAVA里无用内存回收程序是以线程方式在后台运行的,利用空闲时间工作。
5.操作符重载
Java不支持操作符重载。操作符重载被认为是c十十的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。
6.预处理功能
Java不支持预处理功能。c/c十十在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)与c十十预处理器的功能类似。
7 Java不支持缺省函数参数,而c十十支持
在c中,代码组织在函数中,函数可以访问程序的全局变量。c十十增加了类,提供了类算法,该算法是与类相连的函数,c十十类方法与Java类方法十分相似,然而,由于c十十仍然支持c,所以不能阻止c十十开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。
Java没有函数,作为一个比c十十更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
8 字符串
c和c十十不支持字符串变量,在c和c十十程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(string和stringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
(2)J3阳字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
(3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
(4)可对字符串用“十”进行连接操作。
9“goto语句
“可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
l0.类型转换
在c和c十十中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c十十中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c十十中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
11异常
JAVA中的异常机制用于捕获例外事件,增强系统容错能力
try{//可能产生例外的代码
}catch(exceptionType name){
//处理
}
其中exceptionType表示异常类型。而C++则没有如此方便的机制。
附:
Java群体每天都在扩大,它既包括一些世界最大的ISV,也包括公司CIO、信息技术人员、系统分析人员、C/S开发人员、编程人员、多媒体设计者、市场行销人员、教育工作者、经理、影视生产者甚至业余爱好者等广泛的用户。从传统上看,这样一些人在一起有效地工作是不多见的。当我们谈到开放系统时,我们往往是就已发表的API及规格,或者源码的可得性,或者硬件、联网及操作系统而言的,没有一个人是从人的开放意义上来谈的。Java完成了开放系统的闭合链。它开发了人力资源,而反过来又开辟了共同工作的道路。
一谈到Java,人们马上会想起一种类似于C++的、适用于分布环境的面向对象编程语言,想到这种语言的简单、稳定、安全、与体系结构无关、可移植、可解释、高性能、多线程和动态性等特征。这些都是Java作为一种程序设计语言的主要特征。
Java是由Sun公司的一个技术小组研制出来的。在实现Java语言的过程中,Sun小组的技术人员很快就意识到:C++无法成为一种完全面向对象的、网络化的开发语言。C++是通过给原先的C语言增加面向对象功能而开发出来的,因此,它存在着先天不足。这主要体现在C++种类繁多,功能大量冗余,同时又没有任何一种C++编译器能够支持它的全部功能。鉴于这种情况,Sun公司的技术人员决定不扩充C++,而开发一种全新的计算机语言(Java的前身Oak)。但是,C++已经成了大多数编程人员所熟练掌握的语言,Java的设计显然不能无视这个现实。如果Java和C++之间的差别过大,那么程序员们在学会这种语言的过程中无疑要花费大量的时间和精力。因此,Java保留了尽可能多的C++风格。
Java自诞生起,为网络用户创造了无数客户端的小应用程序,由于这类应用程序效果良好、数量巨大,以至于许多用户想到Java编程语言时,会在脑海中出现一个不完全正确的印象-Java是用来编写小的客户端程序的。其实,随着技术的进步,Java语言正在逐步改变自己执行效率较低、无法担任企业关键计算任务的形象,不断向计算技术的核心地带前进。今天的Java技术正沿着网络渗入各个应用领域。
企业计算:企业计算是Java最重要的技术主题。Sun公司已经公布了企业JavaBean(EJB,Enterprise JavaBean)的规格,随后众多公司开始开发企业应用领域的Java技术。IBM公司也已经为Windows NT开发了IBM HPCJ(High Performance Compiler for Java)120版,同时研制了IBM JDK(JavaDevelopment Kit)for Windows NT,Novell公司也在宣布了一个新的服务器端的企业Java平台,而Sun公司也在积极地升级自己的JDK系统,这个形势表明,Java正在稳步走向企业高端计算。对于Java来说,与其它编程语言争夺企业计算主力编程工具的优势在于:其一,Java在进行面向对象的编程工作时,比其它的编程语言如C++更加简单,因此保证了编程的高效率,减少了编程投入;其二,Java虚拟机技术所提供的"一次编程,到处使用"的跨平台能力非常适合网络环境,这给Java在网络服务器端的发展提供了便利条件;其三,Java拥有强大的提供商和支持者队伍,该队伍包括IBM、Oracle、Novell、Sybase和Netscape等公司。
提速运行:许多企业的应用开发人员非常喜爱Java的语言特性,但是在开发重要系统时,语言特性和执行效率之间的抉择往往令人伤透脑筋。在关键计算中,用户可能并不在乎数据如何压缩或者运行的延迟关系如何设置,但是对程序的运行速度却非常重视,这使厂商将Java的编译策略开发放在了首位。现在的Java语言,其执行方式已经不仅仅是解释执行方式了,即时编译器(JITC、just-in-time compiler)技术和原型编译技术已经被许多厂家采用,包括Sun、IBM、Oracle以及Netscape等公司在内的技术提供商正在利用这些技术逐步提高Java的执行速度,其中IBM公司早已将Java虚拟机(JVM,JavaVirtual Machine)、操作系统和硬件的特性有机的结合在一起,非常有效地提高了Java的执行效率。
嵌入计算:嵌入式Java是一个潜力巨大的应用技术,该技术充分发挥了Java小巧灵活的特点。以HP公司为例,该公司以自己的方式制造编译工具和Java虚拟机,其目的是将Java嵌入各种设备,如打印机、医学监视器和自动提款机等。嵌入设备依靠一个实时操作系统来处理某一个实时生效的事件,Java被嵌入这些设备后,通过实时扩展(real-time extension)开始发挥作用,使设备具备了一定的智能性,增强了嵌入设备的可管理性和可用性,大大提高了设备的工作效率。各厂商对这一潜力巨大的市场都非常重视,目前该市场缺乏的是一个标准,如果存在标准的话,相信很快就会有大量使用嵌入Java技术的设备上市。
微软刚刚发行的Windows XP放弃了对Java的支持,但Java能够独立运行于很多操作平台上,其中也包括Linux,并且在某些特性上要比在Windows上发挥得更好,我们完全有理由抛弃Windows而选择使用Linux来做Java开发。现在,你可以左手拿着Linux,右手拿着Java,然后对面带微笑手里拿着Windows XP的Bill Gates说:"让你的XP去见鬼吧!"
对于软件开发者来讲,任何一种编程语言都不可能是完美的。如果希望更好地理解Java语言,最好的方法是把这种语言与其同类型的语言相比较。既然Java类似于C++,把它同C++进行一番比较也是顺理成章的事情,哪一个好,哪一个不好,每个开发人员都有各自的看法。我个人认为Java开发要比C++好一些。当然每个人的看法和喜好是不同的。后面的文章将向大家介绍Java和C++的不同和对其的改进。孰强孰弱,大家自然就会明白了。
我们知道,Java一开始采用C++的语法格式,基本上是为了让程序设计者可以很快地熟悉 Java的语法格式,缩短学习Java的时间,毕竟C和C++仍旧是最多人会的一种程序语言。但是如果我们仔细检查Java程序语言的许多细节设计,我们可以发现Java去掉了不少C++的特点,并且加入一些新的特性。这些与C++的差异包括:
1不再有#define、#include等预处理程序(Preprocessor)的功能
C++语言很重要的一个特点就是它的预处理程序。有些其他程序语言虽然也加入了#include的功能,但是还是欠缺处理宏(Macro)的能力。#define的功能在Java中我们可以用定义常数(constant)的方式来取代,而#include在Java中是不需要的,因为在Java中程序在执行时,会把类型数据记录在对象实体之中,我们不需要靠一些标头文件(header file)来知道我们使用的对象或数值是属于什么数据类型。
如果你使用C++语言时,只使用预处理程序的#include和#define功能的话,那么你大概不会觉得Java这样的设计对你产生什么样的困扰,但是如果你是使用C++语言预处理程序中宏功能的高手,你可能会觉得很不方便,进而怀疑Java如此设计的意义何在。
使用预处理程序虽然可以很方便地达到许多功能,但是站在软件工程的角度上看,对整个软件的维护其实是很不利的。由于C++语言中预处理程序的功能太过强大,厉害的程序设计高手常会自行开发一套只有自己看的懂的宏语言,一旦整个软件要交给其他人去维护,后继者很难在短时间内了解前一个人所写下的宏功能,增加软件开发时团队工作及日后维护的困难度。
另外一点则是C++语言的编译器所看到的程序代码,其实和程序设计者看到的程序代码是不同的。程序设计者看到的是尚未经过预处理程序处理过的程序代码,而编译器看到的则是预处理程序处理过的程序代码,一旦交给预处理程序处理的宏内容有误,编译器产生的错误信息将不会是程序设计师所预料的。而这一点自然也增加了程序在排错时的困难度。
预处理程序的存在也造成了阅读程序的不便。如果你想使用别人已经完成的C++语言程序,那么通常你不但要阅读他所写下的文件,还必须一并查阅上文件,才能了解其程序的全貌。如果换成是Java程序,只要查看java的程序文件就够了。
2不再有structure、union及typedef
事实上,早在C++中就可以去掉C语言中的structure和union等对复杂数据的自定结构类型,因为类(Class)的定义方式可以完全做到这项功能。而typedef也是不必要的,一切都用类就可以了。虽然C++这样的设计是为了和C语言兼容,但是使用多余的语言特点不但不必要,而且容易造成对程序认识的混淆。
3不再有函数
在Java程序语言中,去掉了程序向导语言中最重要的单元--函数(Function)。如果我们以对象向导的观念来看待函数,就可以了解函数在对象向导的概念中,是不必要的。在对象向导的程序观念里,对象的数据才是真正的主体,而处理对象数据的方法则必须依附在对象内才有意义。因此,去掉函数并不表示不再有子程序等模组化程 序的概念,相反地,是利用对象中的方法来取代函数,再一次强化对向导的发展策略。
4不再有多重继承(Multiplelnheritance)
在C++中,多重继承是一项很强的功能,但也是一般人难以掌控的部分。去掉多重继承虽然降低了Java语言的功能,但是也大幅简化撰写程序时的困难度。虽然移除了多重继承的功能,但是Java提供了interface的方式,可以达到部分多重继承的功用。所谓的interface基本上定义了一个类的对外沟通的方法原型,以及类内部的常 数,和多重继承不同之处在于interface并不会定义类方法的内容,以及类中的变量数据。
5不再有Goto
在程序语言的发展史上,Goto一直是毁誉参半的一项功能。在很多时候使用Goto可以大幅减少不必要的程序代码,但是也由于Goto可以很自由地改变程序的流程,如果冒然地使用,更可能造成程序结构混乱的情况。一般来说,正确使用Goto的例子多出现在循环内部,想要提早结束某一层循环。在C语言中,我们可以使用break 或contine来改变某一层循环的流程, 但如果想要改变两层以上的环执行流程,不是使用Goto就是以多余的布尔(boolean)变量,配合上一串if-then-else的判断来达成。
Java一方面移除了Goto的功能, 而另一方面同时扩大了break和continue的功能,可以允许多层循环的break或continue。如此一来不但避免了滥用Goto的可能性,同时也保存下Goto的好处。
6不再有OperatorOverloading
在C++中,Operator Overloading同样也是一项值得讨论的设计。几乎在所有C++的书中,都会引用一些例子,告诉你使用OperatorOverloading可以使你的程序看起来更为自然。如下面是一个程序设计师自定义的复数类:
//C++中自定义的复数类及0pemtor Overloading
class Complex{
public:
Complex(double real,double image){
Real_number=real;
Image_number=image;
}
Complex operator+(Complex&rhs){
Return Complex(rhs.real_number+real_number,
rhs.image_number+image_,nulnbef);
}
private:
doublereal_number //实部
doublejmage_nunmber; //虚部
}
在这里,如果你使用+来作为复数的加法符号,大家都不会有疑义,但是如果你使用的是或》这样的符号,那么别人看到你的程序之后,难保不会产生认识上的错误。这也是Operator Overloading一大问题,当大家都对运算符赋予自己的定义后,整个程序的可读性就会大受影响。Operator Overloading的存在并不是必要的,我们一样可以定义类中的方法来达到同样的目的,至于Java去掉这项功能的利弊,恐怕就要读者自己去评断了。
7取消自动类型转换
Java是一个严格进行类型检查的程序语言,对于下面这样的程序,在C++的编译器上编译时最多只会出现警告的信息,但是在Java里则不予通过:
Int aInteger; Double aDouble=271828; AInteger = aDouble;
虽然这样的转型在C++里是合法的,但是也会造成数据精确度的损失。Java为了要确定写程序的人充分地了解这点,必须要程序设计强制转型(type casting),Java的编译器才会接受:
int aInteger;
doublea Double=271828;
aInteger=(int)aDouble;
8不再有指针
取消指针(Pointer)这样数据类型,可能会让许多熟悉C++语言的程序设计师大吃一惊。在C++语言里,灵活地运用指针是许多程序设计师的得意之作,但是占整个除错时间最久的也是指针的问题。配合上C++对内存管理的态度,程序设计师必须要自己去追踪自己向系统要到的内存,最后确实地交还给系统,并且在使用指针时,要小心翼翼地注意不要跨过合法的记忆空间,造成Segmentation Fault或General Protection Fault之类的问题。
Java去掉了指针类型,并不表示程序设计师在开发高级数据结构,像堆栈(stack)、 队列(queue)、二元树(binarytree)时,都必须要像在传统Basic上,利用大范围的数组来自行模拟系统内存,自行建构类似指针的表示方式。
相反地,Java提供了和Lisp语言中相似的Reference类型,通过Reference去读取配置到的内存内容,可以确保不会去读取到不属于自己的内存空间,而另一方面,程序的执行系统也可以动态地去做内存垃圾回收的工作,将没有被reference参考到的内存空间回收给系统使用。
9和C++连接
不管Java是多么强大,总是有人需要把它和C++连接起来。因为只要有一个新的程序语言或是软件开发工具一出现,大家就会问:"它是否具有和原有程序库连接的能力呢"也因为C++语言在电脑界中占了很重要的地位。大家的问题其实就等于是直接问"它是否可以和C++连接"。目前在Java中,的确提供了和C++语言连接的方法,它的做法基本上是先将C++语言所写的程序建构成动态链接函数库(DynamicLinking Library,DLL),再由Java程序去调用DLL里的函数。
这种连接的方式,使得DLL中的函数,从Java的眼光看就是一个"方法"。不过因为这种方法是直接由其他的程序语言所提供,而不是以Java语言所写的,所以它被称之为"原生方法"(NativeMethod)。
由于Java Applet一些安全上的限制,所以这种连接外部程序的方法只能用在Java Application内。
小结:
事实上,constant和typedef这两条语句包含了#define语句的作用。现在,结构和联合已经被Java的类所代替。删除这些特性的原因是:由于其希望维持与C语言的向后兼容性,C ++的语言规范包含了大量冗余。比如,类实际上就已经包括了结构和联合的作用,因此这两种数据结构完全可以取消。关于#define语句,Java语言规范的制订者认为:尽管该语句的出发点是为了增强程序的可读性,但实际效果却恰恰相反,它常常导致难读的代码,故应该予以取消。Java不再支持独立函数,因此任何函数都必须封装到某个类中。由于人们普遍认为, C++所用的超类是非常不稳定的,因此Java抛弃了C++中的多继承并代之以接口。Java的接口指的是,在别的类看来一个类所能实现的方法。它所显示的只是一个类的方法或常量和变量 ,而不是这个类的全部结构。
最后,Java还取消了C++中的GOTO语句、操作符重载、自动类型转换及指针数据类型。 GOTO语句引起的争议已经有很多年了,可一直阴魂不散,这跟某些程序员对该语句一直情有独钟有关。C++仍然支持数据类型的自动转换,但Java要求编程人员显式实现数据类型之间的转换。自动数据类型转换使得两个数据类型互不兼容的变量可以相互赋值,而不需要给出显式说明。这有时会导致一些问题,其中最常见的是精确度损失。比方说,如果把一个带符号的32位整数赋给一个无符号整数,则所有的结果均为正数。Java的设计者们认为这很容易引起程序错误,从而决定不支持这种转换方式。
Java与C/C++的区别
Java是 纯 面向对象,C不是面向对象的,是 纯 面向过程(C++才面向对象,而且也不纯)。
如果你以前用过一些dos下的软件,你就知道用C写出来的都是什么东西了。
C的使用的数据大多数在栈里,可以使用指针灵活的操作栈里的数据,C最大的长处就是效率高,工控程序都是用C写的,但是缺点就是复杂,容易出错,所谓成也指针败也指针。还有,虽说C是一切语言的基础,不过现在需要C的岗位真的是太少了。不过做C的钱不会少的。
Java才是面向对象的,符合人的思路,好理解,易控制。由于Java多数数据都是在堆里的,所以效率较低。但是Java不太容易出错,其垃圾回收器更是解决了许多C程序员关于释放资源的苦恼。Java的跨平台的特性更是C所不能及的,所以很多服务器程序都是用Java写的。
首先应该清楚,Java是由C++发展而来的,它保留了c++的大部分内容,类似于c++,
但句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的
基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷,而产生的一种
新的完全面向对象的语言。
Java和c++的相似之处多于不同之处,但两种语言问几处主要的不同使得Java更容易
学习,并且编程环境更为简单。
因篇幅所限,这里不能完全列出不同之处,仅列出比较显著的区别:
1.指针
Java无指针,并且增添了自动的内存管理功能,从而有效地防
止了c/c++语言中指针操作失误,如指针悬空所造成的系统崩溃。
比w操作返回一对象的引用,类似于c++中的引用;在c++中,
new返回一个对象的指针。在Java中无指针,不会遇到下面这样的
语句:
Mywork>Mywork();
没有指针的程序无法访问不属于它的内存,消除了在c++
中些常见的错误,这有利于Java程序的安全。
2.多重继承
c++支持多重继承,这是c++的一个特征,它允许多父类派
生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻
烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个
类继承多个接口(界面),实现了c++多重继承的功能,又避免了c++的
许多缺陷。
3.数据类型及类
住Java‘fJ,使用了个能和整数湖蝴的布尔类型(bo01ean),它仪有二个值:true或false。
Java是完全面向对象的语言,所有函数和变量部必须是类的一部分。除了基本数据类型(如
控型初浮点型)之外,其余的都作为类对象,包括中和数组。对象将数据(Proper山s)和方法
(meth。d)结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++
允许将函数和变量定义为全局的。
此外,Java中取消了c/c++中的结构和联合,使编译程序更简捷。
4.自动内存管理
Java程序中所有的对象都是用new操作符建立在堆栈上,这个操作符类似于c++的
new操作符。下面的语句由一个类Readkcy建立了一个对象,然后调用该对象的work方
法:
配『ArraydLey my们rk;
mwork=new Readkey()
m!work.work()g
这个简单的代码片段突出了Ja调和c十十的一些主要差别,在c十十中,语句Read
key”ywork在堆栈结构上建立了一个Readkcy的实例。在JaM中不支持基于堆栈的对象,
所以这条语句建立了一个叫”ywork的变量,该变量中存有对象Readk。7的引用。
Javs自动进行无用内存回收操作,不需要程序员进行删除。而c十十中必须由程序贝释
放内存资源,增加了程序设计者的负扔。Java中当一个对象不被再用到时,无用内存回收器
将给它加上标签以示删除。无用内存回收器在后台运行,利用空闲时间工作。
5.操作符重载
Java不支持操作符重载。操作符重载被认为是c十十的突出特征,在Java中虽然类大
体上pJ以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作
符重载是为了保持Java语言尽可能简单。
6.预处理功能
Java允预处理器.因此不支持预处理功能。c/c十十在编译过程中都有一个预编泽阶
段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加丁编译的复杂性。JaM
没有预处理器,但它提供的引入语句(i”Port)与c十十预处理器的功能类似。
7 Java不支持缺省函数参数,而c十十支持。
在c中,代码组织在函数中,函数可以访问程序的全局变量。c十十增加了类,提供了类
算法,该算法是与类相连的函数,c十十类方法与Java类方法十分相似,然而,由于c十十仍
然支持c,所以不能阻止c十十开发人员使用函数,结果函数和方法混合使用使得程序比较
混乱。
Java没有函数,作为一个比c十十更纯的面向对象的语言,Java强迫开发人员把所有
例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
8 字符串
c和c十十不支持字符串变量,在c和c十十程序中使用Null终止符代表字符串的结
束,在Java中字符串是用类对象(strinR和stringBuffer)来实现的,这些类对象是Java语言
的核心,用类对象实现字符串有以下几个优点:
(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
(2)J3阳字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
(3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
(4)可对字符串用“十”进行连接操作。
Array“goto语句
“可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto
语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分
支技术。
鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使
用,使程序简洁易读。
l0.类型转换
在c和c十十中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例
如,在c十十中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c十十中的自动强
制类型转换,如果需要,必须由程序显式进行强制类型转换。
11其它
(1)break和continue后可加标号,以便跳出它标识的块。如:
inTlJ;
char a;
outing;
{for(i=:i<5;i十十)
for(j=0;j<3i j++)
{if((a=(char)systeminread())
break outing;
}}
2)析构函数为void finalize映(){}
Java并不保证一定调用该函数,因此不能依赖该函数来保证所写代码的正常运行。
(3)用packa8e将有关联的类组织在一起。例如,将自己编写的类组织成packaBe;
Packa8e mycla5se55
(4)用extaNs表示继承(派生)关系,如;
class ne订clas5一name extends oNclassname 47
(5)虚函数用ab列ra瓤修饰,而不用v加ual。
(6)提供丁一个创建完全虚类(界面)的方法;
Public interface intl『facenamEt//abstract mGthods)
利用界面可以为虚类定义协议,而不关心具体实施。一个类可以实现多个界面,同一个界面
也可以被多个类实现。实现界面使用imNemen贿,如:
public classname implmen比int6rfacena毗4)
(7)异常。用于捕获例外事件,增强系统容错能力
try{//可能产生例外的代码
}catch(exceptionType name){
//处理
其中exceptionType表示异常类型,如Arith
C++就是“带类的C”,最大区别就在于,C++是面向对象的,面C是面向过程的。定义一个类,也就是定义一类对象。可以用这个类去定义对象的实例。每类对象有自己的属性和方法,方法就像C中的函数的作用。只不过是针对某一特定的对象,而C中的函数可以在任何过程调用。
C是最古老的语言,至少有30年的历史了,一直到现在它仍然是运行效率最高的高级语言,随着面向对象思想的出现,与C兼容的C++出现了,并且和C一样,在各种觉平台上都有相应的编译器,之后,才出现了Java,它是一种纯面向对象的静态语言,语法与C类似,但抛弃了C++中令人诟病的复杂设计而大受欢迎。再后来,出现了C#语言,它是微软挂牛头卖狗肉的产品,打着C的名号抄袭Java,初衷是争夺Java的服务器端编程的市场,现在的ASPnet就是以C#为核心的一个开发体系。
总的来说C/C++在工业开发包括硬件驱动领域依然是龙头老大,C++也占据了桌面软件市场的主要份额,至于服务器端编程(也是就企业应用开发)Java的地位不可撼动
java是一种面向对象的编程语言。尽管Java语言使用了许多C语言描述,但由于技能系统规划着重于可移植性,安全性和可伸缩性,因此Java语言更适合Internet环境。这也是Java。互联网时代飞速发展的重要原因。 Java语言功能强大,可以在互联网时代,移动互联网时代和大数据时代找到自己的位置。
java好,没有错。不是语言的问题,是java的生态更好,开源的属性,框架多,资源多,容易找到学习的资源,碰到问题基本搜索即可搞定,工作也好找,应用范围广,大厂都用。实际上,c语言与Java相同年代的Python演讲在计划思想上与Java有很多相似之处,但是Python的演讲更加关注库的作用,其演讲风格更加开放和Java的语言依赖于此Sun的技能体系似乎相对“专心”,但是Sun的技能体系还具有基于Java结果的新开发形式。是必需的,但是EJB没有达到期望的结果。C偏向底层。java是应用层。 比如单片机 嵌入式这块C语言比较多。 而java更多应用在服务端,Android 这些领域
大一学校在上c,自己正在学javaweb,别的不说,就java的IDE就比古老的vc好看,而且c学了只能操作黑框框,java配合前端写个网页比较有趣,c用来练习数据结构题目不错本人自学一路过来两个都学了,java确实要好学点,但如果你要做单独运行系统,要学习前台,那又比c麻烦很多,不过学会了一种其他都特别快c语言市场需求没有JAVA大,大部分公司都是用JAVA来开发,c语言是以前JAVA出现之前的主流面向过程的编程语言,JAVA的面向对象语言基本上目前的主流了。
java和c哪个前景好
软件开发语言有多种,比如java、C++、Android、php等,在这其中,java和c哪个前景好呢对于这个问题也是众说纷纭,下面天通苑计算机学校就来看看大家的看法是什么样子的,希望对你的选择能有所帮助。
“java和c哪个前景好”观点大pk
观点A:
对个人来说,学好那个那个就前景大;对语言来说,程序员喜欢那个,那个前景就大;对企业来说,那个成本低那个前景就大这是相对的,不过我觉得简单易用、跨平台、函数式、分布式这些都具备的才是未来的语言。
观点B:
现在编程语言在全球的应用百分比是java先进,C第二,但都是百分之18点多,差不了多少,C#第三,百分之8点多,java比C稍微高一点点,我搞的java,俗话说360行,行行出状元,所以论前景,个人觉得没什么好说的。个人喜好,先去接触一下再决定吧。
观点C:
java简单些,两者较大的区别就是java里面封装了很多方法所以很多东西不用自己去写直接调用就行了,而c呢需要自己写方法和函数,在工作量上完成同一种工作java相对于c来说能快点。
观点D:
java和C的前景,本质上来说,其实是各自平台的前景。
很显然,C困守于windows平台,而java遍地开花。当然,有客官说了,不是有mono这个项目吗可惜的是,mono的冬冬,在我个人看来,短期内似乎还不具备什么竞争力,只是一个有趣的“玩意儿”。
所以,从上面的角度来看,哪个更有前景,是一目了然的。
观点E:
个人认为是java原因有2:
跨平台,java跨平台,net跨平台还需要第三方组件。
推动力:java是IBM,SUN等一批公司在推,但是NET,估计使劲的还是MICROSOFT。
综合以上观点,个人认为,还是java发展前景更好一些,现在市面上java培训机构也是相对较多,这也说明java的市场更大,就业机会更多。从天通苑北大青鸟java培训情况来看,毕业学员就业情况十分可观,应届生平均薪资在6500元以上,优质学员突破万元大关,就业前景十分火爆。
0条评论