Java最大的竞争对手是谁?

Java的不断发展要归功于C、C++ 和C# 等编程语言的不断挑战。C++、C#和Java等编程语言基本上都来源于C语言但又有很多区别。业内人士经常将C比作爷爷,C++比做儿子,C# 和Java等语言比作孙子。对于变量声明、参数传递、操作符、流控制等,Java使用了和C、C++、C# 相同的传统,而C++ 主要是对C的扩展并融入了面向对象的思想,C#和Java语言是纯粹的面向对象的编程语言并吸收了C、C++ 语言的很多优点,摒弃了很多缺点,但C#编程语言的运行依赖于Windows平台,而Java语言不依赖于任何平台,因此使得熟悉C、C++、C#的程序员能够很方便地转向Java编程。具体描述有如下几点。

  1. Java与C、C++对比

1) 全局变量

在Java编程的过程中,不能在类之外定义全局变量,如:

public String name;             //错,不能在类之外定义全局变量 public class GlobalVar{     public static global_var;   //全局变量也叫成员变量或成员属性  } 

要定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。在类GlobalVar中定义变量global_var为public static,使得其他类可以访问和修改该变量。Java对全局变量进行了更好的封装。而在C和C++ 中,依赖于不加封装的全局变量常常造成系统的崩溃。

2) 剔除goto关键字

虽然在Java中将关键字goto保留了,但是Java不支持C、C++ 中的goto语句,而是通过异常处理语句try、Catch、final等来代替C、C++ 中用goto语句来处理遇到错误时跳转的情况,使程序更易读且更结构化。

3) 良好的指针控制

指针是C、C++ 编程语言中最有魅力的特性,但它的超高使用难度加上超高灵活性,使得大部分程序员望而止步,在学习C、C++ 语言进行编程的过程中,通过指针所进行的内存地址操作常常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C或C++ 中的私有成员,从而破坏安全性,造成系统的崩溃。而Java语言对指针进行完全的控制,程序员不能直接进行任何指针操作,例如把整数转化为指针,或者通过指针释放某一内存地址等。同时,数组作为类在Java中实现,较好地解决了数组访问越界这一问题。

4) 自动内存回收

一般内存资源有限,很容易被程序破坏。在C中,程序员通过库函数malloc()和free()来分配和释放内存,在C++ 中则通过运算符new和delete来分配和释放内存。再次释放已释放的内存块或未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也会逐渐耗尽系统资源。而在Java中,所有的数据结构都是对象,通过运算符new为它们分配内存堆。通过运算符new可以得到对象的处理权,而实际分配给对象的内存可能随程序运行而改变,Java对此自动地进行管理并且进行垃圾收集,有效防止了由于程序员的误操作而导致的错误,并且更好地利用了系统资源。

5) 固定的数据类型

在C、C++ 语言中不同数据类型在不同的平台上所占的位数不一样,例如,int类型的数据在IBM PC中占16位,在VAX-II中占32位,这就导致了代码的不可移植性。但在Java中,对于这些数据类型都采用国际统一字符编码,即分配固定长度的位数,例如,对int类型的数据,它在任何机器上都占32位,这就保证了Java的平台无关性。

6) 严格控制数据类型转换

一种数据类型的数据转换成另外一种数据类型的数据时,常常会出现数据精度丢失的问题,在C、C++ 中,通过指针进行任意的数据类型转换极不安全,而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换。

7) 库文件

编程语言中丰富的库文件能快速地开发出各种应用软件。C、C++ 中用头文件来声明类的原型以及全局变量、库函数等,在大的系统中,维护这些头文件是很困难的。而Java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员的操作。同时,Java中用import语句来与其他类进行通信,以便使用它们的方法。

8) 类与结构体和联合体

安全是一个永恒的话题。C、C++ 中的结构体和联合体中的所有成员均为公有,这就带来了安全性问题。Java中不包含结构体和联合体,所有的内容都封装在类中。

其实Java与C、C++ 编程语言还有很多的差别如:速度、内部类、方法嵌入等,但总的来说Java提取了很多其他编程语言的优点,使它更适合于大众程序员的需求。

2. Java与C# 对比

Java语言是开放式的世界语言,基本源代码都公开,而C# 作为Microsoft的一门主打语言也不甘示弱。一个开源,一个收费,它们两者基本上都对C、C++ 深涩的语法和语义进行了改进。在语法方面,两者都摒弃了const修饰、宏替换等;在继承方面,两者都采用更易于理解的单继承和多接口实现方案;在源代码组织方面,两者都提出了声明与实现于一体的逻辑封装。

Java与C# 的不同点主要体现在:C# 在Microsoft的支撑下提供了强大的Visual Studio开发平台,可以极好地提高C# 程序的开发效率。而且C#更善于利用Windows平台。Java的设计宗旨是独立于任何平台,因此自然不会提供太多的Windows特性。但这也正体现了Java语言的跨平台优势。一般企业级应用,无法确定这个应用是在怎样的平台上运行。因而企业级开发一般选择Java作为开发语言。

本文转自:http://book.51cto.com/art/200909/151643.htm

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-08-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏韩伟的专栏

C#语言和JAVA、C++的对比学习

很早以前,就听说著名的BorlandDelphi开发者,去微软设计了一门伟大的语言C#。但是由于一直都在Linux上做开发,所以无缘拜会。直到最近几年,借手游大...

2524
来自专栏疯狂的小程序

微信小程序 template 模板功能实现循环

官网案例是直接用对象扩展运算符传递一些简单数据;

3137
来自专栏跨界架构师

再谈开发中的代码规范

  随着公司的业务发展,项目越来越多,越来越大,复杂性也越来越高。查找一个BUG变得越发抓狂;新人熟悉一块代码也变得越发困难。有的时候顺手写下的一行充满坏味道的...

884
来自专栏云飞学编程

关于一道面试题的极其无聊的python算法实现

就找3个条件,就可以得出我们想要的结果,实话说,开始我也是很懵逼,后来仔细想了想,还是有可能的,我们可以这样来做

2672
来自专栏Python研发

一起来学Go --- (go的简介以及环境的安装)

相信大家,看到这篇文章的时候,已经自己在百度百科了解了go的发展史已经特性,再次我依然。。。。得哔哔叨一会。   ^.^

1031
来自专栏木可大大

漫谈计算机语言

面对需求人员不断提出的变态需求,软件开发人员的主要工作就是将需求人员口中或文档中的自然语言翻译成计算机能够理解的形式语言。自然语言指的是人类的语言,比如汉语、英...

52324
来自专栏Python区块链

想到阿里巴巴从事Python吗?年薪300K不是梦!

作为Python工程师,进入大公司是开启职业新起点的关键,在阿里巴巴面试Python工程师的题目和经历,希望对广大Python工程师的求职者有一个帮助。

1736
来自专栏编程坑太多

java最困扰你的那些事?又将如何解决?

915
来自专栏PPV课数据科学社区

【V课堂】R语言十八讲(六)

前面我们讲了许多数据处理阶段使用的函数,但是,仔细的读者可能发现了,函数全是数值统计型的,我们在做数据处理时,经常会碰到处理字符的情况,像变量的名字,像产品的...

35214
来自专栏苍云横渡学习笔记

【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型

学习笔记目录 【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型 【day 2】python编程:从入门到实践学习笔记-列表以及其操...

3367

扫码关注云+社区