c和java语言之间的差异(摘录)
2004-08-10 19:16
225 查看
java没有预处理器
java没有包括一个预处理器,并且没有定义任何类似的#define、#include以及#ifdef伪指令。常量定义在java中被使用static final字段取代。在java中没有宏定义,但是高级编译器技术和内联已经使它们不那么重要。java不要求使用#include伪指令,因为java没有头文件。java类文件包括api和类执行过程,而编译器在必要的时候从类文件中读取信息。java缺乏任何形式的条件编译,但是她的穿越平台的可移植性意味着这个特点并非必要。
没有全局变量
java定义了一个非常整齐的名字空间。包容了类,类包括字段和方法,而方法包括局部变量。但是在java 中没有全局变量,因此没有可能在这些变量之间发生名字冲突
明确定义的基本数据类型大小
在java中所有的基本数据类型都有定义明确的大小。在c中,short、int以及long数据类型的大小都依赖与它们的执行平台,这一个特点明显阻碍了他们的可移植性
没有指针
java类和数组都是引用类型,而对于对象和数组的引用类似于c中的指针,然而,和c中指针不同,在jaca中的引用是完全不透明的,没有办法将一个引用转换为一个基本数据类型,而且一个引用不能被增加或者减少。java中没有类似&的地址运算符,类似*或者->的引用运算符,或者sizeof运算符,指针是造成程序错误的一个重要原因,消除它们将简化这种语言,并且使java程序更加强壮和安全
无用存储单元收集
java虚拟机执行无用存储单元收集,从而使java程序员不必明确地管理所有对象和数组使用的内存,这个特点消除了另外一个全体类别的常见程序错误,并且几乎消除了java程序中的内存泄露.
无goto语句
java不支持goto语句,除非定义在明确的环境中,使用goto语句通常被视为拙劣的程序设计习惯,java添加了异常处理和标记语句break和continue来代替c语言提供的流控制语句.它们极好地代替了goto语句
随处可以声明变量
c要求局部变量声明必须放在方法或程序块的开始,但是java则允许声明随处出现.尽管如此,许多程序员还是喜欢把所有的变量声明集合起来,放在方法的开头.
向前引用
java编译器比c编译器聪明,因为它允许在定义方法之前就调用它,这就不必在一个程序文件中定义函数之前先在一个头文件中声明它们了.c就有这样的要求.
方法重载
java 程序可以使用同一个名字定义多个方法,条件是这些方法的参数列表不同
无struct和union类型
java 不支持c的类型struct和union,但是可以将java的class看作是一种增强的struct
无枚举类型
c的关键字enum是用来定义有指定值的固定集合构成的类型的,java不支持该关键字,对于像java这样的强类型语言来说,这是令人惊异的现象,但是使用对象常量可以模拟这一特性
无位字段
c可以指定struct结构的各个字段所占用的为数,java不支持这一(不常用的)功能.
无typedef
c用关键字typedef可以为类型定义别名,java不支持这一关键字,因为java没有指针,比c的命名模式更加简单一致,所以typedef的许多常用用法在java中都是不必要的
无方法指针
c可以将一个函数的地址存储在一个变量中,并把这个函数指针传递给其他的函数.对于java的方法,则不能这样处理,但是传递实现某个特殊接口的对象通常可以达到相似的效果,而且java方法可以由java.lang.reflect.Method对象表示和调用
无变量长度参数列表
java不允许定义参数数目可变的方法,诸如c的printf().虽然通过方法重载可以模拟c的这种函数,但是没有一种通用的方法可以替代这一特性
java没有包括一个预处理器,并且没有定义任何类似的#define、#include以及#ifdef伪指令。常量定义在java中被使用static final字段取代。在java中没有宏定义,但是高级编译器技术和内联已经使它们不那么重要。java不要求使用#include伪指令,因为java没有头文件。java类文件包括api和类执行过程,而编译器在必要的时候从类文件中读取信息。java缺乏任何形式的条件编译,但是她的穿越平台的可移植性意味着这个特点并非必要。
没有全局变量
java定义了一个非常整齐的名字空间。包容了类,类包括字段和方法,而方法包括局部变量。但是在java 中没有全局变量,因此没有可能在这些变量之间发生名字冲突
明确定义的基本数据类型大小
在java中所有的基本数据类型都有定义明确的大小。在c中,short、int以及long数据类型的大小都依赖与它们的执行平台,这一个特点明显阻碍了他们的可移植性
没有指针
java类和数组都是引用类型,而对于对象和数组的引用类似于c中的指针,然而,和c中指针不同,在jaca中的引用是完全不透明的,没有办法将一个引用转换为一个基本数据类型,而且一个引用不能被增加或者减少。java中没有类似&的地址运算符,类似*或者->的引用运算符,或者sizeof运算符,指针是造成程序错误的一个重要原因,消除它们将简化这种语言,并且使java程序更加强壮和安全
无用存储单元收集
java虚拟机执行无用存储单元收集,从而使java程序员不必明确地管理所有对象和数组使用的内存,这个特点消除了另外一个全体类别的常见程序错误,并且几乎消除了java程序中的内存泄露.
无goto语句
java不支持goto语句,除非定义在明确的环境中,使用goto语句通常被视为拙劣的程序设计习惯,java添加了异常处理和标记语句break和continue来代替c语言提供的流控制语句.它们极好地代替了goto语句
随处可以声明变量
c要求局部变量声明必须放在方法或程序块的开始,但是java则允许声明随处出现.尽管如此,许多程序员还是喜欢把所有的变量声明集合起来,放在方法的开头.
向前引用
java编译器比c编译器聪明,因为它允许在定义方法之前就调用它,这就不必在一个程序文件中定义函数之前先在一个头文件中声明它们了.c就有这样的要求.
方法重载
java 程序可以使用同一个名字定义多个方法,条件是这些方法的参数列表不同
无struct和union类型
java 不支持c的类型struct和union,但是可以将java的class看作是一种增强的struct
无枚举类型
c的关键字enum是用来定义有指定值的固定集合构成的类型的,java不支持该关键字,对于像java这样的强类型语言来说,这是令人惊异的现象,但是使用对象常量可以模拟这一特性
无位字段
c可以指定struct结构的各个字段所占用的为数,java不支持这一(不常用的)功能.
无typedef
c用关键字typedef可以为类型定义别名,java不支持这一关键字,因为java没有指针,比c的命名模式更加简单一致,所以typedef的许多常用用法在java中都是不必要的
无方法指针
c可以将一个函数的地址存储在一个变量中,并把这个函数指针传递给其他的函数.对于java的方法,则不能这样处理,但是传递实现某个特殊接口的对象通常可以达到相似的效果,而且java方法可以由java.lang.reflect.Method对象表示和调用
无变量长度参数列表
java不允许定义参数数目可变的方法,诸如c的printf().虽然通过方法重载可以模拟c的这种函数,但是没有一种通用的方法可以替代这一特性
相关文章推荐
- 专家系统语言和过程语言之间的主要功能差异
- php 、asp、 java、 c#、 delphi之间的语言对比
- Java语言与C++语言的差异总结
- 程序员面试金典——解题总结: 9.14 Java 14.3final,finally和finalize之间有什么差异?----
- python,java,go语言之间的区别!
- Java语言与C++语言的差异总结
- 跨语言之间的socket通信(C--Java的握手)(基础篇转)
- java,c,c++ 语言之间基本数据类型的比较
- 跨语言之间的socket通信(C--Java的握手)
- php 、asp、 java、 c#、 delphi之间的语言对照
- JAVA学习笔记:基础算法(附Java与C之间检查数组越界的差异)
- 跨语言之间的socket通信(C--Java的握手)
- Java语言和C++语言的差异—老生常谈
- C#和java之间的一些差异与共性
- 语言小知识-Java- 不同进制之间的转换
- C++、Java和C#语言在处理“虚拟私有方法”上的差异
- Java 总结:各种排序算法的介绍及其之间的对比差异
- Java语言和C++语言的差异
- Java语言与C++语言的差异总结
- 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响