作为Java小组的一员,根据自己在Java方面的学习过程提一提几本书名,仅供参考,不对之处欢迎指证。写的虽然没有谭老师文章那么有深度哈,不过觉得咱每个人有自己的想法,有自己的方向就好。
首先我觉得,暑期的时间可以考虑加强下基础知识,数据结构等等。预习一下下学期的知识,计算机组成原理,数据库系统之类也就行了,另外根据个人的爱好可以看一看平时没有了解的专业知识。
一. 重新认识JavaSE(Java Platform Standard Edition)
听完马春燕老师的面向对象技术与编程,每个人都有不少收获。可以继续深入,以下两边均可作为Java学习工具书,随时翻阅。这两本书也不会一遍就能学透。
《Java 编程思想(第四版)》 Bruce Eckel机械工业出版社(Thinkingin Java)
估计好多人都人手一本这个,那如果没仔细看过的话看看;而且学完数据结构之后再看一定会有收获!
《Effective Java(第二版)》Joshua Bloch杨春花 余黎敏 译 机械工业出版社
看过,讲到java编程的78条原则,觉得挺好,至今没看完。。。
<相关文章>
在Java 7里如何对文件进行操作
http://sd.csdn.net/a/20111027/306503.html
Java编程中“为了性能”需做的26件事
http://sd.csdn.net/a/20120601/2806249.html
二. 面向对象
Java学习重在掌握面向对象思想。而这也不仅局限于java语言。C++同样也是面向对象,只是没有Java纯粹而已。
面向对象思想似乎比较好理解,现实生活中有很多面向对象的例子。然而要把面向对象的思想融入到程序当中并不容易。举两个例子:
例一
大二学C++时杨帆老师让用面向对象思想设计一个三局两胜石头剪刀布的游戏程序,当然用的是C++,输入输出都在小黑屏上。于是各种版本出现了:
<版本一> 设计一个类,里边包含了整个包括输入输出选择的类,在main函数中开辟一块该类的对象空间,指针调用其方法。
<版本二> 设计两个类,分别代表双方(即第一个输入石头/剪刀/布的值和第二个输入值)。Main函数中控制比赛过程记录比赛局数。
<版本三> (我当时想的)设计一个类,表示每一局比赛,其中包含三个变量,分别代表比赛双方所出的值和比赛结果。
<答案参考版本> 设计三个类。两个代表比赛双方,一个代表裁判。裁判有如下方法:宣布开始,判断结果,记录结果。
显然版本一略水,面向过程的身子批了一层假外套。版本二和三都有面向对象的思想在却也总没有抽象到能类比与现实生活中的对象去,相比之下答案参考版本更“面向对象”一点哈~
例二
仔细考虑构造方法。我们发现,经常在程序类中会有多个参数。在构造对象时需要给成员变量赋值,解决方式
<方法一> 最简单的可以多个覆写构造方法,参数个数和类型不相同。叫做重叠构造方法模式。但是当有许多参数时,代码写起来费劲。
<方法二> 也可以只写无参构造方法,另外编写多个set方法来实现。这叫做JavaBeans模式。其安全性不好,存在可变因素。
<方法三> 采用Builder设计模式,即在每个A类中创建Builder内部类,Builder内部类提供示例化A类对象的build()方法。每次通过newA.Builder(..).build()方法创建对象。Builder模式的优势在于有多个可变参数,而A类只有一个Builder类型参数。
有关Builder模式可参考http://zhanche2011.iteye.com/blog/1168459
当然还有其他方式构造对象,每种方法各有优缺,但都属于面向对象设计要考虑的问题。
由这简单的两个例子对象并不是一件十分容易的事。如何能够更合理的根据实际需求设计面向对象程序需要经过不断的学习和积累。
《Head First设计模式》Freeman,E. 等著,OreilyTaiwan公司 译,UMLChina 改编 中国电力出版社
春燕姐推荐,学长推荐,也翻过
《重构:改善既有代码的设计》人民邮电出版社 (英文名《Refactoring Improving the Design of Existing Code》)Martin Fowler 著 熊节 译.
我们上SSD3时春燕姐推荐,我没翻过
<相关文章>
Java程序员应该了解的10个面向对象设计原则
http://sd.csdn.net/a/20120314/313089.html
23个经典JDK设计模式
http://sd.csdn.net/a/20101129/282644.html
三. 网络编程
Java的网络编程现在用处并不多,与网络TCP/IP模型的应用层有关。现在可以了解下TCP/IP, java的socket编程。具体的内容会在大三下学期(不清楚你们是不是)《网络与分布式计算》SSD8课程中讲解。
如果希望了解更多网络知识的话,这几本书都可以一试
考研指定教材
《计算机网络——自顶向下方法》James F. Kurose,Keith W. Ross陈鸣译 机械工业出版社
学院指定教材,按网络从应用层到网络接口层讲了许多协议及其原理,觉得挺好,尚未看完。很多学长有,可以借阅
《计算机网络(第四版)》Andrew S. Tanenbaum 潘爱民等译 清华大学出版社
李樾学长推荐
<相关文章>
javase--7网络编程
http://blog.csdn.net/hx_uestc/article/details/7232477
你所不知道的传输层
http://6520874.blog.163.com/blog/static/72582719201171204147495/
四. 从Servlet/JSP认识JavaEE(java Enterprise Edition)
涉及java EE的基础的知识,学java EE先从servlet开始,相对易懂,能完成许多东西。
《Head First Servlets & JSP》Bryan Basham等著 中国电力出版社
学院指定教材,挺好,就是比较挺厚
五. Java Web框架
大部分web框架都是从servlet的基础上封装起来的。
目前正在流行的开源框架主要有这么几个。各用一句话说明一下
Hibernate —— 一种把数据库的关系型数据映射到java对象的技术,方便数据库操作
Struts2 —— 提供网页前台界面到后台代码的控制逻辑
Spring —— 更高级的企业级面向对象等思路,让代码结构更有范儿。spring框架的思想值得一看
当然还有其他的框架如EJB,JPA等等。
各种框架针对开发中不同的模块提供解决对策。各个框架对同一个问题可能会有重叠。框架之间不同的搭配,合成整个系统,即为“整合”。拿打仗选武器装备来 说,选择不同框架的可以搭配使用头盔,铠甲,武器。不同的装配达到的效果会略有不同。当然穿上很多不一定比只穿普通作战服效果好,可能在速度上,灵活程度上会受一定影响。根据需要也不一定全副武装。只用一个框架,或两个配合使用都随意,不过解决问题的侧重不同而已。一般在学校小型javaWeb项目开发中比较常见的是hibernate+Struts2或spring+struts2+hibernate(即SSH)整合使用。
需要说明的是:
框架是世界的技术大牛设计的,其设计思路都会比较复杂,而且有庞大的技术团队在支持它。学习框架只是加快开发的速度,不要太指望它能帮助你深入了解计算机科学。应该知道,很多专科院校的学生也在学着这些框架,他们接触框架的时间比我们要长,使用框架的熟练度比我们要高。那么,我们的优势在哪里呢?(这个问 题同样出现于各种强大的控件库,如QT等等,这里不是说用控件库不好,我只想说,仅仅关注于API而不去关注它背后的事情对我们学来说并不是什么好事)
每个人未来有不同的打算,找工作或读研深造,选择哪一条路我想都可以做到很好,当然要看自己~ 如果是工作,该多在网上论坛上了解下这方面的内容。如果是上研,知道现在web技术里面有这些框架也是应该的。
以下是我总结的框架学习(或者说使用框架开发/控件库开发)的三个阶段,供大家参考:
第一个阶段:会查会用,知道什么框架可以解决什么问题,使用该框架的一般过程是什么,API去哪查(一般官方的下载包中都会含有)。
第二个阶段:可以比较框架中针对所解决的问题的多种实现方式,更进一步的使用框架来解决问题,提高性能,在自己编写的代码中融入JavaSE的面向对象设计思路。
第三个阶段:了解该框架自身的设计思路,查看框架源码,增强对面向对象的理解。
如果你正在尝试做java web项目,使用这几个框架会加快你的开发。学习框架要注意版本的问题,不同的版本使用的方式,提供的接口可能不同(如struts1.x和 struts2.x可以说完全不同)。不同的版本需要使用的包也不同,在各个框架官方主页提供的发布包中有详细的说明。
这方面的书在图书馆或者书店里都是一抓一大把的,而且随着这些框架版本的更新,书经常是没有版本更新快的。根据个人翻阅,网上评论推荐几本书,如果需要看的话还是看个简单易懂道理清楚的书为好。
《深入浅出Hibernate》夏昕,曹晓钢,唐勇 电子工业出版社
网友推荐,没翻过
《Hibernate实战(第二版)》 (德)Christian Bauer;(澳)Gavin King 杨春花;彭永康;俞黎敏译人民邮电出版社
科科学长推荐,看过,挺全面的,翻译版的常有错误,读来让人胃疼。喜欢看原版的可一试
《深入浅出struts2》(加)库尼亚瓦(Kurniawan,B.) 著,杨涛 等译 人民邮电出版社
看过,入门挺好
《Spring 攻略》(美)Gary Mak,Josh Long,Daniel Rubio 著陈宗恒,姚军,蒋亮 译 人民邮电出版社
科科学长强力推荐
《Spring in Action(第二版)》(美)沃尔斯,(美)布雷登巴赫 著,毕庆红 等译人民邮电出版社
看过,还行,就是针对的spring版本稍有点低, spring的思想讲的比较清楚
《Enterprise JavaBeans 3.0(第五版)》 Bill Burke, Richard Monson-Haefel著 莫英等译
潇神强力推荐
<相关文章>
2011年Java EE生产力报告
http://sd.csdn.net/a/20101217/284146.html
六. Java学习
有人担心java未来的发展,Java没有停滞,它也在不断进步。况且java只是一个工具,和C、C++一样。工具可以解决问题。
我目前的感觉对java的学习方向大致分为这几类,欢迎补充
<1> Java语言研究
JDK的实现
Java 虚拟机
Java 中间字节码生成
。。。
<相关文章>
Java深度理解——Java字节代码的操纵
http://sd.csdn.net/a/20101221/286071.html
<2> Java桌面程序开发,底层开发
swing组件(现不常用)
java可以进行底层开发,性能无法与汇编等语言相媲美。
<3> Web开发
Java web, Java EE,JavaScript
(关于javascript部分的参考书目等力神出手。)
现在Java EE与.Net平分秋色
<4> 手机开发
Java ME,Android开发
面向对象的思想始终贯穿这几个学习方向。如果你想深入学习java或者想用java作为你的第一手语言工具,那么先从面向对象开始,深入的理解它,会有很多收获!
<相关文章>
[热议]Java是新的COBOL吗?
http://sd.csdn.net/a/20111109/307231.html
警惕Java,迎来JavaScript
http://sd.csdn.net/a/20100928/279991.html
到最后,我想说我在Java Web框架上还是走了不少弯路的,也不希望还有人还像我一样由于当初的盲目而在框架上面花费大量的时间和精力。弯路转回来,才发现自己原来一直停在原处,不过也没什么,晴姐说,了解自己,这也是个不断进步的过程。
其实虽然写了这些,每一点自己了解也并不深入透彻,发现要学的东西还很多哈。也希望你我都早日走进计算机科学的大门。
2012年6月30日 于 旺园