Java中数组与C语言中数组的比较_李舒亮 (1)
Java语言与C语言的差异总结

Java语言与C语言的差异总结Java的设计者曾说过,设计这门语言的灵感主要来自于C++。
世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史。
所以在Java语言学习过程中,将其与C++语言对比是一件有意义的事情。
通过这些对比,我们能够了解到Java语言相对于C++语言有哪些改进,能带给我们哪些进步,这样对于更加深入理解这两种语言是大有裨益的。
下面我总结一下Java语言与C++语言的各种差异。
1、Java用来操纵对象的引用可以先初始化再指向对象,而C++的引用必须在初始化时就指向对象。
2、Java类除static和final外其他函数定义默认是虚函数,而C++用virtual关键字定义定义函数才是虚函数。
3、Java有一套继承自object类型的单根继承结构,而C++没有标准库内置的类继承体系。
4、Java只能通过new在堆上创建对象,基本类型除外,而C++除了new还是可以创建全局对象或者栈对象。
5、Java有自带垃圾回收机制,不用关心对象的内存释放,而C++需要手动释放通过new创建的对象。
6、Java数组成员能初始化默认值null,提供未初始化的访问和越界访问保护,而C++不提供这个机制。
7、Java局部作用域定义的变量不能隐藏更大作用域定义的变量,而C++可以隐藏。
8、Java类的基本类型成员变量可以自动初始化为默认值,类的复杂类型成员变量或者函数的基本类型成员变量如果没有初始化会报编译错误,而C++不提供这个机制。
9、Java属于纯面对对象语言,函数只能定义在类里,而C++可以将函数定义在类外。
10、Java函数调用时入参传递,对象类型参数只能传引用不能传值,基本类型参数可以传值,而C++可以使用对象传值方式。
11、Java用带反转域名的类库命名方式来解决名字污染问题,而C++使用名字空间来解决。
12、Java类所有成员函数实现和变量初始化都要写在类定义里,而C++类成员函数在类定义里申明,在类外实现,成员变量可以在类定义里初始化。
Java和C语言的对比

C语言和java的对比学习前言这里说写的都是我的学习笔记,然后这里的是很简单的对比学习,全部都是自己所理解的东西,而且都是很基础的,很简明的辅助自己理解学习而已。
C语言不会涉及到指针以及比指针更难更深层次的内容;Java也不会涉及到面向对象以及比面向对象更深层次更难的内容。
2015年12月20日运行机制C语言:源代码>编译>汇编>机器码>可运行程序Java源代码(*.java)>编译>字节码(*.class)>解释>程序运行相当于:把”鱼(源代码)”买回来>用”刀(编译器)”宰鱼>处理好的”鱼(字节码)”>用锅(JVM,解释/运行环境:java虚拟机)把鱼煮熟>可以吃的鱼(可运行程序) PS:Java程序分为两种类型,一种是Application程序,也就是一般的桌面程序.还有一种就是Applet程序,主要是应用(嵌入)到网页编程上的.开发环境搭建(简单入门)C语言VC++ 6.0(直接安装直接用)JavaEclipse EE1.下载安装JDK(Java 开发工具包 = java development kit)2.下载eclipse(Mars, J2SE = java 2 standard edition 标准版,J2EE=企业版,下载是下载EE版本的,EE版本可以做网页程序)3.配置环境变量JAVA_HOME: C:\Program Files\Java\jdk1.8.0_45CLASSPATH: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar或者CLASSPATH: %JAVA_HOME%\lib\rt.jar;.;PATH: %JAVA_HOME%\bin第一个程序C语言Java1.新建一个项目2.新建一个类3.运行Helloworld程序(程序主体)C语言#include<stdio.h> //头文件int main() //定义主函数(程序的入口){int a=1; //定义一个值为1的整型变量printf(“HelloWorld”); //输出语句printf(“%d”,a);return 0; //函数返回值}Java语言public class HelloWorld{ //定义HelloWorld 类public static void main(String[] args) { //主方法定义在HelloWorld类int a=1; //定义一个值为1的整型变量System.out.println(“HelloWorld”);//输出语句System.out.println(a);}}数据类型C语言Java输出语句C语言printf(“要输出的内容\n=转义字符格式声明:%d=百分号+格式字符这里字符的都只是例子双引号是格式控制,后面的a是输出表列说明那个%d就是a的值”,a); //为了避免出错那个格式声明读的时候还是读百分号d这样好一点例如:a=1;printf(“a的值是%d”,a);那么输出的就是a的值是1JavaSystem.out.print ln(“这里是字符串,外面是用符号链接的数据(变量)名”+a+”这里可以连接多个字符串,在外面还可以输入表达式,不一定是变量名称”+((float)10/3));System.out.println("a["+i+"] = "+(i+i));在这句话里加号用于拼接字符串以及求和之用。
java编程基础相关知识点与c语言的区别

java编程基础相关知识点与c语言的区别Java和C语言是两种常见的编程语言,它们之间有许多相似之处,也有一些明显的区别。
本文将从以下几个方面介绍Java编程基础相关知识点与C语言的区别。
一、语法差异1. 数据类型:Java和C语言都支持基本数据类型,如整型、浮点型、字符型等。
但Java还引入了一些特殊的数据类型,如字符串和布尔型,在C语言中需要使用字符数组和整型变量来代替。
2. 变量声明:在C语言中,变量可以在任意位置声明,而在Java 中,变量必须在方法、类或代码块内部声明。
3. 指针:C语言中可以使用指针来处理内存地址,而Java中不支持指针操作,它通过引用来实现对象的访问和操作。
二、面向对象差异1. 类和对象:Java是一种面向对象的语言,所有的代码都必须写在类中。
而C语言是一种过程式的语言,代码可以直接写在函数中。
2. 继承:Java支持单继承和多态,类可以通过extends关键字继承其他类。
C语言不支持继承。
3. 接口:Java中有接口的概念,一个类可以实现多个接口。
C语言没有接口的概念,但可以通过结构体和函数指针实现类似的功能。
三、内存管理差异1. 垃圾回收:Java使用垃圾回收机制来管理内存,程序员不需要手动释放内存。
而C语言需要程序员手动分配和释放内存,否则容易出现内存泄漏或越界访问的问题。
2. 数组边界检查:Java对数组进行了边界检查,可以避免越界访问。
而C语言没有边界检查,需要程序员自行控制。
四、异常处理差异1. 异常处理机制:Java提供了异常处理机制,程序可以捕获和处理异常,保证程序的稳定性。
而C语言没有内置的异常处理机制,程序员需要使用错误码或其他方式来处理异常情况。
五、跨平台性差异1. 编译方式:C语言是一种编译型语言,源代码需要通过编译器生成可执行文件。
而Java是一种解释型语言,源代码通过Java虚拟机(JVM)解释执行。
2. 跨平台性:由于Java的解释执行方式,Java程序可以在不同的操作系统上运行。
C语言与Java的异同比较

C语言与Java的异同比较C语言和Java都是广泛应用于计算机编程领域的高级编程语言,它们都有各自的特点和优势。
本文将对C语言和Java进行异同比较,以便更好地理解它们的差异和共同之处。
一、语法差异C语言和Java在语法方面存在一些差异。
首先,C语言是一种过程式语言,而Java是一种面向对象的语言。
因此,C语言更加注重过程和函数的设计,而Java更加注重类和对象的概念。
其次,C语言的语法相对较为自由,允许直接操作内存,而Java则通过垃圾回收机制和虚拟机来管理内存。
此外,C语言对指针的使用较为灵活,而Java将指针的使用限制在了较低的层面上。
二、跨平台特性Java是一种跨平台的编程语言,这是它的一个独特优势。
Java编写的代码可以在不同的操作系统上运行,只需在相应平台上安装Java虚拟机(JVM)。
而C语言编写的程序需要根据不同的操作系统进行编译和适配,无法直接在其他平台上运行。
这也是Java在企业级应用中得到广泛应用的原因之一。
三、性能比较由于C语言更加底层,直接操作内存,因此在性能方面往往具有优势。
而Java编程是在虚拟机上运行的,需要额外的解释和执行过程,相对而言性能稍低。
但是,随着硬件的不断升级和Java技术的发展,这种差距逐渐减小,大部分情况下两者的性能差异并不明显。
四、开发效率相对而言,Java在开发效率方面更高。
Java具有丰富的类库和工具支持,提供了自动内存管理和垃圾回收机制,从而减少了程序员的工作量。
Java还有成熟的开发框架和IDE工具,简化了程序的开发和调试过程。
相比之下,C语言需要程序员自己管理内存,代码的编写和调试过程相对较为复杂。
五、应用领域C语言和Java在应用领域上有所差异。
C语言在嵌入式开发、操作系统、游戏开发等方面具有广泛应用,尤其是对于对性能要求较高的场景。
而Java在企业级应用、服务器端开发、大数据处理等方面具有更强的优势。
Java具备良好的可维护性和扩展性,适合构建大型复杂系统。
Java中的数组和C语言中的数组有何异同?

Java中的数组和C语言中的数组有何异同?
楼主:好象听说是有些不一样,请高手指教。
2 楼:有一些不一样。
对于原语类型的数组,如int[] a,在C里面只要这样定义之后就可以用a[i]使用了,但是在JAVA里面是不行的,必须用int[] a = new int[LENGTH];来为数组分配空间。
这里的a更应该看成C里面的指针,它和C里面的int* a是一样的,因为这个a(C 里面的)也要先malloc一个空间之后才可以用。
对于对象数组,则要“两次分配”,如:
Object[] obj = new Object[2];
obj[0] = new Object();
obj[1] = new Object();
因为数组首先是一个句柄,而这个句柄指向的2个空间里面又是存储着两个指向Object类型的句柄。
而C里面不完全相同:
struct Object{};
struct Object* obj = (struct Object *)malloc(2 * siz eof(struct Object));
其实他们的原理大至是相同的。
只不过JAVA里数组的内存分配是在堆里面的,必须用new 来分配,而C里面是在栈里面分配的,定义的时候会自动分配。
在《Thinking in JAVA》中有更详细的介绍。
C语言对比Java介绍

C语言对比Java介绍
欢迎大家在这里学习C语言对比Java这里是我们给大家整理出来的精彩内容。
我相信,这些问题也肯定是很多朋友在关心的,所以我就给大家谈谈这个!作为一名C程序员,我们早已掌握了面向对象程序设计的基本概念,而且Java的语法无疑是非常熟悉的。
事实上,Java本来就是从C衍生出来的。
”
然而,C和Java之间仍存在一些显着的差异。
可以这样说,这些差异代表着技术的极大进步。
一旦我们弄清楚了这些差异,就会理解为什幺说Java是一种优秀的程序设计语言。
本附录将引导大家认识用于区分Java和C的一些重要特征。
最大的障碍在于速度:解释过的Java要比C的执行速度慢上约20倍。
无论什幺都不能阻止Java语言进行编译。
写作本书的时候,刚刚出现了一些准实时编译器,它们能显着加快速度。
当然,我们完全有理由认为会出现适用于流行平台的纯固有编译器,但假若没有那些编译器,由于速度的限制,必须有些问题是Java不能解决的。
和C一样,Java也提供了两种类型的注释。
所有东西都必须置入一个类。
不存在全局函数或者全局数据。
如果想获得与全局函数等价的功能,可考虑将static方法和static数据置入一个类里。
注意没有象结构、枚举或者联合这一类的东西,一切只有类”(Class)!。
Java中数组与C语言中数组的比较

3数 组操作 的不 同
b 1n h =3 .e g t
数组元 素 同普通 变 量 一 样 , 以进 行 各种 操 作 , 0 1 2 可 如被赋值 、 被打印 、 参加表达式计算等。在 J V A A中 数 组在 复制 操作 之前 在 内存 中表 现形式 为 : 数组 的复制 操作 和 C语 言有 很大 不 同 例 如 :
1n t 别 。与 C、 C+ +中不 同 ,aa对 数 组 元 素 要 进 行 越 b.e gh=5 Jv
0 0 0 界 检查 以确 保 安 全 性 。 同时 , 于 每 个 数 组 都 有 一 0 1 2 3 对 个 属性 l gh指 明它 的长 度 。 e t n 数组 复制 之后 : 4 0
由上图可以看 出, 数组名有 一个单独 的内存 空 间, 存放数组对象 的引用地址。这与 c语言是不 同 Jv aa中的定 义 格式 为 : p a aN m [ ;或 的。 t e ry ae ] y r
收 稿 日期 :0 6— 4— 8 20 0 0
作者简 介: 李舒亮 (9 8一) 女 , 16 , 江西分宜人 , 副教授 , 主要从事软件及 多媒体方面的研究。
声 明一个 整 型 数 组 , 组 名 表 示 一 个 引 用 地 址 数 变量 , C不 同 ,aa在 数组 的定 义 中并 不 为数 组元 与 Jv
素分配内存 , 因此[ 中不用指出数组中元素个数 , ] 即 数组长度 , 而且对 于如上定 义的一个数组是不能 访 问它的任何元素的。我们必须用 nw运算符为它分 e 配内存空间 , 其格式如下 : a aN m r y a e=nw ye a aS e ; r e t [r yi ] p r z 其 中 aryi raSz 明数组 的长 度 。如 : a = nw e指 e it5 ; nV ] 为一个整型数组分 配 5个 i 型整数所 占据 的 n t 内存空间 , 这两部分可以合在一起 , 格式如下 : t ea aN m = nwt e[ r yi ] 例如 : y r y a e p r e p a aSz , y r e i =nwi [ ] n a e t5 ; t n 它在 内存 中的表现形式为:
C语言C语言Java语言有什么区别

C语言C语言J a v a语言有什么区别SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#C语言,C++语言,Java语言有什么区别C不只能考级!!UNIX,WINDOWS漏洞,单片机。
很多地方都用到了C!!C语言是高级语言的基础,学习计算机语言可以先学C,但如果以后不用C直接学C++也行,但入门稍微困难点。
C是面向过程编程的,这样往往会导致所谓的单一程序,既所有的功能只能包含在几个(通常是一个)代码模块中。
而C++是编程(OOP)的,他杜绝了C面向过程的缺陷.OOP常常要使用许多代码模块,每个模块都有特定的功能,而且是孤立的。
OOP提供了非常强大的多样性,大大增强了代码的重用机会!C语言有一个突出的优点就是适合于多种,如DOS、UNIX,也适用于多种机型。
当然,C语言也有自身的不足,比如:C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数族下标越界不作检查等。
从应用的角度,C语言比其他高级语言较难掌握。
总之,C语言既有高级语言的特点,又具有的特点;既是一个成功的系统设计语言,有时一个使用的;既能用来编写不依赖的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的。
C++:的语言.是一门独立的语言;他并不依赖C语言.是编程语言中最复杂的一门.而VC是用微软C++编译器编译的语言,与标准c++有一些细微的不同.Java程序中的每个变量要么是基本数据类型(boolean,char,byte,short,int,long,float,double),要么是对对象的引用C++有许多种基本类型,额外还有struct,union,enum,数组和指针,C++指针可以指向对象,也可以不指向对象Java没有枚举、联合类型,因为Java认为没有必要。
将可有可无的语言元素去掉是Java对做出的一大改变,因此,普遍认为Java较C++更轻便,更精简Java采用Unicode字符集,C++通常用ASCII字符集。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
社 , 2004.
(责任编校 :任 华 )
C ompar ison of array in Java and array in C language
L I Shu - liang
(X inyu C ollege, X inyu 338000, china) Ab stract:The au thor distingu ishes the array in Java and tha t in C languag e and acco rding to the ir fo rm in core sto re, finds ou t the fundam en ta l cause s fo r differences. K ey w ords:a rray;object; refe rence variable;diffe rence; Java;C language
个属性 leng th指明它的长度 。
3 数组操作的不同
数组元素同普通变量一样 , 可以进行各种操作 ,
如被赋值 、被打印 、参加表达式计算等 。 在 JAVA 中
数组的复制操作和 C 语言有很大不同 。 例如 :
public classA rrayC
{
public static void m ain(S tring[ ] args)
{
in t a[ ] , b[ ] , i, j;
a =new in t[ 3] ;
b =new int [ 5] ;
System. ou.t p rintln ( "a. length =" + a.
leng th);
fo r(i =0;i <a. leng th;i ++)
{
a[ i] =i;
System. ou.t print(a[ i] +"");} / 打/
leng th);
fo r(j =0;j <b. length;j ++)
{
System. ou.t print ( b [ j ] + "
");
/ /打印复制之后的数组的长度和内容
}
}
}
运行结果为 : a. length =3 012 数组复制之前 : b. leng th =5 0 10 20 30 40 数组复制之后 : b. leng th =3 012 数组在复制操作之前在内存中表现形式为 :
System. ou.t print ( b [ j ] + "
");
/ /打印 b数组
}
System. ou.t p rintln();
b =a;
/ 数/ 组复制
System. ou.t p rintln("数组复制之后 :");
System. ou.t println ( "b. leng th =" +b.
fo r(in t i =0;i <array. leng th;i ++) Sy stem. ou.t print("\t"+array[ i] ); System. ou.t p rintln(); } static vo id e lem Sqrt(double array[ ] ) { for(int i =0;i <array. length;i ++) a rray[ i] =M a th. sqrt(array[ i] ); } } 运行结果为 : 9. 0 56. 0 78. 0 35. 0 36. 0 3. 0 7. 4833 8. 8317 5. 9160 6. 0 实参数组的引用变量传递给形参数组的引用变 量内存的表示为 :
由上图可以看出 , 数组名有一 个单独的内存 空 间 , 存放数组对象的引用地址 。 这与 C 语言是不 同 的。
收稿日期 :2006 - 04 - 08 作者简介 :李舒亮 (1968 - ), 女 , 江西分宜人 , 副教授 , 主要从事软件及多媒体方面的研 究 。
— 85 —
第 3期
新 余 高 专 学 报
数组作参数分为数组 元素和数组名 两种 , 基 本 数据类型的数组元素作形参和实 参 , 实现的是值 传 递 , 这一点 java和 C 语言是一样的 。 用数组名作为 函数的形参和实参 , 在 C 语言中实现的是地址传递 , 把实参数组的地址传递给形参数 组 , 使得实参数 组 和形参数组共用同一段存储空间 , 形参数组的改 变 会影响实参数组 , 这种影响是双向的 ;而在 java中用 数组名作方法的形参和实参 , 实现的是值传递 , 把实 参数组名的引用地址传递给形参 数组的引用 , 使 得 形参数组的引 用和实 参数组 的引用 指向同 一段 内
声明一个整型数组 , 数组名表 示一个引用地 址 变量 , 与 C 不同 , Java在数组的定义中并不为数组元 素分配内存 , 因此 [ ] 中不用指出数组中元素个数 , 即 数组长度 , 而且对于如 上定义的一个数组是不能 访 问它的任何元素的 。我们必须用 new 运算符为它分 配内存空间 , 其格式如下 :
例: public c lass array sqrt { public static void m ain(S tring[ ] args) { double data[ ] ={9. 0, 56. 0, 78. 0, 35. 0, 36. 0}; p rin tA (d ata); elem Sqrt(da ta); p rin tA (d ata); } sta tic vo id p rintA (double array[ ] ) {
2006(第 11卷 )
2 数组的初始化
可以结合 FOR语句给数组元素赋初值 , 也可以
在定义数组的同时进行初始化 。 数组元素的引用形
式为 :数组名 [下标 ] , 这方面 java和 C 没 有什么区
别 。与 C、 C ++中不同 , Java对数组元素要进行越
界检查以确保安全性 。 同时 , 对于每个数 组都有一
是对象 。
参考文献 : [ 1] 耿袢义 , 张 跃平. Java2 实用教 程 (第二 版 )[ M ] . 北 京 :清
华大学出版社 , 2004. [ 2] 朱喜福 , 林建民 , 唐 永新. Jav a程 序设计 [ M ] . 北 京 :人民
邮电出版社 , 2001. [ 3] 李尊朝 , 苏 军. Java 程 序设 计 [ M ] . 北 京 :中 国铁 道出 版
除了以上的区别外 , 在 java类库还为 数组提供 了一系列的方法 , 加强了数组的功能 , 这里就不再说 明。 五 结论
数组在 java与 C 语言中的各种区别 , 本质原因 是 :数组在 java中是对象 , 而在 C 语言中是一种构造 类型 。 这也符合面向对象程度设 计的理念 :一切都
— 87 —
第 11卷第 3期 2006年 6月
新 余 高 专 学 报 JOURNA L O F X INYU CO LLEGE
V o .l 11, NO. 3 Jun. 2006
Java中数组与 C 语言 中数组的比较
● 李舒亮
(新余高等专科学校 计算机 系 , 江西 新余 338000)
摘 要 :从多方面比较数组在 java与 C 语言中的区别 , 根据它们在内存中的表现形式 , 找出其差别的 根本原因 。 关键 词 :数组 ;对象 ;引用变量 ;区别 ;jav a ;C 语言 中图 分类号 :TP 312 文献标识码 :A 文章编号 :1008 - 6765(2006)03 - 0085 - 03
印 a数组
System. ou.t p rintln();
/ /换行
System. ou.t p rintln("数组复制之前 :");
System. ou.t println ( "b. leng th =" +b.
leng th);
fo r(j =0;j <b. length;j ++)
{
b[ j] =j*10;
ห้องสมุดไป่ตู้
数组是高级程序设计语 言中常见的数据 类型 , 它是一组有序数据的集合 , 数组中的 每个元素都具 有相同的数据类型 。 用数组名和下标来标识数组中 的每个元素 。 使用数组可以为处 理成批的 、有内在 联系的数据提供便利 , 使用数组也使 得算法的实现 更加精炼 。
在 java和 C 语言中 都提供 了数组 这种数 据类 型 , 但它们有很大的区别 , 在 C 语言中数组是一种构 造类型 , 而在 java中数组是一种引用类型 。 两者在 内存中的表现形式是完全不同的 。 由此而引出的对 数组的操作也有很大的区别 。 下面就这个问题进行 讨论 。 1 数组的定义上的不同
数组复制操作完成之后内存的表现形式 :
从图中可以看出 , 执行 b =a语句后 , a把自己的 引用地址赋值给了 b, 使得 b 和 a指向同一段内存 , 而 b 原来指向的内存空间就变成了一个空的引用 , 最后会被 java的垃圾回收机制自动收回 。 而在 C 语 言中 , 数组名是不能进行直接进行赋值的 。 4 数组作参数的不同