Java和C/C++到底有什么关系?它们有什么区别?

494人浏览 / 0人评论

C语言可以作为面向过程语言的一种代表,算是一种比较纯正的面向过程语言了。而面向过程的语言也称为结构化程序设计语言,是高级语言的一种。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数则用于完成这些任务,解决问题的焦点集中于函数。所以说C语言的基本单位也是函数。

其概念最早由 E.W.Dijikstra 在 1965 年提出,它的主要观点是采用自顶向下、逐步求精的程序设计方法,使用三种基本控制结构构造程序,即任何程序都可由顺序、选择(if-else,switch-default)、循环(for,while,do-while)三种基本控制结构构造。

像C语言这种的面向过程语言的最大的优势就是适合模块化设计。一个程序可以分解为多个函数,通过函数调用过程,使得可以用一条函数调用语句实现函数所完成的复杂运算过程。这种方法使得可以将一个复杂问题的解决过程分解为较为简单的几个子问题的解决过程。

首先通过编写函数用语句描述解决每一个子问题的解决过程的步骤,然后可以用一条函数凋用语句描述解决某个予问题的过程的步骤,最后在一个主程序中用多条函数调用语句描述解决分解为多个子问题的复杂问题的解决过程的步骤。

但是当我们在做研发系统诸如此类的问题时,开始肯定不清楚这个系统完工后的架构是怎么样的,所以说,利用模块化设计的语言,就很难对开发出来的系统进行调整(或者工作量会很大)。在此类诸多问题的压力下,面向对象语言便体现出了其独一无二的优势。

面向对象语言,OOP(Object-Oriented Programming),是一类以对象作为基本程序结构单位的程序设计语言。Java 便就是面向对象编程中的的一种代表性语言。
 

C 语言 19 世纪 70 年代初问世,1978 年美国电话电报公司(AT&T)贝尔实验室正式发布C语言。
C++ 在 C 基础上,1983 年贝尔实验室推出了 C++。
Java 由 Sun 公司于 1995 年 5 月推出。


其实最早,C++ 相对于C语言的基础上就添加了面向对象和模块的思想,这也可以理解成 C++ 中两个加号的来历。

然而,C++ 在面向对象上做的并不是太好,比如说 C++ 支持多继承,多继承会引发不确定性。C++ 同时支持指针,指针直接对内存底层操作,虽然效率高,危险系数却非常高,比如,一个简单的病毒程序就可以靠指针完成:你通过一个程序的中给指针随机赋值,能够获取到访问不属于本程序执行空间的其他空间的权限,那么这也就是一个计算机病毒。

当然,真正的病毒不可能那么简单,但这是基本特性,所以 Java 在 C++ 的基础上移除了指针,增加了引用,提高了安全性。

Java 是由 C++发展而来的,保留了 C++ 的大部分内容,其编程方式类似于 C++。但 Java 的句法更清晰、规模更小、更易学。Sun 公司曾对多种程序设计语言进行分析研究,取其精华去其糟粕,最终推出了 Java。Java 从根本上解决了 C++ 的固有缺陷,形成了新一代面向对象的程序设计语言。

Java 和 C/C++ 的相似之处多于不同之处,有 C 基础的读者,学习 Java 会更容易。相较而言,Java 的编程环境更为简单。

在 C++ 中,假如你写同样一个程序,在 Java 里面会报错,而在 C++ 语言里面是不会报错的。为什么?因为 C/C++ 语言设计的思想是:你想怎么写程序就怎么写,只要你的这种写法错得不是很离谱,就认为你这么写有特殊的含义,可以通过。但 Java 不行:只要你这么写有歧义,或者说这样写不太好,那么它都会报错。

比如 C++ 中你可以将一个浮点型数据赋给一个整型变量,编译时只会警告,因为会丢失精度,但是在 Java 中这样写就会报错,它在语法上就禁止你这样写。这就是不同的语言对同样一个问题有不同的理解和处理方式。

由于 C++ 中大大小小的问题会导致不安全性,所以就在 C++ 的基础上,取其精华,去其糟粕,便形成了早期的 Java 语言。直到现在,Java 又多了很多新的特性,比如说集合,反射,泛型,Lambda 表达式等等。所以,正因为 C -> C++ -> Java 的发展历史,所以导致了 Java 在一定程度上继承了多数C语言的语法,但又有一定的改变。

以下是我们整理的 Java 和 C/C++ 的 10 条不同之处。

  1. C++ 支持指针,而 Java 没有指针的概念。
  2. C++ 支持多继承,而 Java 不支持多重继承,但允许一个类实现多个接口。
  3. Java 是完全面向对象的语言,并且还取消了 C/C++ 中的结构和联合,使编译程序更加简洁
  4. Java 自动进行无用内存回收操作,不再需要程序员进行手动删除,而 C++ 中必须由程序释放内存资源,这就增加了程序员的负担。
  5. Java 不支持操作符重载,操作符重载则被认为是 C++ 的突出特征。
  6. Java 允许预处理,但不支持预处理器功能,所以为了实现预处理,它提供了引入语句(import),但它与 C++ 预处理器的功能类似。
  7. Java 不支持缺省参数函数,而 C++ 支持 。
  8. C 和 C++ 不支持字符串变量,在 C 和 C++ 程序中使用“Null”终止符代表字符串的结束。在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的
  9. goto 语句是 C 和 C++ 的“遗物”,Java 不提供 goto 语句,虽然 Java 指定 goto 作为关键字,但不支持它的使用,这使程序更简洁易读。
  10. Java 不支持 C++ 中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
  11. 1.  数据类型:

    共同点:数据类型决定了内存中存储数据的类型及所需内存的大小。

    都满足自动类型转换和强制类型转换。

    都通过定义变量来申请数据存储空间,并通过变量名获取或改变存储的值。

    常量是值不可变的变量,即不能重新赋值。

     

    不同点:

    Java:Java的数据类型可分为两大类:

    -基本数据类型:byte、short、int、long、double、float、boolean、char

    -引用数据类型:类、接口、数组、枚举、注解

          变量与常量:

    -常量有final关键字修饰。

          基本数据类型引用:

    -定义float类型时,赋值时一定要在浮点数后加f,否则自动视为double类型,且会编译失败。

    -Java中当高精度赋值给低精度类型时,会编译失败,显示不兼容的类型。

    -Java中字符型中字符对应的Unicode编码。

    -Java字符型占两个字节。

     

    C语言:C语言的数据类型可分为:

    -基本数据类型:short int、int、long int、double、float、char、long longint(C99增加)、long double、bool(C99增加)、float_complex、double_complex、long long _complex

    -枚举类型:enum

    -空类型:void

    -派生类型:指针类型(*)、数组类型([])、结构体类型(struct)、共用体类型(union)、函数类型

            变量与常量:

    -常量由#define定义。

            基本数据类型引用:

    -C语言中定义浮点型不会出现类似问题。

    -C语言中当高精度赋值给低精度类型时,会有精度缺失,但并不会造成编译失败。

    -C语言中字符型中字符对应ASCII码。

    -C语言中字符型占一个字节。

     

    2. 计算机内的储存原理:

    共同点:补码是计算机用于规范计算的一种二进制表示方式,由于计算机使用数值的第一位来表示数据的正负,例如:00000011表示+3,而10000011表示-3,这些非0数值在逻辑上的表示都是没有问题的,这中表示方法称为源码表示法。但是用00000000表示+0,而10000000表示-0,则出现逻辑上的偏差,即:+0 不等于 -0。为了解决这个问题,提出了补码表示法。

    •          补码的计算公式:

          正数:源码、反码和补码都相同。

          负数:补码 = 反码(符号位保持不变)+ 1

    •          注意:

          负数在计算补码的时候,在源码取反的过程中要保留符号位不变,其他位取反,例如:10001010取反11110101(第一个1不变)。

     

    不同点:

    Java:先将编码转换为字节码文件,再通过JVM虚拟机转换为二进制码,再储存到计算机中,由计算机输出内容。

    C语言:直接将编码转换为二进制码,由计算机识别输出。

     

    3. 标识符:

    共同点:各种数据类型的定义都需要标识符。

    标识符标准的比较:

    Java:Java标识符有如下命名规则:

             1、标识符由字母、数字、 “_”、 “$”组成,且首字母不能是数字;

             2、不能把Java关键字作为标识符;

             3、标识符没有长度限制;

             4、标识符对大小写敏感。

             5、自定义标识符最好取具有一定意义的字符串,便于记忆和理解。

     

      C语言:C语言标识符有如下规则:

                 1、标识符必须以字母a~z、 A~Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中。
                   2、标识符区分大小写字母
                   3、标识符的长度,c89规定31个字符以内,c99规定63个字符以内
                   4、C语言中的关键字,有特殊意义,不能作为标识符
                   5、自定义标识符最好取具有一定意义的字符串,便于记忆和理解。

     

    4. 运算符:

    两者运算符基本相同,如下:

         算术运算符:+、-、*、/、%、++、- -

         赋值运算符:=、+=、-=、*=、/=等等

         位运算符:~、&、|、^

         逻辑运算符:!、&&、||

         关系运算符:>、<、>=、<=、= = 、!=

         移位运算符>>、<<、>>>(无符号右移)

    运算符优先级:

    •          运算符的优先级从高到低的顺序进行,优先级相同的运算符按照事先约定的结合方向进行,运算符优先级如下:

                                                

      以上就是一些关于JAVA和C语言的比较,只是一些在基础语法上的比较,其实无论是JAVA还是C语言,都是很接近人的语言的,使用者应当选择合适自己,合适环境的语言,并且要学会抽象,学会注意细节,再加以理论上的理解和实际的一些操作便可以很好地运用了。
    ————————————————
    版权声明:本文为CSDN博主「wzx15927662183」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wzx15927662183/article/details/79832454

全部评论