由C#快速入门Java

从头学习Java

我在研究生期间采用Visual C#完成过一些项目,算是对Visual C#有了一定了解。现在(2015年初)看到Android应用开发还是有一定的发展空间,就准备自学Android开发。虽然我有一定的C#基础,并且确实也有人采用C#语言进行Android开发,但是基于以下考虑,我还是决定从头学习Java

一方面,Java作为Android主流开发语言,比C#语言有更多的入门资料、开源资源,和问题答疑。这对于以后进行Android开发非常重要。

另一方面,Java语言和C#语言都是面向对象语言,两者的使用差别不大,所以从头学习的成本不高。

学习资料:

在知乎上查找相关帖子,了解到:

针对有Java编程基础的的读者,建议多看《ThinkingIn Java》《Effective Java》,而这两本书显然不适合我。(http://www.zhihu.com/question/26417244

而根据知乎帖子的推荐,我选择了《Java语言程序设计(第三版)》((美)Y. Daniel Liang著 王镁、李娜译)。 http://www.zhihu.com/question/26757005)  

选择这边书的原因:

一是架构比较清楚。通过学习第一篇《程序设计基础》和第二篇《面向对象程序设计》,就可以分别了解到Java语言的面向过程和面向对象的基本语法。

二是范例比较清楚,解释也比较明白。把自己不太明白的例子抄写一遍,就可以基本理解文中所要表达的意思了。

学习过程:

第一,设置编译环境。在Eclipse官方网站( http://www.eclipse.org/downloads )下载Eclipse Luna (4.4.1),解压后可以直接运行。

第二,运行第一个程序“Hello World”。百度经验帖子《eclipse新建java项目》可供参考。( http://jingyan.baidu.com/article/4d58d541331cbd9dd4e9c0e2.html )将示例实现后,就已经掌握新建Project和Class,运行调试程序等基本操作了。

第三,开始Eclipse的代码自动提示功能。习惯了C#强大的代码自动提示功能,会对Eclipse没有提示功能的默认设置非常不习惯。参照下述帖子设置一下就可以了。(http://blog.sina.com.cn/s/blog_6797a6700100rsfw.html)

第三,学习第一篇《程序设计基础》。

这一篇主要讲了如何用基本数据类型、控制语句、方法编写简单的Java程序。这一部分的用法和C#基本一致。差别比较大的是常量标识符,C#用const,而Java用final。此外,最好将示例的代码手动输入并调试一下,对编译环境有个基本的了解,同时也可以体会一下文中的编程规范。

第四,学习第二篇《面向对象程序设计》。

关键词上的差异:Java语言使用super来对父类进行操作,用extends来代替“:”符号表示继承,用implements来表示接口连接。

文中的几个例子也模仿着写了一遍,算是基本入门了。

关于设计模式

在这次学习过程中,对是否要学习设计模式纠结了一番,也查了一些资料。研究生期间做项目过程中,项目需求和功能实现都是自己做的,由于项目需求牵涉到专业知识,而自己的专业知识也是不断积累的,所以每过一段时间就得重新对程序进行重构,更让自己不满意的是,自己总觉得自己的程序丑陋不堪,看不下去。快毕业时,翻过程杰的《大话设计模式》,觉得如果有机会学习一下设计模式应该是有必要的。但是在知乎上查了一下,发现很多人并不赞成单独去学习设计模式,而是在实践过程中不断学习。(http://www.zhihu.com/question/23757906)

个人非常认同文中对设计模式的基本态度是:不用为了“模式”而模式,多读代码,有用的模式自然会出现,就学会如何使用了;类代码行数不超过400,函数行数不超过20,嵌套不超过3层的编码规则。实践过程中,一旦违反这条规则的时候,就不断的重构至这个目标。放弃设计模式,努力写出高可阅读性代码先。

回想自己编程过程中的失误之处:一是闭门造车,没有主动学习别人的优秀代码;二是放松要求,没有及时进行重构,需要重构的代码越积越多,到后来想重构也来不及了。

UML

看到《Java语言程序设计(第三版)》中很多地方都用UML语言来进行表述,而之前没有了解过这方面的知识,就决定了解一下。知乎上帖子有几点讲得很不错:首先,UML模型是开发团队内部高效沟通的手段;其次,UML的最重要的意义不在于生成代码,而在于前面的工作流;最后,使用UML一点点引进,够用就可以了。(http://www.zhihu.com/question/23569835)

致谢和声明

本文写作过程中参考了很多网友的帖子,在此予以感谢。如果有不恰引用地方,请致信[email protected]。我本科和硕士都是机械工程,本科期间上C++课程时学习过一些编程,其他都是研究生期间自学的,所以在表述和观点未必正确,请多多指正,非常感谢。

你可能感兴趣的:(Java)