C++转JAVA的一点感想

 

  出于找工作的原因,在导师的建议下,学习了JAVA语言,深感JAVA编程之轻便,写一点感悟,并且简单的对比以下JAVA与C++的一些异同点,以便大家转JAVA的时候更加高效。

  首先最大的不同在于Java没有指针,更准确的说是没有*以及&符号。从我的角度理解,Java声明的对象其实都是一个指针,指向了一个new 的对象或者一个已经存在的对象,所以我们不需要去delete,因为Java的后台会在对象引用计数为0的时候自动为我们清理内存,节约了很多时间和经历。因为Java没有指针,所以每一个Java的类都不需要写析构函数(方法),这一点可以帮我们解决很多内存管理上的任务,让我们可以把更多的精力放在业务逻辑上。当然,C++11为我们提供了方便的智能指针,也可以起到类似的效果。

 

 

    第二点就是Java没有宏定义。刚开始的时候给我带来了很多烦恼,因为经常和windows api打交道,习惯了用宏定义来为代码做标记(__in int k)以及用宏定义来做一些语句或者类型的替换(例如 TCHAR)。而且目前并没有发现相应的替代方案,希望可以在未来找到相应的解决方法吧~

     第三点就是Java的包的概念,包与C++的namespace还是有很大的区别的,因为Java类中的成员变量被声明为default, protected, public均为包内可见,而namespace更多的是起到了避免重名的作用,所以Java在这一方面可以为我们提供更多的可能。

    第四点是Java的泛型不需要template,这一点可让我少打好多字,特别是写二叉树,图遍历这些程序的时候,一坨一坨的方法需要不停的打template<class T>是一个很让人恼火的事。Java为我们节约了很多时间,而且Java方法(函数)的实现和声明都在同一个.java文件中,可以少些很多诸如void BinaryTree<T>:: Output(ostream& out)这种东西,也是很方便的,只是在一开始的时候会觉得很别扭,很乱。

    第五点是Java只有单继承,但是可以继承多个接口,接口的概念与虚基类是有点像的,但是接口的属性必须是静态常量,这一点有点很难理解,但是在方法(函数)的继承与实现上并没有什么区别。接口更像是定义了某种规范,让我们在编程的时候必须实现某些特定的方法,这一点在多线程的Runnable接口中感触比较深(虽然它只有一个run())。

 

 

    第六点就是Java的数组是带下标检查的,可以防止我们出现越界的问题。并且可以很方便的初始化带参数的类对象数组,而C++就略显复杂(可以参见我的另一篇关于初始化唔默认构造函数的元素数组的博客)。

    暂时能想到的就这么多,希望即将转Java的你可以提前避免很多因为曾经的习惯带来的语法错误。Java的学习还是比较简单的,跟随慕课网的Java入门课程可以很快入门并且写出很多小程序,至少用Java实现数据结构要比C++更方便一点。当然,C++的那种对内存的控制感是Java无法比拟的,但是语言毕竟只是工具,编程的思想与算法才是精髓,无论选择何种语言,都是表达自己思想的途径而已~

 

/2018年9月16日更新

写完这篇博客不久,我就放弃了JAVA的学习。总的来说,我学完了大部分的JAVA语法,可以顺利实现链表,排序,二叉树这些简单的算法和数据结构。学会了闭包,多线程,有很多感悟,因为Java的设计确实很巧妙,很多值得借鉴的思路。但是我觉得,作为一个IT狗,语言仅仅是一个工具,算法才是核心。如果在找工作的时候没有核心竞争力,公司就可以无情的压榨自己的劳动力,以为自己并非无可取代的那一个,或者说,自己随时可以被工资更低,屁事更少的新员工取代。最终我还是回归了C++开发。想写这次更新,主要是因为舍友经常问我一个问题,你还在搞你的C++吗?时至今日,我只能勉强说一句,是的。但是我从来没有研究过C++,甚至在自己的简历上仅仅写了熟练掌握C++。因为我一直在学习的是算法,只有算法的支撑,才能让我所搞的C++有灵魂,能够一直用C++开发程序。所以,希望看到这篇博客的你们,能够早一点避免追求各种新型的编程语言,而是可以潜心研究一下算法、数学这些内功,这样才不至于被别人轻松淘汰掉~

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值