java学习流程

I

第一阶段:
    JAVA语言基础知识。包括异常、IO流、多线程、集合类。
要求:异常------掌握try-catch-finally的使用
        
IO流------掌握字节流、字符流和对象序列化的处理.。熟练使用各种输入、输出流类
(InputStream、OutputStream、FileInputStream、FileOutputStream、DataInputStream、DataOutputStream、BufferedInputStream、BufferedOutputStream、Reader、Writer、InputStreamReader、OutputStreamWriter、BufferReader、BufferedWriter、ObjectInputStream、ObjectOutputStream)。
多线程-------掌握多线程实现的两种实现方法,分别是继承Thread类与实现Runnable接口。理解线程间的同步与互斥。
集合类-------掌握Set、Collection、Map、List、Iterator、Enumeration接口的使用,掌握HashSet、ArrayList、Vector、HashMap、HashTable类的使用。
另外-------理解Unicode、GB2132、GBK、UTF-8、ISO8859编码方式。
了解javase1.5新增的内容,元数据,泛型之类的
自己的体会:
    1、Iterator可以删除元素,而Enumeration不能;
    2、Vertor可以线程同步,安全,但效率较低,而ArrayList不同步,效率高,使用ArrayList创建一个大小固定的List,运行比其他的list要快;
    3、List是一个能包含重复元素的已排序的Collection,有时也称序列。和数组一样,都基于0开始的。
   List接口是由Arraylist类,LinkedList类和Vector类实现的;.
   Collections类是用来操纵List的,有reverse,fill,copy,max,min,binarySearch等等方法.
   4、Set是没有重复元素的,集合框架含有set的两种实现:HashSet和TreeSet。
     HashSet把它的元素存储在哈希表中,TreeSet把它的元素存储在树中。可以使用HashSet从ArrayList删除重复
   5、Map把键和值联系起来,不包含重复的键(每一个键只能映射到一个值,即是一对一的关系,这称为一对一关系)。Map和Set的不同之处在于Map包含键和值,而Set只包含键。HaspMap 类和TreeMap类实现了Map接口. HashMap把它的元素存储在哈希表中,TreeMap把它的元素存储在树中。

第二阶段:
    JAVA网络编程。包括Socket、RMI、HTML、XML、JSP、JavaBean、Servlet、EJB。
要求:Socket--------掌握java.io包中的套接口类和服务器套接口类的使用。
          RMI--------掌握RMI基本工作原理、掌握定义远程服务接口类、远程接口类、客户端调用类和部署、编译RMI应用程序
          HTML--------了解HTML语言的语法、各种标签。
          XML--------掌握XML语言的语法、DTD、Schema。
          JSP-------掌握JSP2.0语法、隐含对象、EL、JSTL1.1、JSP自定标签。
          JavaBean-------理解JavaBean的特点和事件模型。
          Servlet---------掌握HTTP协议、Servlet工作过程、Servlet会话跟踪、Servlet过滤器、Serlvet事件侦听器、配置web.xml。
          JMS,还有Sax,dom了解一下,
          另外-------学习过程中学会使用Tomcat、JBoss服务器,学习使用myeclipse,dreamweaver、ant开发工具。
另外,关注一下EJB3.0

第三阶段
流行MVC架构和Java对象持久化技术。包括Struts、Spring、Hibernate、JSF。
要求:MVC-------理解MVC设计模式、处理过程。
          Struts-------理解Struts实现MVC的机制、工作流程。掌握配置Struts应用、Struts控制器组件、Struts视图组件、Struts应用的国际化、Validator验证框架、异常处理、Struts标签库。
          Spring-------掌握控制反转(IoC)、面向方面编程(AOP)、命名服务(JNDI)、事务服务(JTA)、邮件服务(JavaMail)、持久化服务(DAO、JDBC、ORM)、远程服务(RMI)。
          Hibernate--------理解ORM,掌握映射对象标识符、映射关系(一对多、多对多、一对一)、映射类型、检索策略、检索方式、数据库事务与并发、管理Hibernate的缓存。  
           JSF-------理解受管理Bean、导航、标准的JSF标签、转换和验证、事件处理、子视图和Tiltes、自定义组件。
学习过程:先学习Struts,再学习Hibernate,最后学Spring。
了解一下:log4j,lucene等开源的项目

 

 

 

II

第一部分:
    JAVA语言基础知识。包括异常、IO流、多线程、集合类、数据库。(切记基础知识一定要时时刻刻巩固)
    要求:对java的封装,生命周期等有一定的了解;
          异常------掌握try-catch-finally的使用
          IO流------掌握字节流、字符流和对象序列化的处理.。熟练使用各种输入、输出流类(InputStream、OutputStream、FileInputStream、FileOutputStream、DataInputStream、DataOutputStream、BufferedInputStream、BufferedOutputStream、Reader、Writer、InputStreamReader、OutputStreamWriter、BufferReader、BufferedWriter、ObjectInputStream、ObjectOutputStream)。
          多线程-------掌握多线程实现的两种实现方法,分别是继承Thread类与实现Runnable接口。理解线程间的同步与互斥。
          集合类-------掌握Set、Collection、Map、List、Iterator、Enumeration接口的使用,掌握HashSet、ArrayList、Vector、HashMap、HashTable类的使用。
          数据库-------掌握JDBC API的使用,包括DriverManager类、Connection接口、Statement类和接口、PreparedStatement接口、ResultSet接口。
          还有了解java反射机制,对Java1.5的新功能必须有了解与使用,泛型等。.
          另外-------理解Unicode、GB2132、GBK、UTF-8、ISO8859编码方式。
参考:《Java编程思想》、张孝祥视频教学。

第二部分:
    JAVA网络编程。包括Socket、RMI、HTML、XML、JSP、JavaBean、Servlet。
    要求:Socket--------了解java.io包中的套接口类和服务器套接口类的使用。
          RMI--------掌握RMI基本工作原理、掌握定义远程服务接口类、远程接口类、客户端调用类和部署、编译RMI应用程序。
          HTML--------了解HTML语言的语法、各种标签。
          JSP-------掌握JSP2.0语法、隐含对象、EL、JSTL1.1、JSP自定标签。
          JavaBean-------理解JavaBean的特点和事件模型。
          XML--------了解XML语言的语法、DTD、Schema。
          Servlet---------掌握HTTP协议、Servlet工作过程、Servlet会话跟踪、Servlet过滤器、Serlvet事件侦听器、配置web.xml。
          UML-------掌握用例图、类图、活动图、顺序图、状态图。
          Aglet-------学会安装使用tahiti服务器,掌握Aglet API。[以后再学,在彭老师的项目才会用到]
          开发工具------掌握Rational Rose 、ant 、cvs版本控制、myeclipse、dreamweave等开发工具使用。
          另外-------学习过程中学会使用Tomcat、JBoss/Weblogic服务器
      参考书:《JSP2.0技术手册》林上杰编著;
            《深入体会Java Web开发内幕---核心基础》
      在JSP上不要花太多时间,在时间放在servlet多一些.

第三部分:
    流行MVC架构和Java对象持久化技术。包括webwork、Spring、Hibernate
    要求:MVC-------理解MVC设计模式、处理过程。
          webwork-------理解webwork实现MVC的机制、工作流程。掌握配置webwork应用、webwork控制器组件、webwork应用的国际化、异常处理、webwork标签库。(其实很多遗留系统用的是Struts,但现在越来越少人用了,所以我鼓励你们学webwork,但要必须要了解一下Struts)
          Spring-------掌握控制反转(IoC)、面向方面编程(AOP)、事务服务(JTA)、邮件服务(JavaMail)、持久化服务(DAO、JDBC、ORM)、远程服务(RMI)。
          Hibernate--------理解ORM,掌握映射对象标识符、映射关系(一对多、多对多、一对一)、映射类型、检索策略、检索方式、数据库事务与并发、管理Hibernate的缓存。 
                  学习过程:先学习webwork2,再学习Hibernate,最后学Spring。

          下面的东西有时间了解一下:
          测试/敏捷开发-----关注测试,掌握Junit单元测试框架,以及现在两个流行的mock工具EasyMock/JMock,熟悉其中一种。(提示:测试非常重要,有效的测试可以减少很多开发的时间,当然刚开始觉得不耐烦,好像没有必要写测试代码,一定要说服自己尝试写测试代码,或多或少的) 
          UNIX系统------了解最主要的shell编程,及主要的相关的命令行操作.   
          AJAX-----了解基本的javascript,csss,以及ajax常用的用法,还有JSON框架.
                  (ajax的框架太多,但不要花太多时间去学,因为你不知道公司用不用ajax,而且用的那一框架你没有办法知道,所以懂最基础就可以了) 

  参考书:《webwork in action中文版》
        《精通Struts》、《精通Hibernate》孙卫琴著,
        《Spring技术手册》林信良著
        《JUnit in action中文版》Vincent Massol著的
          书籍只是用来入门的,其他的工具必须多上英文网址,尽量多看一些英文文档,提高自己的水平,同时有空的时候也可以下载的一些开源项目的文档。
          最后一句话:无论什么技术,学了不要以为自己多牛,学技术只是为了更好提高自己做项目的能力以及提升自身的水平。你做的项目效果怎样才能最终看出你自身的水平。

 

 

 

(一)

Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE。这三块相互补充,应用范围不同。

J2SE就是Java2的标准版,主要用于桌面应用软件的编程;
J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;
J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

1)先学习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程序。

2)选择和学习服务器使用配置
当你有了j2se和IDE的经验时,可以开始j2ee的学习了,web服务器:tomcat,勿庸置疑,tomcat为学习web服务首选。而应用服务器目前主要有三个:jboss、weblogic、websphere。有很多项目开始采用jboss,并且有大量的公司开始做websphere或 weblogic向jboss应用服务器的移植(节省成本),这里要说的是,学习tomcat和jboss我认为是首选,也是最容易上手的。学习服务器使用配置最好去询问有经验的人(有条件的话),因为他们或许一句话就能解决问题,你自己上网摸索可能要一两天(我就干过这种傻事),我们应该把主要时间放在学习原理和理论上,一项特定技术的使用永远代替不了一个人的知识和学问。

3)学习web知识
如果你是在做电子商务网站等时,你可能要充当几个角色,这是你还要学习:
html,可能要用到dreamwave等IDE。
Javascript,学会简单的数据校验,数据联动显示等等

4)J2eeAPI学习
学习j2eeAPI和学习服务器应该是一个迭代的过程。
先学习jsp和servlet编程,这方面的书很多,我建立看oreilly公司的两本《jsp设计》和《java servlet编程》,oreilly出的书总是那本优秀,不得不佩服。
学习jdbc数据库编程,j2ee项目大多都是MIS系统,访问数据库是核心。这本应属于j2se学习中,这里拿出来强调一下。
学习jndi api,它和学习ejb可以结合起来。
学习ejb api,推荐书《精通ejb》
经过上面的这些的学习,大概可以对付一般的应用了。
另外一种学习方法:跟着sun公司的《j2ee tutorial》一路学下来,j2ee-tutorial是很不错的入门教材。

5)学习ejb设计模式和看代码(最重要)
设计模式是练内功,其重要性可以这么说吧,如果你不会用设计模式的话,你将写出一堆使用了ejb的垃圾,有慢又是一堆bug,其结果不如不用ejb实现(ejb不等于j2ee)
无论学习什么语言,都应该看大量代码,你看的代码量不到一定数量,是学不好j2ee的,另外看代码也是一个学习别人良好编程习惯和规范的好方法,有时候你意识不到自己的代码写的有多烂,:)

目前有很多开源的工程可以作为教材:
jive论坛
petstore sun公司
dune sun公司
等等,研读一个,并把它用到自己的工程中来。

6)J2ee其他学习
当你渐渐对j2ee了解到一定深度时,你要开始关注当前领域中的一些技术变化,J2ee是一块百家争鸣的领域,大家都在这里提出自己的解决方案,例如 struts,hibernate,ofbiz等等,学习这些东西要你的项目和目标而定,预先补充一下未尝不可,但不用涉及太深,毕竟学习原理和理论是最最重要的事。

7)利用网络资源
java手册 http://www.javaalmanac.com/ 极好的一个在线帮助
开源网站 http://www.sourceforge.net/
J2EE讨论 http://www.theserverside.com/

8)学习极限编程
J2EE项目是多人合作的项目,也是调试很困难的一类项目。如果没有良好的项目规划是不能
做好J2EE项目的,了解和项目开发管理相关的知识也有必要
项目管理:Ant,类似于C语言中make的作用
版本管理:CVS等,例如wincvs,tortoise cvs
单元测试:JUnit,摆脱插入main到类中进行调试的原始方法
压力测试:JMeter,开源工程,简单,易用


目前常见j2eeAPI
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)在哪个包里的?呵呵,无他,唯手熟尔。

 

 

 

(二)

1. 学习MVC,看struts的Best Practices!(apache pet store)从这里就可以开始设计模式和软件结构的实践. 2. 学习持久层的解决方案! 3. 结合ejb看spring...

回复一:

1. 学习jave 学习jsp+javaBean
2. 学习GoF模式, 再学习jive中模式处理设计
3. 学习分层架构:表现层、持久层模式:struts hibernate
4. 学习业务层模式 Ioc依赖注射模式及其应用案例,如JdonFramework和jivejdon3
5. 学习AOP等复杂应用Spring
6. 学习大型企业应用集群分布式计算 缓存应用 分布式事务处理,并发处理,单例和多例POOL性能解决方案等: EJB2或EJB3
7. 学习Evans DDD,揉合所有J2EE所有组件技术,实现围绕对象的快速有效开发,回归对象设计之初。大道复简!

如果你只想摘取最后果实,学习最后一步,例如学习Ruby on Rails等,可能将是拔苗助长,只其然不知其所以然,最后还是和没学一样。

回复二: 我根据我的现在经验,学习J2EE,一定要学好OO,使用OO方法来指导J2EE实战,没有OO指导的J2EE,就是没有思想指导的行动,就是盲动,就象当初如果没有马烈主义思想指导中国,怎么行呢?

学习OO有两个基本的大方面知识,至少是我实战的依据:

1. GoF设计模式, 掌握非业务性质的对象创建和组织.
http://www.jdon.com/designpatterns/index.htm

2. Evans DDD, 掌握业务性质的对象如何创建和组织
Evans DDD介绍
http://www.jdon.com/mda/dddcase2.html
以及DDD讨论:
http://www.jdon.com/jivejdon/query/searchThreadAction.shtml?query=ddd

上述两种思想必须融合在J2EE/JavaEE学习中,分开了,就范了理论脱离实践的错误,最后就很难合在一起.我认为这应该也是当前软件教育培训的基本要点.

回复三: 步骤如下
1. 学习MVC,看struts的Best Practices!(apache pet store)从这里就可以开始设计模式和软件结构的实践.

2. 学习持久层的解决方案!推荐Hibernate!也是看best Practices,然后找项目做!为什么推荐hibernate,是因为hibernate的Api对于数据访问上的描述,还是持久层上的设计解释是非常经典了,我只看了半天就开始用hibernate做项目了!但是真正实际解决持久上的问题的时候确是1个月后,可见hibernate的持久策略是如何的经典.

3. 结合ejb看spring,开始掌握松耦合架构,接触到领域建模,深入研究j2ee核心应用

4. 可以开始纵观流行编程语言,c,c++,py,perl,rb,ror等

5. 总结经验

 

 

 

(三)

又看了一遍javaeye的robin版主的《java从入门到精通》的文章,之前看得时候主要关注他提到的书,而后来发现他推荐的书都不是最经典的,不算太好,就没太在意这篇文章了;
现在又看了一遍,觉得这篇文章推荐的java某一技术所要掌握的精髓非常到位,而自己这几个月来都只是在学习一些鸡毛凤鳞,没有学习本质,常常classpath,classloader,容器等概念弄得浇头烂耳。唉。
学习规划:
一、java基础

Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点:

1.JVM的内存管理

理解了这一点,所有和对象相关的问题统统都能解决 ;

2、JVM Class Loader

理解了这一点,所有和Java相关的配置问题,包括各种App Server的配置,应用的发布问题统统都能解决 ;


打好Java基础标准是,如果去考SCJP认证的话,你应该达到90分以上(或85分以上),这会使得再学习Struts、JavaWeb或Hibernate等高级技术时,不会感到吃力。可以从网上下载一些SCJP题目来考考自己。


二、web编程
1.http协议:robin和很多过来人都说这是网络编程和web编程的基础,理解browser和server如何通信,理解java如何实现http协议简化网络编程;
推荐书籍:stevens的传世之作:《TCP/IP详解》(三卷)
2.《java网络编程》
3.《servlet与jsp核心编程》、《java servlet编程》
4.MVC模型和开源例子学习。
5.tomcat工作原理。


三、开优秀开源代码
sun的java pet store

四、学习J2EE规范的核心技术
1.EJB:跑通helloworld例子;
2.JMS
3.JTA
4.RMI

 

 

 

(四)

学Java一年有余,每每总结时,常常遗憾于学习过程的迂回曲折。好比站在高处俯视蚂蚁搬家,总觉得存在有诸多可疑之处,倘若有人能分享学习过程,那么设想我就不会走那么多弯路,浪费那么多时间。
言归正传,James Gosling 博士亲手设计Java语言,让我们回顾一下吧那个经典瞬间吧。1994年底,James Gosling参加了在硅谷召开的“技术、教育和设计大会”。他报着试一试的心情向与会者演示了Java的功能。他点击了网页上的一个静止的分子结构图标,一条命令通过互联网送到了几百英里外的网站,下载了一段Java小程序,在本地工作站上开始执行。在几秒钟时间里,原本静止的网页上,一个分子图像以三维动画的方式转了起来。
“哇!”James Gosling听到了全场观众的赞叹声。言之于此,联想在JDK中demo包中的例子了吗?如此Java就成为网络最炙手可热的编程语言之一。
 在此我不想再赘述Java在网络安全、可移植性等诸多方面带给我们的惊喜,一切都显得多余。无论如何很多程序员都成她的忠实fans,包括我。当然我写下学习历程的原来不是炫耀自己已经达到某种水平,只想经后来的Java fans分享我的学习历程,并且企望给他们些许的启示吧。
那我们就开始吧。
1、入门教材。
刚开始学习Java的时候一定不要错过两本书,Thinking In Java(<>)和Core Java 2(Java核心技术)。Thinking In Java是Bruce Eckel的经典之作,你可以登陆http://www.bruceeckel.com下载免费版本,另外假如英语水平不是太差的话,推荐看英语原版的。我得承认,看完这本种的时候最大的想法是书的作者是我就好了,因为太经典了,经典的让人想占为己有。本书不仅讲解Java面向对象的基本知道,在很多内容解入Java深层的东西。
 Core Java 2的原出版社是Sun Microsystems,或许大家已经想到了,假如Thinking In Java 更注重“思想”的话,那么Core Java2注重的是应用,你可以在书到找到许许多多的例子来帮助你学习Java。
2、不得不提的建议。
学习伊始,智能的IDE对学习Java是不利的,比较如些智能的Eclipse几乎不用自己写代码,就可以完成学习任何一门语言都不能错过的HelloWord。诚然,几乎没有人现在用提示符下的,javac 、java 命令编译运行代码。对于初期学习的程序员来说,手写代码的过程会使你更快了解Java的结构,加快学习的进度。
3、继续前进。这时候你已经对Java语言有了一定的了解,也可能在做J2EE方面的开发,并接解不少优秀的开源框架,如struts、spring等。你对java.lang包、javax.swing包已经有了相当深入的了解。假如你这时,还经常为“用继承还是用组合”诸如此类问题而因惑的时候,我建议你去看看这个本,Effective Java。这本书提出了实用的57条建议,假如你是一个C++程序员,并且看过Effective C++的话,那么,这本书的Java版本就是它了。Effective Java的作者是Joshua Bloch,又一位大师,JDK的collection框架的主要设计者。
这本书我觉得和编程思想有一些共同的东西,另外给我们提供了实用的建议,不要忘记这本书可是Jolt Award大奖的得主噢。
2005年,Joshua Blosh又出版另一本书Java Puzzlers,假如你不知道下面这段程序的输出结果并且对些充满好奇的话,请你看看这本书,。
public class Foo {
 private Foo(Object o) {
  System.out.println("object");
 }
 private Foo(String s) {
  System.out.println("string");
 }
 public static void main(String[] args) {
  new Foo(null);
 }
}
4、设计模式与重构
也许你对Thinking In Java第十六章 Analysis and Design提出一的问题想进行深入了解的话。看看这本书吧,Design Patterns:elements of reusable object oriented software,大师 Erich Gamma等人的经典之作,或者你已经听说过创建模式,结构模式和行为模式,但如何对一个问题找不到解决方面的时候,这本书将是你的最佳选择。虽然书中代码全是用C++写的,但我想语言只是一种工具,并不妨碍你对设计模式的学习,读完这本书,你就可去用singlton,decorator,command模式去编程了,你将发现它非常有用。
有你做过一些项目,特别看过别人的代码的时候,你是否会提出这样的疑问,我的代码为什么没有别人写的漂亮呢?我的代码修改起来为什么这么麻烦?为什么别人看不懂我的代码?如果你有这样的疑问,你可以去看这本书了Refactoring:Improving Design of Existing Code,作者又是一位顶级大师Martin Fowler,他的主页http://www.martinfowler.com。
5、关于JUnit框架
还有一个不得不介绍的开源框架就是JUnit,这个框架其实在学习Java不久就要了解的,并且和重构有极大的联系。JUnit为我们测试一个类提供方以简单能便的框架,你可通过继承TestCase就可以实现测试类,而方便的Eclipse的JUnit插件使用
非常方便。感谢Erich Gamma (Design Patterns:elements of reusable object oriented software的作者之一)and Kent Beck编写这个框架,网址http://www.junit.org。介绍JUnit的不错的一本书,JUnit In Action。
举个简单例子
public class Calulator
{
public int add(int number1,int number2){
return number + number2}
}
下面测试用例,很简单吧。
import junit.framework.TestCase;
public class TestCalculator extends TestCase {
public void testAdd()
{
Calculator calculator = new Calculator();
int result = calculator.add(10, 50);
assertEquals(60, result);
}
}
就写到这些,未曾想到如此罗嗦的写下这些文字。希望对未来的Java fans有些帮助吧,哪怕只是一点,我已经欢心雀跃了。
末了,提几个忠告:
1、不要买“几天就学有通Java”的书,除非,你有很多钱可以浪费并且不在乎你宝贵的时间。
2、不要怕向别人请教,除非得到别人花了很长时间才明白的问题,并不令你感觉兴奋与快乐。
3、不要吝啬你的经验,一定要与大家分享,除非你忘记了别人是怎么帮助你的。

你可能感兴趣的:(学习流程)