您的位置:首页 > 编程语言 > Java开发

如何学习Java

2008-12-03 23:19 218 查看
转自http://5iluluo.cn/blog/article.asp?id=29,感谢原文作者。

一. 如何学习Java
如果您是Java的初学者,最想要知道的莫过于如何才能学好Java. 以下是我的几点建议.
奠定Java语法基础
学习Java的第一步,就是学会使用Java这个程序语言来编写程序,而学习程序语言的第一步,就是熟悉其语法的使用. 程序语言就是一门语言,所不同的是这种语言是用来与计算机沟通的,所以若要熟悉语言,使用的方法莫过于多看别人写的程序,了解别人是如何使用Java来解决问题的,然后针对同样的程序进行练习,并从实例中测试自己是否真正了解到如何解决问题.
运用基本的J2SE API
除了Java语言本身的语法之外,懂得运用J2SE的API也是一个必要的课题,然而在这么多的API下,您必然想知道哪些API是必要或常用的. 我的建议是先掌握字符串处理、异常处理、容器(Container)、输入/输出(I/O)、线程(Thread)这几个主题.
API的内容庞大,没有任何一本书可以详细讲解每个API如何运用,您也不需要将API背诵下来,您要懂得查询API文件说明. 虽然API文件都是英文的,但基本上只要有基本的英文阅读能力就足以应付查询需求. 以J2SE 5.0来说,您可以从下面的网址查询到API文件说明: http://java.sun.com/j2se/1.5.0/ docs/api/.
使用搜索引擎
作为一个开发人员,懂得使用搜索引擎来寻找问题的答案是一项必要的能力. 我习惯使用Google(http://www.google.com/),几个简单的关键词通常就可以为您找到问题的答案.
加入论坛参与讨论
在学习的过程中,如果有人可以共同讨论,将会加速学习的速度. 您可以找一个讨论区并摸索当中的资源,这可以省去不少的学习时间. 在中文讨论区中我建议多参与"Java技术论坛" (http://www.javaworld.com),论坛上有相当丰富的资源,您可以从“新手版FAQ目录”开始,并记得在发问之前多使用"全文检索"功能,搜寻论坛上是否已有类似的讨论.
学习地图
在学习完基本的J2SE之后,您会想要实际应用Java来编写程序,如果您需要编写窗口程序,可以学习Swing窗口设计; 如果您要编写数据库相关软件,可以学习JDBC; 如果您想要朝Web程序发展,可以学习JSP/Servlet; 如果您想要学习手机程序开发,可以朝J2ME方向学习.

在Java的官方网站上,有一篇Java技术概念地图(Java Technology Concept Map),其中以图表的方式描绘出了各种需求下的学习方向参考. 您可以浏览该图表来了解Java各个技术主题之间有什么关联,以确定您未来学习的方向. Java技术概念地图的网址是:
http://java.sun.com/developer/onlineTraining/new2java/javamap/intro.html

二. 如何学Java
学习java入门最好的书仍然是core java,不要去看thinking in java,那本书又厚又烂,里面的例子全是些toy程序,毫无意义,作者照java doc宣科. 另外,Effective Java也不像传说中的那样,实际上里面的内容jdk doc和java tutorial上面基本上都有,只不过做了个总结,方便那些不愿意仔细阅读java doc的人.

PS: 台湾的那个蔡XY绝对是个误导人的恶心家伙,就知道推荐oreilly的垃圾书,oreilly出的java方面的好书只有那么一点点,映象中有Java Threads、Java I/O、Java Swing,其他皆垃圾,尤其是那本EJB,比Ed Roman的差了不止一个档次.
另外,无论你从事J2ME,J2SE,J2EE, GoF95都是必看的,如果做游戏开发,A*搜索和常用算法是必须知道的,做J2EE那些框架不一定跟着潮流走,其实真正大型的项目根本不可能用什么spring、hibernate之类的框架,如果用了那些通用框架,只能说明架构师太无能了,不能根据项目的需求写出适合项目的框架.
至于学会了java语言如何学习j2me或者j2ee,此类文章已经很多,没必要重复,只想说说没怎么被人说到的问题.
最后,java是个优秀但十分无趣的语言,其长处仍然只局限在BS企业级应用,但内存模式导致很多应用不能用java开发. 我以前用的东西都太杂了,近来也计划深究一下java用过JCreate,JBuilder和Eclipse,最喜欢Eclipse,但是如果刚入门写Hello World之类的小测试程序,不妨用占用资源最小的JCreate.

三. 学习Java
Java发展到现在,按应用来分主要分为三大块: J2SE,J2ME和J2EE. 这三块相互补充,应用范围不同.
J2SE就是Java2的标准版,主要用于桌面应用软件的编程;
J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;
J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统.

先学习J2SE
要学习j2ee就要先学习j2se,刚开始学习j2se先建议不要使用IDE,然后渐渐的过渡到使用IDE开发,毕竟用它方便嘛. 学习j2se推荐两本书,《java2核心技术一二卷》,《java编程思想》,《java模式》. 其中《java编程思想》要研读,精读. 这一段时间是基本功学习,时间会很长,也可能很短,这要看学习者自身水平而定.
不要被IDE纠缠
  在学习java和j2ee过程中,你会遇到五花八门的IDE,不要被他们迷惑,学JAVA的时候,要学语言本身的东西,不要太在意IDE的附加功能,JAVA编程在不同IDE之间的转换是很容易的,过于的在意IDE的功能反而容易耽误对语言本身的理解. 目前流行的IDE有jbuilder,eclipse和eclipse的加强版WSAD. 用好其中一个就可以了,推荐从eclipse入手j2ee.因为Jbuilder更适合于写j2se程序.
选择和学习服务器使用配置
  当你有了j2se和IDE的经验时,可以开始j2ee的学习了,web服务器: tomcat,勿庸置疑,tomcat为学习web服务首选. 而应用服务器目前主要有三个: jboss、weblogic、websphere.有很多项目开始采用jboss,并且有大量的公司开始做websphere或weblogic向jboss应用服务器的移植(节省成本),这里要说的是,学习tomcat和jboss我认为是首选,也是最容易上手的.学习服务器使用配置最好去询问有经验的人(有条件的话),因为他们或许一句话就能解决问题,你自己上网摸索可能要一两天(我就干过这种傻事),我们应该把主要时间放在学习原理和理论上,一项特定技术的使用永远代替不了一个人的知识和学问.
学习web知识
如果你是在做电子商务网站等时,你可能要充当几个角色,这是你还要学习:
Html,可能要用到dreamwave等IDE.
  Javascript,学会简单的数据校验,数据联动显示等等.
J2EE API学习
  学习j2ee API和学习服务器应该是一个迭代的过程.
  先学习jsp和servlet编程,这方面的书很多,我建立看oreilly公司的两本《jsp设计》和《java servlet编程》,oreilly出的书总是那本优秀,不得不佩服.
  学习jdbc数据库编程,j2ee项目大多都是MIS系统,访问数据库是核心. 这本应属于j2se学习中,这里拿出来强调一下.
  学习jndi api,它和学习ejb可以结合起来.
  学习ejb api,推荐书《精通ejb》.
  经过上面的这些的学习,大概可以对付一般的应用了.
  有人说跟着sun公司的《j2ee tutorial》一路学下来,当然也可以.
学习ejb设计模式和看代码(最重要)
  设计模式是练内功,其重要性可以这么说吧,如果你不会用设计模式的话,你将写出一堆使用了ejb的垃圾,又慢又是一堆bug,其结果不如不用ejb实现(ejb不等于j2ee).
  无论学习什么语言,都应该看大量代码,你看的代码量不到一定数量,是学不好j2ee的.

  目前有很多开源的工程可以作为教材:
jive论坛
petstore sun公司
dune sun公司
等等,研读一个,并把它用到自己的工程中来.
J2EE其他学习
  当你渐渐对j2ee了解到一定深度时,你要开始关注当前领域中的一些技术变化,J2ee是一块百家争鸣的领域,大家都在这里提出自己的解决方案,例如structs,hiberate,ofbiz等等,学习这些东西要你的项目和目标而定,预先补充一下未尝不可,但不用涉及太深,毕竟学习原理和理论是最最重要的事.
目前常见j2EE API
JavaServer Pages(JSP)技术1.2
Java Servlet技术2.3
JDBC API 2.0
Java XML处理API(JAXP)1.1
Enterprise JavaBeans技术2.0
Java消息服务(JMS)1.0
Java命名目录接口(JNDI)1.2
Java事务API(JTA) 1.0
JavaMail API 1.2
JavaBeans激活架构(JAF)1.0
J2EE连接器体系结构(JCA)1.0
Java认证和授权服务(JAAS)1.0
  学习上面的某些API要以你的项目而定,了解所有他们总之是有好处的.
 
上面印证了大家说的一句话,java语言本身不难学,但是技术太多,所以学java很费劲. 回想一下,基本上每个初学者,在刚学习java的时候可能都会问别人这么一句话,你怎么知道的哪个方法(api)在哪个包里的? 呵呵,无他,唯手熟尔.

四. Java学习
1. JAVA学习路线
1.1 基础语法及JAVA原理
基础语法和JAVA原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的. 学习JAVA也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余. 参加SCJP(SUN公司认证的JAVA程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习; 原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉JAVA基础知识; 但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的. 获得"真正"的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走.
1.2 OO思想的领悟
掌握了基础语法和JAVA程序运行原理后,我们就可以用JAVA语言实现面向对象的思想了. 面向对象,是一种方法学,是独立于语言之外的编程思想,是CBD基于组件开发的基础,属于强势技术之一. 当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单.
使用面向对象的思想进行开发的基本过程是:
●调查收集需求.
●建立用例模型.
●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型.
●细化分析模型到设计模型.
●用具体的技术去实现.
●测试、部署、总结.
1.3 基本API的学习
进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的"不需要重新发明轮子". 我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它. 那么这些类中究竟提供了哪些方法给我们使用? 方法的参数个数及类型是? 类的构造器需不需要参数? 总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧. 他们只能提供文档给我们查看,JAVA DOC文档就是这样的文档,它可以说是程序员与程序员交流的文档.
基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等. 我们又把它成为类库. 熟悉API的方法一是多查JAVA DOC文档,二是使用JBuilder/Eclipse等IDE的代码提示功能.
1.4 特定API的学习
JAVA介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API. 如果你做界面开发,那么你需要学习Swing/AWT/SWT等API; 如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等; 如果你做WEB开发,就需要熟悉Servlet等API啦. 总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API.
1.5 开发工具的用法
在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对JAVA技术本身的注意力. 过了这一阶段你就可以开始熟悉IDE了.
程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错. 在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松. 应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具.
从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑.
JAVA开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种,而Eclipse、JBuilder占有的市场份额是最大的. JBuilder在近几年来一直是JAVA集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的JAVA IDE大战中,以其快速的版本更新击败IBM的Visual Age for JAVA等而成就一番伟业. IBM在Visual Age for JAVA上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓"柳暗花明又一村". 浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力.
1.6 学习软件工程
对小型项目而言,你可能认为软件工程没太大的必要. 随着项目的复杂性越来越高,软件工程的必要性才会体现出来. 参见"软件开发学习路线"小节.

2. 学习要点
确立了学习路线之后,我们还需要总结一下JAVA的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊.
2.1勤查API文档
当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行. 这时候你要使用"java doc"工具(包含在JDK中)生成标准的JAVA DOC文档,供同行使用. J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外. J2SE DOC文档官方下载地址: http://java.sun.com/j2se/1.5.0/download.jsp,你可以到Google搜索CHM版本下载.也可以在线查看: http://java.sun.com/j2se/1.5.0/docs/api/index.html.
对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍.
当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现. 使用步骤一般如下:
●找特定的包,包一般根据功能组织.
●找需要使用类,类命名规范的话我们由类的名字可猜出一二.
●选择构造器,大多数使用类的方式是创建对象.
●选择你需要的方法.
2.2 查书/Google->写代码测试->查看源代码->请教别人
当我们遇到问题的时候该如何解决?
这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你. 可以先找找书,到Google中搜一下看看,绝大部分问题基本就解决了. 而像"某些类/方法如何使用的问题",DOC文档就是答案. 对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象. 而有的问题,你可能需要直接看API的源代码验证你的想法. 万不得已才去请教别人.
2.3学习开源软件的设计思想
JAVA领域有许多源代码开放的工具、组件、框架, JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛. 这些可是前辈给我们留下的瑰宝呀. 入宝山而空手归,你心甘吗? 对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把. 分析开源软件其实是你提高技术、提高实战能力的便捷方法.
2.4 规范的重要性
没有规矩,不成方圆. 这里的规范有两层含义. 第一层含义是技术规范,多到http://www.jcp.org下载JSRXXX规范,多读规范,这是最权威准确最新的教材. 第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式; 同时,没给程序作注释,以显示你的编程功底是多么的深厚. 这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆. JAVA编码规范到此查看或下载http://java.sun.com/docs/codeconv/.
2.5 不局限于JAVA
很不幸,很幸运,要学习的东西还有很多. 不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症. 幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿.
JAVA不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: