第一篇:我学习使用java的一点体会(定稿)
2002年初,因为公司的业务需要而学习java,并应用java开发项目。由于项目时间紧,没有充裕的时间系统学习java,对java的学习只能是项目需要用什么,就学什么,这种学习方法的上手快,但不扎实,在以后的工作中,因为java学的不扎实,吃了不少苦头。现在我学习应用java已经有一年半的时间,对java已经有了一定的体会,把自己的体会写出来,供网友分享。
以我个人的经验,学习java应分以下几个阶段:
java的语法学习
面向对象观念的建立
java基本类库的学习
学习设计模式
应用设计模式
经过大量的实践,可以设计模式
以上六个阶段,其中前三个阶段是针对java的,但java中,在很多设计模式的应用,同时有很多功能都支持设计模式,所以不懂设计模式的人是不会很好的应用java做开发的。第4、5个阶段的学习在前三个阶段的基础上,学习、应用成功的经验。从而进入第六个阶段,在软件设计这个领域尽情发挥。本人受能力所限,还处在第4个阶段的学习过程,所以会对前四个阶段说明。第五、六个阶段只是我根据我自己的知识做的推断,还没有经验无法说明。
在对这些学习阶段进行阐述之前,我先说一下我的学习方法。在学习新的知识时我通常是按以下三个阶段学的
理论学习。通过对理论的学习,尽量了解新知识的概念;学习之后只是粗略的了解概念,不能和实际很好的结合。
演绎阶段。根据理论学习的知识,考虑在什么场合下可以应用这个新知识,哪些地方已经应用了这个概念,建立对新知识的感性认识。
归纳阶段。从一个更深的层次理解理论。
以下根据java的六个学习阶段阐述我的体会,而每个阶段将按照理论学习、演绎和归纳三个小阶段讨论。
java语法的学习
语法学习的理论学习阶段是最容易的阶段,70%以上的java书主要介绍的就是java语法,随意买来一本,通读一下就可以,主要理解以下内容:(1)数据类型,(2)操作符,(3)控制流程,(4)类和类再生,(5)包和接口,(6)异常操作。
在理论学习阶段,不必过于注重细节,只要对java的基本语法有一个整体认识,能读懂示例的源代码就可以了。
下一步就是演绎阶段,应用所学的语法知识,编写简单的程序。最好凭自己的记忆,将各语法要点都用一遍(编写代码最好用notepad),对自己不熟悉的语法要重新阅读,用编译器去检查语法错误。这个阶段的目标是脱离书本以及java API能编写简单的程序,阅读一个java源代码能说出执行结果。
完成这个阶段的学习,参加scjp的考试,应该获得较高的成绩。
在演绎阶段的基础上,根据自己犯过的错误,总结一下java的难点。重新阅读语法书,将一些自己不是很清楚的概念重新整理一下,这时你对java语法的理解比第一次阅读时更深了。
我在刚开始学java时,只是粗略的看看语法书,就开始编程序了,遇到不懂的就重新阅读语法书,这样,完全可以成为一个合格程序员,但是当我成为team leader时,为了培训组员java编程,却发现自己脱离了java语法书和Java API,竟然会的不多(java集成开发工具有提示功能),为了培训,我又重新学了一遍java语法,很有收获。
其实一个优秀的程序员,不但要能写出好的程序,更重要的是,对所写的程序能说的清楚:(1)说清楚程序的功能(2)说清楚程序的结构。而说清楚程序的结构的基础是对java的语法要熟悉。想成为优秀的程序员,一定要在学习语法的基础上,不断实践,不断总结,最终能脱离语法书,将java语法系统的讲解清楚。
面向对象观念的建立
Java是面向对象的开发工具,使用java开发应用时,一定要懂面向对象编程的概念。在学过了java语法之后,应该建立OOP的概念。
理论学习阶段,首先应当理解class和object,了解class、interface、abstract class,理解OOP的继承性,封装性(public, protected,private)和多态性。然后应当熟悉UML,可以阅读一些UML的简单资料,基本上了解类图、状态图和时序图就可以了。
演绎阶段,对OOP的实践。而OOP的成功范例应该是常见的23种设计模式。这个阶段需要阅读并体会设计模式UML图和示例代码,我推荐《java与模式》这本书,也可以访问http://。不必读懂模式,只需要读懂每个模式的UML和代码。
归纳阶段,通过演绎阶段的学习,体会OOP带来的好处——对扩展开放,对修改关闭。同时学会如何在java中使用OOP的概念设计。
我在使用Java编程初期,一直使用面向过程的思想编程,对class、interface、abstract class以及public、protect、private的存在并没有理解,直到我阅读了Gof的设计模式,才理解OOP的优点。但是Gof的设计模式太晦涩了,我第一次读时,仅仅是有了面向对象的概念,而对设计模式并没有理解。相反《java与模式》容易读一些,但《java与模式》一书的废话多一些,有很多内容可以不读。
java基本类库的学习
曾经面试过一些java程序员,我出的题目是在使用java时,经常用到哪些类,在哪个包里。很少有人能答好,甚至有人做了2年java程序都没有回答出,他们会用java,但必须依赖工具(指java集成开工具),我觉得他们可以编写出程序,但不能编写出特别好得程序。
我认为作为java程序员必须掌握java类库的两个包:java.lang和java.util这两个包。java.lang包提供的是java编程要用到的基本类包,java程序员天天在用,无非是看别人如何用,自己就如何用,但很少有人去总结一下,比如String 和StringBuffer这两个类有什么差别,应该有很多java程序员说不出来。另外Vector和HashMap这两个类大家都在用,有多少人能说清楚Vector和HashMap继承了哪些类,实现了哪些接口呢。
理论学习。认真阅读java API的以下内容:java.lang包中的String,StringBuffer,Number,Double,Float,Byte,Short,Integer,Long,Character,Boolean,Process,Runtime,System,Object,Cloneable,Class,ClassLoader,Thread,ThreadGroup,Runnable,Package类或接口。java.util包中的Collection,list,Set,ArrayList,LinkedList,Hashset,TreeSet,Iterator,Map,SortedMap,HashMap,TreeMap,Comparator,Arrays,Enumeration,Vector,Stack,Dictionary,Hashtable,Properties,StringTokenizer,BitSet,Date,Calendar,Locale,Random,Observer,Observable类和接口。主要理清楚这些类或接口的继承关系、主要功能。
演绎阶段。通过阅读代码,练习编程,学习并应用这些类和接口。其实这些类的大部分是经常用的,无非对这些类和接口说不清楚。在这些类中,对java.lang和java.util包中的类,最好将各个方法练习使用一次。而对java.util包中Collections framework中的类,最好理清楚各个类和接口之间的关系。常用的类的方法我就不具体介绍了,我举一个使用Observer和Obserable 的例子(摘自《The Complete Reference Java 2 》)。在Observer和Obserable中,java实现了对设计模式Observer的支持。
Watcher.java代码
import java.util.*;
class Watcher implements Observer
{
public void update(Observable obj, Object arg)
{
System.out.println(“Update()called, count is ” +
((Integer)arg).intValue());
}
}
BeingWatched.java代码
import java.util.*;
class BeingWatched extends Observable
{
void counter(int period)
{
for(;period >=0;period--)
{
setChanged();
notifyObservers(new Integer(period));
try
{
Thread.sleep(100);
} catch(InterruptedException e)
{
System.out.println(“Sleep interrupeted”);
}
}
}
};
ObserverDemo.java代码
public class ObserverDemo
{
public static void main(String[] args)
{
BeingWatched observed = new BeingWatched();
Watcher observing = new Watcher();
observed.addObserver(observing);
observed.counter(10);
}
};
执行结果
Update()called, count is 10
Update()called, count is 9
Update()called, count is 8
Update()called, count is 7
Update()called, count is 6
Update()called, count is 5
Update()called, count is 4
Update()called, count is 3
Update()called, count is 2
Update()called, count is 1
Update()called, count is 0
归纳阶段。总结使用经验,体会这两个包中类的继承关系,对设计模式的支持(如Iterator本身就是设计模式,同时也是工厂方法模式的应用),了解这些类提供的所有功能,比较功能相近类的异同。将这些类的api记在心中。
虽然集成开发环境支持方法提示功能,但我个人认为,对于java.lang和java.util这两个包的api应当熟记于心,java的其他类库在使用时可以查找api。当然如果从事不同的开发,对其他类库应当有相应的了解,如开发swing,就应当对javax.swing包了如执掌,开发b/s结构的程序,就要了解javax.servlet,依个人的应用来开发了。
本文的上一篇发表之后,承蒙各位网友关注,发表了很多评论,我感觉很多人对我写得文章有误解,大概是我表述不清楚的原因吧。这篇文章是对上一篇的补充,以一个示例阐述了解collection框架的重要性。
我在半年以前写过一个函数printAll(Vector vector),具体代码如下
import java.util.*;
public class UtilTool
{
public static void printAll(Vector vector)
{
System.out.println(“the Collection is vector”);
System.out.println(vector.getClass().toString());
Iterator iterator = vector.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next().toString());
}
}
public static void main(String[] arg)
{
Vector vector = new Vector();
vector.add(new Integer(1));
vector.add(new Integer(2));
vector.add(new Integer(3));
UtilTool.printAll(vector);
}
}
printAll这个函数设计的很不好——不够通用,假如,还想打印HashSet类型的数据,你就必须重载printAll函数,代码如下
public static void printAll(HashSet hashSet)
{
System.out.println(“the Collection is hashSet”);
System.out.println(hashSet.getClass().toString());
Iterator iterator = hashSet.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next().toString());}
}
printAll函数的代码重用率低。其实Vector和 HashSet都是Collection的实现,可以将printAll的参数类型改为Collection,而不必重载。代码如下
public static void printAll(Collection collection)
{
System.out.println(“the Collection is collection”);
System.out.println(collection.getClass().toString());
Iterator iterator = collection.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next().toString());
}
}
这样就可以删除printAll(Vector vector)和printAll(HashSet hashSet)函数了。
在设计函数时,应优先使用接口,而不是类。当然必须了解Vector 是Collection的实现。
如果对Collection的继承关系不清楚,很容易滥用重载,以下代码是一个有问题的代码(摘自Effective Java Programming Language Guide)
public class CollectionClassifier{
public static String classify(Set s){
return “Set”;
}
public static String classify(List l){
return “List”;
}
public static String classify(Collection c){
return “Unknow Collection”;
}
public static void main(String[] args)
Collection[] tests = new Collection[]{
new HashSet(),new ArrayList(),new HashMap().values()
}
for(int i=0;i System.out.println(classify(test[i])); } } 程序输出的是三次“Unknown Collection”,而不是你期望的打印“Set”,“List”以及“Unknown Collection”。这个程序错误的根源是对Collection层次结构不熟悉,而滥用重载导致。 这篇文章仍然是对《我学习使用java的一点体会(3)》的补充。 我使用java开发一年多,使用的应该还算熟练,最近在阅读《设计模式》和《Effective Java》时,又重新学了一下java的基本类库,对编程思想有了新的认识。java的基本类库是由专家设计的,理解基本类库一方面可以增加自己的开发效率,另外一方面可以学学专家的设计思路。在java的基本类库中,使用了很多的设计模式,在很多方面提供扩展机制,方便的支持设计模式。可以说java的基础类库,将面向对象设计的Open-Close principle(Software entities should be open for extension,but closed for modification)发挥到了极致。 在java的基础类库中,有些类设计的是为了给java开发者提供工具,直接让开发者使用的,有些类是专门为继承而设计的。对于第一种类型的类,使用集成开发工具很容易就能上手使用,而对于第二种类型的类,不主动去学它的API,很难掌握它的使用。我举一个例子。java 2 提供了对Proxy模式的支持,在以下示例中,演示了如何使用代理模式(摘自《java与模式》)。主要体会java.lang.reflect.InvocationHandler的用法 package com.javapatterns.proxy.reflect; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.lang.reflect.Method; import java.util.Vector; import java.util.List; public class VectorProxy implements InvocationHandler { private Object proxyobj; /** @link dependency */ /*#Proxy lnkProxy;*/ public VectorProxy(Object obj) { proxyobj = obj; } public static Object factory(Object obj) { Class cls = obj.getClass(); return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new VectorProxy(obj)); } public Object invoke(Object proxy, Method method, Object[] args)throws Throwable { System.out.println(“before calling ” + method); if(args!= null) { for(int i=0;i { System.out.println(args[i] + “"); } } Object o = method.invoke(proxyobj, args); System.out.println(”after calling “ + method); return o; } public static void main(String[] args) { List v = null; v =(List)factory(new Vector(10)); v.add(”New“); v.add(”York"); } Java开发记录 刚开始学java,有很多不明白不是很多是几乎全部,我把自己每学到一点都总结下来让自己感觉更充实也希望以后能为初学者提供帮助。 Java培训第一天 今天正式开始培训,我们满怀喜悦,感觉java一定是一门很高深的技术,幻想着可以写出很多好玩的游戏,做出很多漂亮的网站,可是一开学就蒙了我根本什么都听不懂,虽然假期看了一些java基础,但是老师高浓缩的术语还是让我一头雾水,但还是有那份激情吧,我要学会,第一天就是在迷茫中度过的。老师一直在说现在不懂没关系,以后用长了就好了。每天早上8:30到12:00,下午2:30到6:00晚上8:00到10:30每天接近10个小时的学习还是很充实的,我信心倍增。I believe myself。 Java培训第二天 今天继续讲java基础,老师的节奏很快,说不要把 (前几天耽误了,以后补上) Java培训第七天 这几天已经基本上走出了前几天的迷茫,感觉还是挺不错的,由开始的什么都不会到现在的知道老师想让我们干什么感觉进步还是满大的,我身边由一个考上北京邮电大学的姐给了我很大的帮助,还有很多学长也很厉害。大家一起学习,我们3个人是大一的也是最没有基础的,有学长的带领和老师的指导进步很快。感觉知识是时间得来的,在学校里我可能4年都学不会这些东西,我说的是真的起码对我是这样。用了两天的时间装环境,把64位系统装成32位的(老师的演示屏幕不支持64位,没办法,前两天时间不紧)后来用了两天的时间就把java基础讲完了,我是什么都不懂,虽然自学了一些但绝对是九牛一毛,专业术语 面向对象、类、封装、继承、多态、反射、跳转、框架、异常捕获、数据库、接口等等反正我是什么都不会怕什么,我开始看书、百度、问学长(不敢问老师因为这样的问题太白痴了)。基础讲完了,没感觉有什么长进,但是感觉好像没有原来那么难理解了,花了2个多小时把基础书看了一遍感觉突然懂了的感觉(呵呵)老师把大量的时间花费在让我们敲代码的上,第一个项目testssh2完全是在老师的指导下一个单词敲的,老师给我们讲公司做项目的框架,我听得晕了src层,docs层,sitting层,webroot层我根本听不懂也不知道这能干什么用,一开始学C感觉C很难,觉得很多事情都是无厘头,但是学了java才觉得java才是真正的霸道,我根本什么逻辑都不用考虑,想实现什么直接调用就OK了,感觉真正写类的人才是大牛。!!今天第二遍将框架和第一遍基本上一样不过项目比原先大了很多基本上是公司的使用框架出了test暂时不写之外其他的都要写,老师给我们建一个example我们自己写一个exercise反正是高度一致,但难度还是挺大的写了一天了还是没有写完,发布了在浏览器上出错,各种错误各种调试,直到想吐。没关系错误就是进步,下面我要开始上课了,就写到这吧,加油myself。 刚开始学JAVA时,是因为我们班有几个人选修了这门课,而且还经常在讨论一些JAVA的问题,我在一边听的似懂非懂的,就开始有了学JAVA的想法。那几位同学是我们班学习相对较好的,而且逻辑思维能力理解能力也是我们当中数一数二的,和大家的关系也相当的好。在这样的形势下,我开始了我的JAVA之旅。刚开始学的那阵,和学C、C++的过程差不多,也是借了一些好像讲得比较简单的书,就是那些从变量、数据类型开始讲的书,印象中好像有《21天学会JAVA2》、《循序渐进JAVA2教程》、《JAVA程序设计基础》等等,书名大概是那样,记不太清了。那时我还真以为只要我坚持、用心,21天之后我就能和那几位同学一样的水平了,呵呵!结果当然没有我想像当中的那么好,这有我自己的原因,但其实也有JAVA本身的原因,JAVA语言那么博大精深,没有人可能21天学会的,最多是对JAVA有个比较全面的了解,有那么一点JAVA的编程思想,JAVA的思维方式和面向对象的思维。然而我那几本书没有哪一本是看完过的,理由很简单,以我当时的能力和经验,是不可能看得完全懂的,于是我也在为停地换书,不停地借书。但我依然没有面向对象的思维方式,我的水平也没有提升上去,还是整天在写一些流程控制的小程序。还记得那时我连JDK也不会配置,只能整天在纸上写,写满了一页页的纸,似乎很有成就感,但其实也还是什么都不会。后来想起了学过的汇编语言,用的那些MASM、LINK程序也不用配置什么环境变量,不过要在CMD下面进入到程序所在的目录下面去,这个方法是否也能用在JAVA上呢?于是我试着把程序放到JDK/BIN下面,发现竟然能编译运行了,这不能不说是一个重大发现,我了终于能在电脑上运行JAVA程序了。后来看书看明白了PATH环境的配置,但还是看不懂CLASSPATH的配置,就把PATH配置上去了,这样我的程序也基本上不用放在BIN下面了。有兴趣的朋友不妨也用我的方法一试,呵呵。还有一点想说的是,初学者最好用JDK,简单方便,还能让你了解一些底层的实质性的东西,对你更深入的了解JAVA,以及JAVA如何编译运行很有帮助。接下来就放假了,我们要在机房实习,用VB编写WINDOWS应用程序,我的JAVA学习也就先放在一边了。其实那时的我还是整天沉迷游戏当中,压根就对编程没兴趣,只是为了和那几位朋友能说上几句,证明我也会那么一点而已,所以没有花什么心思在上面,平时有事没事看看而已。学VB的时候感觉还挺简单的,教师上课让我们看浙大的视频,感觉视频里讲的挺好,回来了自己也弄的小东西,其中我其实就做过一个计算器程序,但为了让程序尽量完美,我还是学了不少的,也花了不少心思在上面。现在想来,学VB应该是我开始对编程产生兴趣的时候,那时的成就感比较强,因为终于能做出一个有界面的功能还算不少的程序来了(相对于我以前用C、C++写的控制台程序)。之所以有这种感觉,我想大概和我C、C++没学好有很大原因,即使是现在,我的C、C++也没感觉,而且还几乎忘得一干二净了。实习的最后是分组做一个综合程序,每5、6个人一组,大家都去找高手组队,这是必然,呵呵,我也不例外!不过可惜,我们班就3、4个高手,我去晚了,级不上队了,还有10多个人和我一样,是没法进高手的队伍里去了。然后就有人叫我组个队,因为我起码还是中等水平的成绩,我一想反正进不了高手队伍了,算了,我就组个队了,能不能做出作业来到时再说了。实在不行让高手来帮下忙应该没问题吧。结果,我们那队人马一个都不动,大家其实都不会,没办法啊,而且平时也都那样习惯了。但总这样也不是个事啊,谁让我当时当了组长了呢?每天的计划和成果我都是糊乱写了就交上去了,然后再慢慢借书看书,把不会的补上去。那一周,我竟然一反常态,游戏也不打了,整天坐电脑前,查资料,看视频,写程序。压力啊!然而连我自己都没想到,我竟然做出一个通讯录程序来了,虽然是七拼八凑、漏洞百出,但也是有模有样,还是我到那时为止最大的一个程序,成就感那是相当地强啊,绝对是自信满满地,我看其他小组的组长似乎也和我一样的感觉,呵呵,原来压力还是很有好处的。实习结束之前,我向大家展示了我们的成果,应该说其实是我的成果了,呵呵,不过可不能让我的那几位组员听到了,要不然……从那以后,我才真正对编程有了兴趣,不过放假了,人也变懒了,一个暑假什么也没学,全打游戏了,现在想来,真有点后悔啊。本来打算那个暑假学VC和JAVA的。开学之后,我步入了大三的生活,我开始选修了VC和JAVA,不过还是以JAVA为主,主要是发现VC太难,老师也就教我们怎么做菜单啊,对话框啊什么的,感觉对编程的原理方面根本不理解,对核心的东西也不知道,后来就一心学JAVA去了。这应该也是我现在C++不行的主要原因吧,不过仔细想想,要是没当初,我现在可能也学不了JAVA的这些东西吧。呵呵,有得必有失,有失必有得啊。话说开学之后,我自己以为自己起码也是看过点JAVA的人,所以老师的课也不怎么听,只是自己去借点书来看看,没有和老师同步,感觉自己高人一等一般,现在想想,当时真是傻子一个,只会狂妄自大,其实根本什么都不会。我当时上的是刘新老师的课,感觉收获是挺大的,主要是他给我们留的那8道作业,通过完成作业,我才知道我很菜,也学会了不少东西,包括一些API的使用。在做那8 道作业的过程中,我不停地到读书馆找资料,光那段时间,我就一共借过不下20本JAVA书。我一般晚上七、八点开始写程序,一直到停电,经常碰到不会的,就又翻资料,想算法,问题要是解决不了,晚上睡觉了也还在想,哪里不对,哪里还需要改进,那段时间我就是这样过去的,现在感觉是我收获最大的时间段之一。事情实在很奇妙,当你苦苦思索的时候就是想不出方案来,等熄灯了在床上想的时候,就想到解决的方案了,那时候真是兴奋莫名啊,真想马上起来,把我的想法付诸实施,但是却停电了,呵呵,只能等到第二天了。现在教JAVA的老师好像已经不止刘新老师了,留的作业怎么样我就不知道了,不过考试的形式听说相当不好,竟考那些概念性的东西,语法性的东西,甚至于有考JAVA的历史的,比如JAVA是什么小组什么时候出于哪种原因而开发出来的等等。我认为这很不好,学JAVA或者更大一点说学编程绝不是学这些东西,虽然说概念语法是必须要会的,但不是主要的,主要的应该是学会那种思维方式,学会用程序去解决问题的能力,能做出一些实际的东西来!我个人认为,用到什么东西,如果不会再去学,这样才有目标、有动力,也才会有成果。你是要学一些概念和语法,但不必去深究,不必去死记硬背,那样就进牛角尖了,中国的教育却常常乐此不疲,你看最大的例子就是关于英语的学习,都成什么样子了,学了这么多年的英语,什么也不会。学程序设计最好的方法是多写些程序,开始可以是一些小程序,之后能力上去了,就可以做些项目了,这是提高能力的最好途径。你会发现,写的东西多了,那些语法什么的,你自然就会了,很多平时你想破脑袋都想不通的问题,现在已经能深刻地理解和运用了,这时候的喜悦是语言难以形容的。当然,看一些高手写的程序也是很有帮助的,你可以了解别人的算法,别人程序的组织形式、还有他对问题的解决方式,有时候你会发现那些相当巧妙的东西,收获绝对不小。8周的选修课上完之后,我的兴趣就更加浓厚了,开始去学多线程和网络编程,不过直到现在我对这两方面还是不太擅长,主要还是当时没看多久,也没怎么看懂。在做完那几道作业之后,我又一次地高估了自己,以为自己是高手了,看来只有无知的人才会盲目,高手也历来不是自封的。后来我又去学JSP,开始学HTML,花了我半个月时间去了解JSP的基本知识,然后找SUN公司的JSWDK,竟然没找到,我当时还不知道现在已经不用这东西了,都在用TOMCAT,主要是图书馆这方面的书太老了,讲的也全是如何用JDK+JSWDK+ACCESS来作一些动态网页开发,所以进度相当慢。后来终于下了TOMCAT安装上去,又不会配置,这东西相当麻烦,要是有人指点的话很快就能配置好,但我当时真是查了好多资料,上网找了好多东西,但是都没有讲得明白的,而且各有各的说法,版本也完全不一样。就这样摸爬滚打,花了不少时间,我终于配置好了TOMCAT服务器,不容易啊。不过因为都是自己弄的,却也了解到了不少东西,也可以说没白费力气。也因此想到一些东西,当自己有不会的东西时,自己要先想想,查查资料,上网找答案,实在不会了再问问高手,或者过来人,这是相当有帮助的,你会明白很多底层的原理性的东西,不要一有不会的就问别人。学了一点JSP以后,我又学HTML去了,后来又去搞网页设计,寒假还学了ASP,然后又用ASP做了几个小网页,真是学的乱七八糟的,也学的一塌糊涂,所以一直到现在,我还在一边学JSP,一边补J2SE的基本知识,整天在这转,没有任何进步了。最不爽的是我是参加了一个科技创新,现在要花很多的时间在那上面,还要看地质方面的东西,了解什么测井的知识,真头疼。真想不干算了,一心学我的JAVA,不过现在还是拖拖拉拉的,一来不想让导师失望,二来不想让我们组长说我太没信义,唉,难办啊!现在的学习已经不像当初那么容易了,要做点东西要想很多,也要花很多时间去弄,而且往往不是只会JAVA就能行的了,还要会HTML、XML、JAVASCRIPT、CSS,还得学会用很多工具,感觉路途很遥远啊,自己好渺小。 我的logic java学习总结 在将近三个月的java学习中,我接触到了编程的乐趣.我热爱java,热爱编程.我将不懈的努力遨游在编程的浩海之中.我将我在java学习中经常出错的地方作个总结列出如下: 1.一个class中只能有一个main方法.2.静态的方法不能调用非静态的方法.若要调用,需要把非静态的方法加上static.3.类名的首字母要大写.字段,变量名,方法名,首单词要小写,其后单词的首字母要大写.包名全小写.并且所有的单词要紧靠在一起.4.声明一个String类型的变量时,其值要用双引号;声明一个char类型的变量时,其值要用单引号.5.“=”是赋值运算符,”==”是关系运算符.所以在if条件结构中,括号内的条件要是boolean类型的.6.Switch结构中,case 后紧接的是”:”.并且每个case后要加上一个break.7.类是对象的模板,对象是类的实体.8.将对象实例化要使用new关键字.9.尽可能的加上注释,并用javadoc生成自己的程序文档.10.“.”操作符后是方法.用法是:对象名.方法名.11.toString()是一个很重要的方法.它返回的是一个字符串.12..length在数组中是属性,在字符串中是方法.13.数组中,声明,分配并赋值的写法有两种: 1变量类型[] 变量名=new变量类型[此处为空] {X, X, X ,X,……};○ 2变量类型[] 变量名=new○ 14.提取字符串中的某一部分subString(beginindex,endindex), Beginindex的位置从0开始, endindex的位置从1开始.15.StringBuffer的功能要比String的强大.16.append()是StringBuffer的方法,不是String的方法. .如何学习Java? 3.1 Java学习路线 3.1.1 基础语法及Java原理基础语法和Java原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习Java也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的Java程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得“真正”的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。 3.1.2 OO思想的领悟掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是 CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。 使用面向对象的思想进行开发的基本过程是: ●调查收集需求。●建立用例模型。 ●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。●细化分析模型到设计模型。●用具体的技术去实现。●测试、部署、总结。 3.1.3 基本API的学习进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的“不需要重新发明轮子”。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查看,Java DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查Java DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。 3.1.4 特定API的学习Java介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟 悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。 3.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以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。 3.1.6 学习软件工程 对小型项目而言,你可能认为软件工程没太大的必要。随着项目的复杂性越来越高,软件工程的必要性才会体现出来。参见“软件开发学习路线”小节。 3.2学习要点 确立的学习路线之后,我们还需要总结一下Java的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。 3.2.1勤查API文档当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用“Javadoc”工具(包含在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文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下: ●找特定的包,包一般根据功能组织。●找需要使用类,类命名规范的话我们由类的名字可猜出一二。●选择构造器,大多数使用类的方式是创建对象。●选择你需要的方法。 3.2.2 查书/google->写代码测试->查看源代码->请教别人 当我们遇到问题的时候该如何解决?这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像“某些类/方法如何使用的问题”,DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看 API的源代码验证你的想法。万不得已才去请教别人。 3.2.3学习开源软件的设计思想 Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。 3.2.4 规范的重要性 没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到http://www.xiexiebang.com下载JSRXXX规范,多读规范,这是最权威准确最新的教材。第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时,没给程序作注释,以显示你的编程功底是多么的深厚。这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。Java编码规范到此查看或下载http://Java.sun.com/docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3.2.2节。 3.2.5 不局限于Java 很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。如学习Java集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是“需要的时候再学”的原则。 4.结束语需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在Java神殿之外的朋友有所帮助的话,笔者也欣慰了。哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了。最后奉劝各位程序员尤其是MM程序员,完成工作后赶快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比……第二篇:学习java的一些初步体会
第三篇:我的JAVA学习经历
第四篇:我的java学习总结
第五篇:java学习