从语法和C内存没释放两个方面简述C和Java数组的区别

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

字符型占2个字節,Unicode编码格式 字符型占1个字节,Assci编码格式
If , while,for 中进行真假判断时只能使用逻辑表达式不能用1和0数字来表示真假 可以用0和1来表示真假
如果你定义了囿参的构造函数,则当你调用无参的构造函数时必须自己定义无参的构造函数;
java 中数组是引用类型,只能在堆中创建
较长的整数后要加L隐含为long类型
安全性高:当高级类型转换为低级类型会报错!例;想要将double转换为float, float a=2.0f(F)
取余时:被除数和除数可以是实数;但所得余数的正负只囷被除数相同
C和C++ 中枚举类型enum是可以用0,1……来表示的
java不存在全局变量或者全局函数 C++可以定义全局变量和全局函数
java不支持运算符重载
java不支持默认函数参数 C++支持默认的函数参数
java中类继承如果父类方法要重写,不用加任何关键字
Java中super可以表示父类,this表示类本身
c和c++不支持字符串变量在c和c++程序中使用null终止符代表字符串的结束
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()函数進行重写

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

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

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

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

[2] 注:java引入泛型的概念,更好的处理类型的问题

java和c\C++的简单区别(string): C中没有String引用类型它是用字符數组表示,用‘\0’表字符结束;而C++和java中有String引用类型;


另外C++中的String对象可以用s[i]进行操作,而Java中则不可以需要转换为char[]才行;
[3] package(包)的名字是鼡点号建立的,并能用import关键字实现C++的“#include”的一部分功能例如下面这个语句:

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

  1. 最大的障礙在于速度:解释过的Java要比C的执行速度慢上约20倍。无论什么都不能阻止Java语言进行编译写作本书的时候,刚刚出现了一些准实时编译器咜们能显著加快速度。当然我们完全有理由认为会出现适用于更多流行平台的纯固有编译器,但假若没有那些编译器由于速度的限制,必须有些问题是Java不能解决的
  2. 所有东西都必须置入一个类。不存在全局函数或者全局数据如果想获得与全局函数等价的功能,可考虑將static方法和static数据置入一个类里注意没有象结构、枚举或者联合这一类的东西,一切只有“类”(Class)
  3. 尽管表面上类似,但与C++相比Java数组采鼡的是一个颇为不同的结构,并具有独特的行为有一个只读的length成员,通过它可知道数组有多大而且一旦超过数组边界,运行期检查会洎动丢弃一个异常所有数组都是在C内存没释放“堆”里创建的,我们可将一个数组分配给另一个(只是简单地复制数组句柄)数组标識符属于第一级对象,它的所有方法通常都适用于其他所有对象
  4. 对于所有不属于主类型的对象,都只能通过new命令创建和C++不同,Java没有相應的命令可以“在堆栈上”创建不属于主类型的对象所有主类型都只能在堆栈上创建,同时不使用new命令所有主要的类都有自己的“封裝(器)”类,所以能够通过new创建等价的、以C内存没释放“堆”为基础的对象(主类型数组是一个例外:它们可象C++那样通过集合初始化进荇分配或者使用new)。
  5. Java中不必进行提前声明若想在定义前使用一个类或方法,只需直接使用它即可——编译器会保证使用恰当的定义所以和在C++中不同,我们不会碰到任何涉及提前引用的问题
  6. Java没有预处理机。若想使用另一个库里的类只需使用import命令,并指定库名即可鈈存在类似于预处理机的宏。
  7. Java用包代替了命名空间由于将所有东西都置入一个类,而且由于采用了一种名为“封装”的机制它能针对類名进行类似于命名空间分解的操作,所以命名的问题不再进入我们的考虑之列数据包也会在单独一个库名下收集库的组件。我们只需簡单地“import”(导入)一个包剩下的工作会由编译器自动完成。
  8. 被定义成类成员的对象句柄会自动初始化成null对基本类数据成员的初始化茬Java里得到了可靠的保障。若不明确地进行初始化它们就会得到一个默认值(零或等价的值)。可对它们进行明确的初始化(显式初始化):要么在类内定义它们要么在构建器中定义。采用的语法比C++的语法更容易理解而且对于static和非static成员来说都是固定不变的。我们不必从外部定义static成员的存储方式这和C++是不同的。
  9. 在Java里没有象C和C++那样的指针。用new创建一个对象的时候会获得一个引用(本书一直将其称作“呴柄”)。例如:
      然而C++引用在创建时必须进行初始化,而且不可重定义到一个不同的位置但Java引用并不一定局限于创建时的位置。咜们可根据情况任意定义这便消除了对指针的部分需求。在C和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中出现C内存没释放漏洞的情况会少得多,但也并非完全不可能(若调用一个用于分配存储空间的固有方法垃圾收集器就不能对其进行跟踪监视)。然而C内存没释放漏洞和资源漏洞多是由于编写不当的finalize()造成的,或是由于在已分配的一个块尾释放一種资源造成的(“破坏器”在此时显得特别方便)垃圾收集器是在C++基础上的一种极大进步,使许多编程问题消弥于无形之中但对少数幾个垃圾收集器力有不逮的问题,它却是不大适合的但垃圾收集器的大量优点也使这一处缺点显得微不足道。
  18. Java内建了对多线程的支持利用一个特殊的Thread类,我们可通过继承创建一个新线程(放弃了run()方法)若将synchronized(同步)关键字作为方法的一个类型限制符使用,相互排斥现潒会在对象这一级发生在任何给定的时间,只有一个线程能使用一个对象的synchronized方法在另一方面,一个synchronized方法进入以后它首先会“锁定”對象,防止其他任何synchronized方法再使用那个对象只有退出了这个方法,才会将对象“解锁”在线程之间,我们仍然要负责实现更复杂的同步機制方法是创建自己的“监视器”类。递归的synchronized方法可以正常运作若线程的优先等级相同,则时间的“分片”不能得到保证
  19. 我们不是潒C++那样控制声明代码块,而是将访问限定符(publicprivate和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++不同,不存在明确的构建器初始化列表但编译器会强迫我们在构建器主体的开头进行全部的基础类初始化,而且不允许我们在主体的后面部汾进行这一工作通过组合运用自动初始化以及来自未初始化对象句柄的异常,成员的初始化可得到有效的保证
  1. Java中的继承不会改变基础類成员的保护级别。我们不能在Java中指定publicprivate或者protected继承,这一点与C++是相同的此外,在衍生类中的优先方法不能减少对基础类方法的访问例洳,假设一个成员在基础类中属于public而我们用另一个方法代替了它,那么用于替换的方法也必须属于public(编译器会自动检查)
  2. Java提供了一个interface關键字,它的作用是创建抽象基础类的一个等价物在其中填充抽象方法,且没有数据成员这样一来,对于仅仅设计成一个接口的东西以及对于用extends关键字在现有功能基础上的扩展,两者之间便产生了一个明显的差异不值得用abstract关键字产生一种类似的效果,因为我们不能創建属于那个类的一个对象一个abstract(抽象)类可包含抽象方法(尽管并不要求在它里面包含什么东西),但它也能包含用于具体实现的代碼因此,它被限制成一个单一的继承通过与接口联合使用,这一方案避免了对类似于C++虚拟基础类那样的一些机制的需要
      为创建鈳进行“例示”(即创建一个实例)的一个interface(接口)的版本,需使用implements关键字它的语法类似于继承的语法,如下所示:

 
  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++中一般都是把析构函数声明为虚函数。因为虚函数可以实现动态绑定也就是到底调用哪个函数是根据指针当前指向哪个对象来确定的,不是根据指针的类型来确定如果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   抽象类只能作為基类来使用其纯虚函数的实现由派生类给出。如果派生类中没有重新定义纯虚函数而只是继承基类的纯虚函数,则这个派生类仍然還是一个抽象类如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了它是一个可以建立对象的具体的类。
      抽潒类是不能定义对象的

具体机理是:Java数组是存在于堆里媔的 是需要new一个出来  而c++直接划分一个完整的数据块来做数组空间

Java在声明中制定长度是不合法的

这就是与对象的差别声明int[5]arr只是引用,而并不昰对象本身

  1、语法类似:由于Java可以算是從C++发展而来的因此Java与C语言的语法比较类似

  2、编程的熟练程度就是对语言程序库的掌握程度:
  从某种程度上来说,编程语言都是甴语法和相应的程序库所构成Java有自身的类库,C语言则有标准库所谓的编程,就是使用与语法来调用和组合程序库中的函数

  在Java中,基本不用考虑C内存没释放的问题如果想用一个对象,new一个就可以这个过程的背后则是JRE为对象分类的一定C内存没释放,当JRE发现你不再使用这个对象的时候他就会自动回收C内存没释放,也就是说你只管借东西不用管归还,因为与有人当你的跟班在你不使用的时候就紦东西归还了,不过这个过程还是有的只不过是JRE作的而已。  但是C则不同如果你想用,你可以用malloc之类的方法申请C内存没释放当你使用完了,因为没有跟班的你需要自己把这块C内存没释放归还回去,也就是调用free方法来完成这个任务由于需要显式的归还C内存没释放,因此当一个函数需要将一块C内存没释放返回给调用者的时候问题就比较复杂了,不如面向对象和具有C内存没释放回收功能的Java那么直观叻对于这个问题,在C语言中有几种解决方案:  (  1) 在调用者中先分配好C内存没释放,作为参数传入到被调用的函数中    (2) 在被调用的函数中分配使用完后在调用者中释放    (3) 在被调用函数中使用static变量,可以将该变量返回  2、面向对象  Java的面向对象的特点很明显而C则是一个地道的结构化语言。 Java中有一个字符串类String, 通过调用 String.length()就可以知道字符串的长度但是在C语言中,则需要调用函数strlen(str)来得箌字符串(字符数组)的长度由于C不是面向对象的语言,也就没有this的概念因此当使用一个与某个“东西”相关的函数时,就需要不厌其烦的将代表这个“东西”的变量作为参数传递进去  3、名称空间  Java通过包(package)来实现名称空间,在C语言中所有的函数都处于同┅名称空间,也就是没有名称空间因此就会很多程序提供的api接口函数都有一个前缀,例如MYSQL的mysql_init(),

4、在运行方式上 C:原始的C是的.就是按行执行. JAVA:绝對的面向对象.就像按模块执行. (补充:当然,在C++,及C#上,C也有向面向对象模式转换)

5、在语句结构上 C:在中国应该算是编程语言的颠峰应用.C就像个完全服從的军人.你让他做什么他就做什么.你完全控制他,但你必须全程了解他之后才能控制好他.

C里面特有指针,地址等.以及数组存储方式与JAVA不一样.

JAVA:人性化的.他把万物都可以看成一个基本的对象,然后再复制,改写他们. JAVA给认为有点像工厂,你在工厂里面先分别做好一个个小零件,然后再用电线把怹们连起来.组装成可用的东西.

6、用途上 C:纯C一般用在嵌入式上.编写最底层的程序.因为他的语言与硬件的连接最容易. C++:应用软件,WEB程序都可以. JAVA:,J2SM,.什么嘟可以

c 嵌入式底层软件 各类函数库引擎库软件核心代码 底层工具 c++ 图形图像 游戏服务端桌面软件各类高性能客户端软件近底层软件 java嵌入式移動设备 后台逻辑开发部分桌面程序 C,JAVA其实都可用在各种领域的.

语法不同: 单文件的编译时间java比C语言快; C语言可以直接操作C内存没释放java不能矗接操作; C语言可以封装动态库,java不行; C语言的代码不容易跨平台java的代码容易跨平台; C语言有指针,java没有指针; C语言可以直接操作串口java需要第三方jar包支持; C语言的线程更加灵活,java的线程都已经封装好了; C语言做单独功能可以增加效率,java适用做web应用开发; unix是C语言编写的java也是C语言编写的; JAVA做web开发的时候,已经有很多成型的框架技术C语言很少,且需要处理底层内容对应不熟悉计算机原理的开发者难度佷大; JAVA的开源包太多了,C语言也有但是偏少而且面向某个业务应用领域的框架没java多;
JAVA和C还有一个最大的区别,那就是跨平台

 通过JAVA虚拟機的解析,可以使在Windows或UNIX上面写的程序在其他系统下也能运行而C语言是绝对不行的。但是C语言在和硬件打交道的时候速度是最快的。C比較基础java比较流行。但是2者没有上下之分一个是编程语言的鼻祖,一个是目前流行的跨平台语言.擅长的领域不同在不同的场合用不同嘚语言。但是如何运用好这门语言,也就是对程序员的一个考验鱼和熊掌的问题,取舍最终还是只能看你自己

C、C++、C#其实也是三种不哃的语言

C++是C的增强版,增加了一些新的特性如 C#跟 完全不同,是微软开发的语言用于,

只是语法有点像  要说区别首先就得说联系, C是爺爷C++是爸爸, C#是c的外孙。这形象说明了三者的关系

从时间先后上说,他们之间最早出现的是C,然后是c++最后是c#。c++是为了解决软件危机而引叺

c#为了实现平台统一和java争夺市场下的产物。

目前软件开发有两种主流的开发方法(对应的语言):

一、 Java封装了很多类和接口而这些是C語言没有的。其实为了提高开发效率java就应运而生了,这些功能在C语言也可以实现但是要自己写更多的代码。但也因此同样的程序用java寫的一般跑得比C语言 的慢很多。

二、 C语言是面向过程的语言而Java是面向对象的语言。Java相对于c语言而言去掉了指针等容易出错的功能。在Java語言白皮书中Java被描述为“是一种简单、面向对象、分布式、解释、健壮、安全、结构中立、可移植、高效能、多线程、动态的语言

三、 C語言单机代应用非广泛融合高级语言简单易用汇编语言执行效率Java研究电消费产品发平台互联网应用基础实现许的语言特性c语言沿用发展并苴使面向象更加自完善(安全性代码移性)。

四、 Java的程序是由一个一个类组成的一个Java应用程序至少包含一个类,极端的一个类可以是一个涳类,不包含任何属性定义和方法声明

六、 Java跨平台,既不同的操作系统都可以通过JVM()来解释Java程序而则是与平台相关的,有些指令只茬某些操作系统中才能执行Java是,所有代码都会成统一的、与系统无关的bytecode然后放到上运行;而C是编译式语言,代码要先通过编译器转换荿与系统相关的中间代码然后才能运行。

七、 Public表示该类可被其它的类访问class表示Java的一个类,static表示main()方法是一个可以直接使用的方法void表明main()方法执行它所包含的语句后不返回给调用者任何信息。这一点是重要的因为Java编程语言要进行谨慎的类型检查,包括检查的调用方法确实返回了这些方法所声明的返回值类型String[]是一个string数组的声明,用来接受外界传递给main()方法的参数

八、 Java程序多用于网络。C语言的安全性不如JavaC語言没有Java的垃圾回收机制,申请的空间要手动释放Java的通用性好,可以跨平台直接移植只要有安装Java虚拟机(JVM)就可以了。在速度上C语訁编写的程序要优于Java,因为Java必须运行在虚拟机的环境中但是因为虚拟机,Java获得的平台无关性而C语言的程序有可能需要重新修改编译才能实现平台的移植,另一方面C语言比Java语言更“底层”,因此可以用C编写例如硬件的驱动而Java却不行。

九、 Java的命名规则是标识符可从一个芓母、下划线(—)或美元符号($)开始随后可跟除了在Java中作为运算符之外的任何可见字符。标识符是连续的字符串不能被制表符和涳格隔开。标识符不可能是关键字但是它可包含一个关键字作为它的名字的一部分。Java语言严格区分标识符的大小写未规定最大长度。

┿、 基本Java类型有八种分别为逻辑型、字符型、字节型、短整型、整型、长整型、单精度、双精度。

十一、 Scanner是一个类通过调用扫描对象嘚方法实现输入。Println()方法ln表示换行。

我要回帖

更多关于 C内存没释放 的文章

 

随机推荐