主题:[原创]关于Java和C++之间的一点看法,个人意见
开始学Java了,有一个星期左右。之前我是学过C++的。下面是我自己的一点看法。
Java和C++的语法很相似,学过C++来学Java的语法,一点都不困难,很容易。我个人是比较喜欢C++的,它支持多种的设计思想,我想现在编程主要有三种主要的思想。一是面向过程,主要是功能分解;一是面向对象,主要是责任分配;一是泛型编程,主要是操作与具体数据相分离。三种思想是相辅相成的,没有说那个更为高级,C++都支持。最为喜欢的是它的模板。
不过C++入门的时候会很枯燥,主要不是因为它的语法难,而是因为它没有创建界面的函数,没有吸引人的界面,只有那个黑洞洞的类似Dos的窗口。可以从无到有弄出个界面来,会很令人兴奋的,特别是刚入门的时候。想用C++弄个有界面的东西,除了要学C++本身的语法外,还要学一个特定平台的API。大多数人都是用windows的,要学什么win32/64 API. 那些会比较难,要熟悉那个平台下程序运行的流程,为了一个简单
的界面要写比较长的代码,什么注册窗口啊,创建窗口啊,窗口过程啊。windows下的API都是C风格的,一条一条的调用也不是很方便。至于那个什么MFC,虽然是封装了一些类,不过不是很好,那些消息传递之类九曲十三弯,很多不知所云的宏,还有设置一个大的框架,只在其中修修补补,很难突破。虽然它提供了一些工具来创建代码,不过创建出来的代码都比较烂,可以说是MFC设计得不好,才需要一个工具来创建更加不好的代码。
Java刚学的时候就比较有趣了。介绍Java的书都说Java最大的优点是可移植,不过什么可移植对于初学者来说根本就不算什么,拿我来说,我觉得它最大的优点最有趣的地方就是可以很容易弄个比较好看的界面。Java的GUI我觉得设计的很好,至少和MFC相比简直是天差地别。Java的GUI有三个基本的元素, Component(组件), Event(事件)、listener(监听器)。简单点就是组件构成界面,用户在组件上面的动作激发事件,监
听器监视事件的发生,发生时候就调用代码。这个模式和Windows下的消息驱动是很类似的。不过Java是个面向对象的语言,它将这些GUI元素都封成一个一个的类,方面使用,使用的简便性和其他的非界面类一样。Java的类库都是同一个公司写的,可能还是同一群人,各个类的风格很统一。那些命名也比较好,比Windows的API简短多了,也好记。初学者往往会觉得要产生一个界面会很难,我们往往会认为可以看到的东西才是实在的,看不见的东西就会忽略,认为没有那样重要。自己短短几行代码就有个很炫的界面,怎么能不兴奋呢。
所以我觉得Java和C++相比,Java的最大的好处是有个比较齐全的类库,特别是图形界面的类,而不是它的语言本身。C++的最最重要的优点是模板,用模本设计出来的STL是个杰作。如果Java以后会添加模板,C++在标准之中有个图形类库,那样Java和C++会更为接近。另外Java全部是都要写成类,这样有助于程序风格的统一,会趋向于用面向对象来思考,因为语言会影响思维习惯。C++支持C风格的函数和Java风格的类,使用起来会很灵活,自然也增加出错的机会。规范和灵活本来就有点矛盾,所以这方面很难说谁更好。
Java和C++还有个最大的区别就是指针,Java没有显式定义的指针,都换成引用了,其实本质上引用就是指针。Java常常是new一个对象跟着传给一个函数的参数,在C++上面就说是引用调用。Java很多函数调用的时候,本质上就是将一个指针的数值传给另一个指针,也就是说用一个指针new一个对象,跟着让另一个指向它,当然Java没有指针的概念,这些都换成引用了。上面那个做法在C++上很多人是强烈禁止的,因为很容易引起内存泄漏。Java因此也有个垃圾回收的机制。垃圾回收机制的设立就是为了摆脱指针,因为指针太危险了。没有了指针当然可以减少很多危险,不过这样也少了一份灵活。
Java还用了很多多态性,好象ArrayList可以放任何的类,很多函数用接口做形参。ArrayList可以放任何的类,原因是所有的Java类都是从Object派生出来的。我认为这样做的目的主要是为了实现容器类。要是Java可以引进模板的话,Java类的设计可以更优美的,还可以实现个类似STL的算法--容器类。
基本上,Java和C++都各有好处,都是很优秀的语言。Java对初学编程的更为友好. 而C++可能是最为复杂灵活的语言了,学好了它再学其他的语言就不难了。不过我个人还是偏好于C++,或者是先入为主吧。
Java和C++的语法很相似,学过C++来学Java的语法,一点都不困难,很容易。我个人是比较喜欢C++的,它支持多种的设计思想,我想现在编程主要有三种主要的思想。一是面向过程,主要是功能分解;一是面向对象,主要是责任分配;一是泛型编程,主要是操作与具体数据相分离。三种思想是相辅相成的,没有说那个更为高级,C++都支持。最为喜欢的是它的模板。
不过C++入门的时候会很枯燥,主要不是因为它的语法难,而是因为它没有创建界面的函数,没有吸引人的界面,只有那个黑洞洞的类似Dos的窗口。可以从无到有弄出个界面来,会很令人兴奋的,特别是刚入门的时候。想用C++弄个有界面的东西,除了要学C++本身的语法外,还要学一个特定平台的API。大多数人都是用windows的,要学什么win32/64 API. 那些会比较难,要熟悉那个平台下程序运行的流程,为了一个简单
的界面要写比较长的代码,什么注册窗口啊,创建窗口啊,窗口过程啊。windows下的API都是C风格的,一条一条的调用也不是很方便。至于那个什么MFC,虽然是封装了一些类,不过不是很好,那些消息传递之类九曲十三弯,很多不知所云的宏,还有设置一个大的框架,只在其中修修补补,很难突破。虽然它提供了一些工具来创建代码,不过创建出来的代码都比较烂,可以说是MFC设计得不好,才需要一个工具来创建更加不好的代码。
Java刚学的时候就比较有趣了。介绍Java的书都说Java最大的优点是可移植,不过什么可移植对于初学者来说根本就不算什么,拿我来说,我觉得它最大的优点最有趣的地方就是可以很容易弄个比较好看的界面。Java的GUI我觉得设计的很好,至少和MFC相比简直是天差地别。Java的GUI有三个基本的元素, Component(组件), Event(事件)、listener(监听器)。简单点就是组件构成界面,用户在组件上面的动作激发事件,监
听器监视事件的发生,发生时候就调用代码。这个模式和Windows下的消息驱动是很类似的。不过Java是个面向对象的语言,它将这些GUI元素都封成一个一个的类,方面使用,使用的简便性和其他的非界面类一样。Java的类库都是同一个公司写的,可能还是同一群人,各个类的风格很统一。那些命名也比较好,比Windows的API简短多了,也好记。初学者往往会觉得要产生一个界面会很难,我们往往会认为可以看到的东西才是实在的,看不见的东西就会忽略,认为没有那样重要。自己短短几行代码就有个很炫的界面,怎么能不兴奋呢。
所以我觉得Java和C++相比,Java的最大的好处是有个比较齐全的类库,特别是图形界面的类,而不是它的语言本身。C++的最最重要的优点是模板,用模本设计出来的STL是个杰作。如果Java以后会添加模板,C++在标准之中有个图形类库,那样Java和C++会更为接近。另外Java全部是都要写成类,这样有助于程序风格的统一,会趋向于用面向对象来思考,因为语言会影响思维习惯。C++支持C风格的函数和Java风格的类,使用起来会很灵活,自然也增加出错的机会。规范和灵活本来就有点矛盾,所以这方面很难说谁更好。
Java和C++还有个最大的区别就是指针,Java没有显式定义的指针,都换成引用了,其实本质上引用就是指针。Java常常是new一个对象跟着传给一个函数的参数,在C++上面就说是引用调用。Java很多函数调用的时候,本质上就是将一个指针的数值传给另一个指针,也就是说用一个指针new一个对象,跟着让另一个指向它,当然Java没有指针的概念,这些都换成引用了。上面那个做法在C++上很多人是强烈禁止的,因为很容易引起内存泄漏。Java因此也有个垃圾回收的机制。垃圾回收机制的设立就是为了摆脱指针,因为指针太危险了。没有了指针当然可以减少很多危险,不过这样也少了一份灵活。
Java还用了很多多态性,好象ArrayList可以放任何的类,很多函数用接口做形参。ArrayList可以放任何的类,原因是所有的Java类都是从Object派生出来的。我认为这样做的目的主要是为了实现容器类。要是Java可以引进模板的话,Java类的设计可以更优美的,还可以实现个类似STL的算法--容器类。
基本上,Java和C++都各有好处,都是很优秀的语言。Java对初学编程的更为友好. 而C++可能是最为复杂灵活的语言了,学好了它再学其他的语言就不难了。不过我个人还是偏好于C++,或者是先入为主吧。