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 toString 没有父类的 为什么java没有头文件
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java 为什么没有jre java 为什么没有内核线程
Java-线程怎么来的?并发处理的广泛应用是使得amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,是人类压榨计算机运算能力的最有力武器。 并发并非一定得用多线程,多进程也可以,不过java里面谈论并发,大多数与线程脱不开关系。因此我们从线程说起。小编主要在本文介绍了以下内容: 线程的实现 线程的调度 线程状态切换 线程的实现 线程是比进程更轻量级的调度执行单
java 为什么没有jre java是内核线程还是用户线程 模拟进程状态转换程序java版 用户级别线程的切换切换到内核线程 用户线程