第一篇:我學(xué)習(xí)使用java的一點(diǎn)體會(定稿)
2002年初,因?yàn)楣镜臉I(yè)務(wù)需要而學(xué)習(xí)java,并應(yīng)用java開發(fā)項(xiàng)目。由于項(xiàng)目時間緊,沒有充裕的時間系統(tǒng)學(xué)習(xí)java,對java的學(xué)習(xí)只能是項(xiàng)目需要用什么,就學(xué)什么,這種學(xué)習(xí)方法的上手快,但不扎實(shí),在以后的工作中,因?yàn)閖ava學(xué)的不扎實(shí),吃了不少苦頭。現(xiàn)在我學(xué)習(xí)應(yīng)用java已經(jīng)有一年半的時間,對java已經(jīng)有了一定的體會,把自己的體會寫出來,供網(wǎng)友分享。
以我個人的經(jīng)驗(yàn),學(xué)習(xí)java應(yīng)分以下幾個階段:
java的語法學(xué)習(xí)
面向?qū)ο笥^念的建立
java基本類庫的學(xué)習(xí)
學(xué)習(xí)設(shè)計模式
應(yīng)用設(shè)計模式
經(jīng)過大量的實(shí)踐,可以設(shè)計模式
以上六個階段,其中前三個階段是針對java的,但java中,在很多設(shè)計模式的應(yīng)用,同時有很多功能都支持設(shè)計模式,所以不懂設(shè)計模式的人是不會很好的應(yīng)用java做開發(fā)的。第4、5個階段的學(xué)習(xí)在前三個階段的基礎(chǔ)上,學(xué)習(xí)、應(yīng)用成功的經(jīng)驗(yàn)。從而進(jìn)入第六個階段,在軟件設(shè)計這個領(lǐng)域盡情發(fā)揮。本人受能力所限,還處在第4個階段的學(xué)習(xí)過程,所以會對前四個階段說明。第五、六個階段只是我根據(jù)我自己的知識做的推斷,還沒有經(jīng)驗(yàn)無法說明。
在對這些學(xué)習(xí)階段進(jìn)行闡述之前,我先說一下我的學(xué)習(xí)方法。在學(xué)習(xí)新的知識時我通常是按以下三個階段學(xué)的
理論學(xué)習(xí)。通過對理論的學(xué)習(xí),盡量了解新知識的概念;學(xué)習(xí)之后只是粗略的了解概念,不能和實(shí)際很好的結(jié)合。
演繹階段。根據(jù)理論學(xué)習(xí)的知識,考慮在什么場合下可以應(yīng)用這個新知識,哪些地方已經(jīng)應(yīng)用了這個概念,建立對新知識的感性認(rèn)識。
歸納階段。從一個更深的層次理解理論。
以下根據(jù)java的六個學(xué)習(xí)階段闡述我的體會,而每個階段將按照理論學(xué)習(xí)、演繹和歸納三個小階段討論。
java語法的學(xué)習(xí)
語法學(xué)習(xí)的理論學(xué)習(xí)階段是最容易的階段,70%以上的java書主要介紹的就是java語法,隨意買來一本,通讀一下就可以,主要理解以下內(nèi)容:(1)數(shù)據(jù)類型,(2)操作符,(3)控制流程,(4)類和類再生,(5)包和接口,(6)異常操作。
在理論學(xué)習(xí)階段,不必過于注重細(xì)節(jié),只要對java的基本語法有一個整體認(rèn)識,能讀懂示例的源代碼就可以了。
下一步就是演繹階段,應(yīng)用所學(xué)的語法知識,編寫簡單的程序。最好憑自己的記憶,將各語法要點(diǎn)都用一遍(編寫代碼最好用notepad),對自己不熟悉的語法要重新閱讀,用編譯器去檢查語法錯誤。這個階段的目標(biāo)是脫離書本以及java API能編寫簡單的程序,閱讀一個java源代碼能說出執(zhí)行結(jié)果。
完成這個階段的學(xué)習(xí),參加scjp的考試,應(yīng)該獲得較高的成績。
在演繹階段的基礎(chǔ)上,根據(jù)自己犯過的錯誤,總結(jié)一下java的難點(diǎn)。重新閱讀語法書,將一些自己不是很清楚的概念重新整理一下,這時你對java語法的理解比第一次閱讀時更深了。
我在剛開始學(xué)java時,只是粗略的看看語法書,就開始編程序了,遇到不懂的就重新閱讀語法書,這樣,完全可以成為一個合格程序員,但是當(dāng)我成為team leader時,為了培訓(xùn)組員java編程,卻發(fā)現(xiàn)自己脫離了java語法書和Java API,竟然會的不多(java集成開發(fā)工具有提示功能),為了培訓(xùn),我又重新學(xué)了一遍java語法,很有收獲。
其實(shí)一個優(yōu)秀的程序員,不但要能寫出好的程序,更重要的是,對所寫的程序能說的清楚:(1)說清楚程序的功能(2)說清楚程序的結(jié)構(gòu)。而說清楚程序的結(jié)構(gòu)的基礎(chǔ)是對java的語法要熟悉。想成為優(yōu)秀的程序員,一定要在學(xué)習(xí)語法的基礎(chǔ)上,不斷實(shí)踐,不斷總結(jié),最終能脫離語法書,將java語法系統(tǒng)的講解清楚。
面向?qū)ο笥^念的建立
Java是面向?qū)ο蟮拈_發(fā)工具,使用java開發(fā)應(yīng)用時,一定要懂面向?qū)ο缶幊痰母拍?。在學(xué)過了java語法之后,應(yīng)該建立OOP的概念。
理論學(xué)習(xí)階段,首先應(yīng)當(dāng)理解class和object,了解class、interface、abstract class,理解OOP的繼承性,封裝性(public, protected,private)和多態(tài)性。然后應(yīng)當(dāng)熟悉UML,可以閱讀一些UML的簡單資料,基本上了解類圖、狀態(tài)圖和時序圖就可以了。
演繹階段,對OOP的實(shí)踐。而OOP的成功范例應(yīng)該是常見的23種設(shè)計模式。這個階段需要閱讀并體會設(shè)計模式UML圖和示例代碼,我推薦《java與模式》這本書,也可以訪問http://。不必讀懂模式,只需要讀懂每個模式的UML和代碼。
歸納階段,通過演繹階段的學(xué)習(xí),體會OOP帶來的好處——對擴(kuò)展開放,對修改關(guān)閉。同時學(xué)會如何在java中使用OOP的概念設(shè)計。
我在使用Java編程初期,一直使用面向過程的思想編程,對class、interface、abstract class以及public、protect、private的存在并沒有理解,直到我閱讀了Gof的設(shè)計模式,才理解OOP的優(yōu)點(diǎn)。但是Gof的設(shè)計模式太晦澀了,我第一次讀時,僅僅是有了面向?qū)ο蟮母拍睿鴮υO(shè)計模式并沒有理解。相反《java與模式》容易讀一些,但《java與模式》一書的廢話多一些,有很多內(nèi)容可以不讀。
java基本類庫的學(xué)習(xí)
曾經(jīng)面試過一些java程序員,我出的題目是在使用java時,經(jīng)常用到哪些類,在哪個包里。很少有人能答好,甚至有人做了2年java程序都沒有回答出,他們會用java,但必須依賴工具(指java集成開工具),我覺得他們可以編寫出程序,但不能編寫出特別好得程序。
我認(rèn)為作為java程序員必須掌握java類庫的兩個包:java.lang和java.util這兩個包。java.lang包提供的是java編程要用到的基本類包,java程序員天天在用,無非是看別人如何用,自己就如何用,但很少有人去總結(jié)一下,比如String 和StringBuffer這兩個類有什么差別,應(yīng)該有很多java程序員說不出來。另外Vector和HashMap這兩個類大家都在用,有多少人能說清楚Vector和HashMap繼承了哪些類,實(shí)現(xiàn)了哪些接口呢。
理論學(xué)習(xí)。認(rèn)真閱讀java API的以下內(nèi)容:java.lang包中的String,StringBuffer,Number,Double,F(xiàn)loat,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類和接口。主要理清楚這些類或接口的繼承關(guān)系、主要功能。
演繹階段。通過閱讀代碼,練習(xí)編程,學(xué)習(xí)并應(yīng)用這些類和接口。其實(shí)這些類的大部分是經(jīng)常用的,無非對這些類和接口說不清楚。在這些類中,對java.lang和java.util包中的類,最好將各個方法練習(xí)使用一次。而對java.util包中Collections framework中的類,最好理清楚各個類和接口之間的關(guān)系。常用的類的方法我就不具體介紹了,我舉一個使用Observer和Obserable 的例子(摘自《The Complete Reference Java 2 》)。在Observer和Obserable中,java實(shí)現(xiàn)了對設(shè)計模式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);
}
};
執(zhí)行結(jié)果
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
歸納階段??偨Y(jié)使用經(jīng)驗(yàn),體會這兩個包中類的繼承關(guān)系,對設(shè)計模式的支持(如Iterator本身就是設(shè)計模式,同時也是工廠方法模式的應(yīng)用),了解這些類提供的所有功能,比較功能相近類的異同。將這些類的api記在心中。
雖然集成開發(fā)環(huán)境支持方法提示功能,但我個人認(rèn)為,對于java.lang和java.util這兩個包的api應(yīng)當(dāng)熟記于心,java的其他類庫在使用時可以查找api。當(dāng)然如果從事不同的開發(fā),對其他類庫應(yīng)當(dāng)有相應(yīng)的了解,如開發(fā)swing,就應(yīng)當(dāng)對javax.swing包了如執(zhí)掌,開發(fā)b/s結(jié)構(gòu)的程序,就要了解javax.servlet,依個人的應(yīng)用來開發(fā)了。
本文的上一篇發(fā)表之后,承蒙各位網(wǎng)友關(guān)注,發(fā)表了很多評論,我感覺很多人對我寫得文章有誤解,大概是我表述不清楚的原因吧。這篇文章是對上一篇的補(bǔ)充,以一個示例闡述了解collection框架的重要性。
我在半年以前寫過一個函數(shù)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這個函數(shù)設(shè)計的很不好——不夠通用,假如,還想打印HashSet類型的數(shù)據(jù),你就必須重載printAll函數(shù),代碼如下
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函數(shù)的代碼重用率低。其實(shí)Vector和 HashSet都是Collection的實(shí)現(xiàn),可以將printAll的參數(shù)類型改為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)函數(shù)了。
在設(shè)計函數(shù)時,應(yīng)優(yōu)先使用接口,而不是類。當(dāng)然必須了解Vector 是Collection的實(shí)現(xiàn)。
如果對Collection的繼承關(guān)系不清楚,很容易濫用重載,以下代碼是一個有問題的代碼(摘自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層次結(jié)構(gòu)不熟悉,而濫用重載導(dǎo)致。 這篇文章仍然是對《我學(xué)習(xí)使用java的一點(diǎn)體會(3)》的補(bǔ)充。 我使用java開發(fā)一年多,使用的應(yīng)該還算熟練,最近在閱讀《設(shè)計模式》和《Effective Java》時,又重新學(xué)了一下java的基本類庫,對編程思想有了新的認(rèn)識。java的基本類庫是由專家設(shè)計的,理解基本類庫一方面可以增加自己的開發(fā)效率,另外一方面可以學(xué)學(xué)專家的設(shè)計思路。在java的基本類庫中,使用了很多的設(shè)計模式,在很多方面提供擴(kuò)展機(jī)制,方便的支持設(shè)計模式??梢哉fjava的基礎(chǔ)類庫,將面向?qū)ο笤O(shè)計的Open-Close principle(Software entities should be open for extension,but closed for modification)發(fā)揮到了極致。 在java的基礎(chǔ)類庫中,有些類設(shè)計的是為了給java開發(fā)者提供工具,直接讓開發(fā)者使用的,有些類是專門為繼承而設(shè)計的。對于第一種類型的類,使用集成開發(fā)工具很容易就能上手使用,而對于第二種類型的類,不主動去學(xué)它的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開發(fā)記錄 剛開始學(xué)java,有很多不明白不是很多是幾乎全部,我把自己每學(xué)到一點(diǎn)都總結(jié)下來讓自己感覺更充實(shí)也希望以后能為初學(xué)者提供幫助。 Java培訓(xùn)第一天 今天正式開始培訓(xùn),我們滿懷喜悅,感覺java一定是一門很高深的技術(shù),幻想著可以寫出很多好玩的游戲,做出很多漂亮的網(wǎng)站,可是一開學(xué)就蒙了我根本什么都聽不懂,雖然假期看了一些java基礎(chǔ),但是老師高濃縮的術(shù)語還是讓我一頭霧水,但還是有那份激情吧,我要學(xué)會,第一天就是在迷茫中度過的。老師一直在說現(xiàn)在不懂沒關(guān)系,以后用長了就好了。每天早上8:30到12:00,下午2:30到6:00晚上8:00到10:30每天接近10個小時的學(xué)習(xí)還是很充實(shí)的,我信心倍增。I believe myself。 Java培訓(xùn)第二天 今天繼續(xù)講java基礎(chǔ),老師的節(jié)奏很快,說不要把 (前幾天耽誤了,以后補(bǔ)上) Java培訓(xùn)第七天 這幾天已經(jīng)基本上走出了前幾天的迷茫,感覺還是挺不錯的,由開始的什么都不會到現(xiàn)在的知道老師想讓我們干什么感覺進(jìn)步還是滿大的,我身邊由一個考上北京郵電大學(xué)的姐給了我很大的幫助,還有很多學(xué)長也很厲害。大家一起學(xué)習(xí),我們3個人是大一的也是最沒有基礎(chǔ)的,有學(xué)長的帶領(lǐng)和老師的指導(dǎo)進(jìn)步很快。感覺知識是時間得來的,在學(xué)校里我可能4年都學(xué)不會這些東西,我說的是真的起碼對我是這樣。用了兩天的時間裝環(huán)境,把64位系統(tǒng)裝成32位的(老師的演示屏幕不支持64位,沒辦法,前兩天時間不緊)后來用了兩天的時間就把java基礎(chǔ)講完了,我是什么都不懂,雖然自學(xué)了一些但絕對是九牛一毛,專業(yè)術(shù)語 面向?qū)ο?、類、封裝、繼承、多態(tài)、反射、跳轉(zhuǎn)、框架、異常捕獲、數(shù)據(jù)庫、接口等等反正我是什么都不會怕什么,我開始看書、百度、問學(xué)長(不敢問老師因?yàn)檫@樣的問題太白癡了)?;A(chǔ)講完了,沒感覺有什么長進(jìn),但是感覺好像沒有原來那么難理解了,花了2個多小時把基礎(chǔ)書看了一遍感覺突然懂了的感覺(呵呵)老師把大量的時間花費(fèi)在讓我們敲代碼的上,第一個項(xiàng)目testssh2完全是在老師的指導(dǎo)下一個單詞敲的,老師給我們講公司做項(xiàng)目的框架,我聽得暈了src層,docs層,sitting層,webroot層我根本聽不懂也不知道這能干什么用,一開始學(xué)C感覺C很難,覺得很多事情都是無厘頭,但是學(xué)了java才覺得java才是真正的霸道,我根本什么邏輯都不用考慮,想實(shí)現(xiàn)什么直接調(diào)用就OK了,感覺真正寫類的人才是大牛。??!今天第二遍將框架和第一遍基本上一樣不過項(xiàng)目比原先大了很多基本上是公司的使用框架出了test暫時不寫之外其他的都要寫,老師給我們建一個example我們自己寫一個exercise反正是高度一致,但難度還是挺大的寫了一天了還是沒有寫完,發(fā)布了在瀏覽器上出錯,各種錯誤各種調(diào)試,直到想吐。沒關(guān)系錯誤就是進(jìn)步,下面我要開始上課了,就寫到這吧,加油myself。 剛開始學(xué)JAVA時,是因?yàn)槲覀儼嘤袔讉€人選修了這門課,而且還經(jīng)常在討論一些JAVA的問題,我在一邊聽的似懂非懂的,就開始有了學(xué)JAVA的想法。那幾位同學(xué)是我們班學(xué)習(xí)相對較好的,而且邏輯思維能力理解能力也是我們當(dāng)中數(shù)一數(shù)二的,和大家的關(guān)系也相當(dāng)?shù)暮?。在這樣的形勢下,我開始了我的JAVA之旅。剛開始學(xué)的那陣,和學(xué)C、C++的過程差不多,也是借了一些好像講得比較簡單的書,就是那些從變量、數(shù)據(jù)類型開始講的書,印象中好像有《21天學(xué)會JAVA2》、《循序漸進(jìn)JAVA2教程》、《JAVA程序設(shè)計基礎(chǔ)》等等,書名大概是那樣,記不太清了。那時我還真以為只要我堅持、用心,21天之后我就能和那幾位同學(xué)一樣的水平了,呵呵!結(jié)果當(dāng)然沒有我想像當(dāng)中的那么好,這有我自己的原因,但其實(shí)也有JAVA本身的原因,JAVA語言那么博大精深,沒有人可能21天學(xué)會的,最多是對JAVA有個比較全面的了解,有那么一點(diǎn)JAVA的編程思想,JAVA的思維方式和面向?qū)ο蟮乃季S。然而我那幾本書沒有哪一本是看完過的,理由很簡單,以我當(dāng)時的能力和經(jīng)驗(yàn),是不可能看得完全懂的,于是我也在為停地?fù)Q書,不停地借書。但我依然沒有面向?qū)ο蟮乃季S方式,我的水平也沒有提升上去,還是整天在寫一些流程控制的小程序。還記得那時我連JDK也不會配置,只能整天在紙上寫,寫滿了一頁頁的紙,似乎很有成就感,但其實(shí)也還是什么都不會。后來想起了學(xué)過的匯編語言,用的那些MASM、LINK程序也不用配置什么環(huán)境變量,不過要在CMD下面進(jìn)入到程序所在的目錄下面去,這個方法是否也能用在JAVA上呢?于是我試著把程序放到JDK/BIN下面,發(fā)現(xiàn)竟然能編譯運(yùn)行了,這不能不說是一個重大發(fā)現(xiàn),我了終于能在電腦上運(yùn)行JAVA程序了。后來看書看明白了PATH環(huán)境的配置,但還是看不懂CLASSPATH的配置,就把PATH配置上去了,這樣我的程序也基本上不用放在BIN下面了。有興趣的朋友不妨也用我的方法一試,呵呵。還有一點(diǎn)想說的是,初學(xué)者最好用JDK,簡單方便,還能讓你了解一些底層的實(shí)質(zhì)性的東西,對你更深入的了解JAVA,以及JAVA如何編譯運(yùn)行很有幫助。接下來就放假了,我們要在機(jī)房實(shí)習(xí),用VB編寫WINDOWS應(yīng)用程序,我的JAVA學(xué)習(xí)也就先放在一邊了。其實(shí)那時的我還是整天沉迷游戲當(dāng)中,壓根就對編程沒興趣,只是為了和那幾位朋友能說上幾句,證明我也會那么一點(diǎn)而已,所以沒有花什么心思在上面,平時有事沒事看看而已。學(xué)VB的時候感覺還挺簡單的,教師上課讓我們看浙大的視頻,感覺視頻里講的挺好,回來了自己也弄的小東西,其中我其實(shí)就做過一個計算器程序,但為了讓程序盡量完美,我還是學(xué)了不少的,也花了不少心思在上面?,F(xiàn)在想來,學(xué)VB應(yīng)該是我開始對編程產(chǎn)生興趣的時候,那時的成就感比較強(qiáng),因?yàn)榻K于能做出一個有界面的功能還算不少的程序來了(相對于我以前用C、C++寫的控制臺程序)。之所以有這種感覺,我想大概和我C、C++沒學(xué)好有很大原因,即使是現(xiàn)在,我的C、C++也沒感覺,而且還幾乎忘得一干二凈了。實(shí)習(xí)的最后是分組做一個綜合程序,每5、6個人一組,大家都去找高手組隊(duì),這是必然,呵呵,我也不例外!不過可惜,我們班就3、4個高手,我去晚了,級不上隊(duì)了,還有10多個人和我一樣,是沒法進(jìn)高手的隊(duì)伍里去了。然后就有人叫我組個隊(duì),因?yàn)槲移鸫a還是中等水平的成績,我一想反正進(jìn)不了高手隊(duì)伍了,算了,我就組個隊(duì)了,能不能做出作業(yè)來到時再說了。實(shí)在不行讓高手來幫下忙應(yīng)該沒問題吧。結(jié)果,我們那隊(duì)人馬一個都不動,大家其實(shí)都不會,沒辦法啊,而且平時也都那樣習(xí)慣了。但總這樣也不是個事啊,誰讓我當(dāng)時當(dāng)了組長了呢?每天的計劃和成果我都是糊亂寫了就交上去了,然后再慢慢借書看書,把不會的補(bǔ)上去。那一周,我竟然一反常態(tài),游戲也不打了,整天坐電腦前,查資料,看視頻,寫程序。壓力啊!然而連我自己都沒想到,我竟然做出一個通訊錄程序來了,雖然是七拼八湊、漏洞百出,但也是有模有樣,還是我到那時為止最大的一個程序,成就感那是相當(dāng)?shù)貜?qiáng)啊,絕對是自信滿滿地,我看其他小組的組長似乎也和我一樣的感覺,呵呵,原來壓力還是很有好處的。實(shí)習(xí)結(jié)束之前,我向大家展示了我們的成果,應(yīng)該說其實(shí)是我的成果了,呵呵,不過可不能讓我的那幾位組員聽到了,要不然……從那以后,我才真正對編程有了興趣,不過放假了,人也變懶了,一個暑假什么也沒學(xué),全打游戲了,現(xiàn)在想來,真有點(diǎn)后悔啊。本來打算那個暑假學(xué)VC和JAVA的。開學(xué)之后,我步入了大三的生活,我開始選修了VC和JAVA,不過還是以JAVA為主,主要是發(fā)現(xiàn)VC太難,老師也就教我們怎么做菜單啊,對話框啊什么的,感覺對編程的原理方面根本不理解,對核心的東西也不知道,后來就一心學(xué)JAVA去了。這應(yīng)該也是我現(xiàn)在C++不行的主要原因吧,不過仔細(xì)想想,要是沒當(dāng)初,我現(xiàn)在可能也學(xué)不了JAVA的這些東西吧。呵呵,有得必有失,有失必有得啊。話說開學(xué)之后,我自己以為自己起碼也是看過點(diǎn)JAVA的人,所以老師的課也不怎么聽,只是自己去借點(diǎn)書來看看,沒有和老師同步,感覺自己高人一等一般,現(xiàn)在想想,當(dāng)時真是傻子一個,只會狂妄自大,其實(shí)根本什么都不會。我當(dāng)時上的是劉新老師的課,感覺收獲是挺大的,主要是他給我們留的那8道作業(yè),通過完成作業(yè),我才知道我很菜,也學(xué)會了不少東西,包括一些API的使用。在做那8 道作業(yè)的過程中,我不停地到讀書館找資料,光那段時間,我就一共借過不下20本JAVA書。我一般晚上七、八點(diǎn)開始寫程序,一直到停電,經(jīng)常碰到不會的,就又翻資料,想算法,問題要是解決不了,晚上睡覺了也還在想,哪里不對,哪里還需要改進(jìn),那段時間我就是這樣過去的,現(xiàn)在感覺是我收獲最大的時間段之一。事情實(shí)在很奇妙,當(dāng)你苦苦思索的時候就是想不出方案來,等熄燈了在床上想的時候,就想到解決的方案了,那時候真是興奮莫名啊,真想馬上起來,把我的想法付諸實(shí)施,但是卻停電了,呵呵,只能等到第二天了。現(xiàn)在教JAVA的老師好像已經(jīng)不止劉新老師了,留的作業(yè)怎么樣我就不知道了,不過考試的形式聽說相當(dāng)不好,竟考那些概念性的東西,語法性的東西,甚至于有考JAVA的歷史的,比如JAVA是什么小組什么時候出于哪種原因而開發(fā)出來的等等。我認(rèn)為這很不好,學(xué)JAVA或者更大一點(diǎn)說學(xué)編程絕不是學(xué)這些東西,雖然說概念語法是必須要會的,但不是主要的,主要的應(yīng)該是學(xué)會那種思維方式,學(xué)會用程序去解決問題的能力,能做出一些實(shí)際的東西來!我個人認(rèn)為,用到什么東西,如果不會再去學(xué),這樣才有目標(biāo)、有動力,也才會有成果。你是要學(xué)一些概念和語法,但不必去深究,不必去死記硬背,那樣就進(jìn)牛角尖了,中國的教育卻常常樂此不疲,你看最大的例子就是關(guān)于英語的學(xué)習(xí),都成什么樣子了,學(xué)了這么多年的英語,什么也不會。學(xué)程序設(shè)計最好的方法是多寫些程序,開始可以是一些小程序,之后能力上去了,就可以做些項(xiàng)目了,這是提高能力的最好途徑。你會發(fā)現(xiàn),寫的東西多了,那些語法什么的,你自然就會了,很多平時你想破腦袋都想不通的問題,現(xiàn)在已經(jīng)能深刻地理解和運(yùn)用了,這時候的喜悅是語言難以形容的。當(dāng)然,看一些高手寫的程序也是很有幫助的,你可以了解別人的算法,別人程序的組織形式、還有他對問題的解決方式,有時候你會發(fā)現(xiàn)那些相當(dāng)巧妙的東西,收獲絕對不小。8周的選修課上完之后,我的興趣就更加濃厚了,開始去學(xué)多線程和網(wǎng)絡(luò)編程,不過直到現(xiàn)在我對這兩方面還是不太擅長,主要還是當(dāng)時沒看多久,也沒怎么看懂。在做完那幾道作業(yè)之后,我又一次地高估了自己,以為自己是高手了,看來只有無知的人才會盲目,高手也歷來不是自封的。后來我又去學(xué)JSP,開始學(xué)HTML,花了我半個月時間去了解JSP的基本知識,然后找SUN公司的JSWDK,竟然沒找到,我當(dāng)時還不知道現(xiàn)在已經(jīng)不用這東西了,都在用TOMCAT,主要是圖書館這方面的書太老了,講的也全是如何用JDK+JSWDK+ACCESS來作一些動態(tài)網(wǎng)頁開發(fā),所以進(jìn)度相當(dāng)慢。后來終于下了TOMCAT安裝上去,又不會配置,這東西相當(dāng)麻煩,要是有人指點(diǎn)的話很快就能配置好,但我當(dāng)時真是查了好多資料,上網(wǎng)找了好多東西,但是都沒有講得明白的,而且各有各的說法,版本也完全不一樣。就這樣摸爬滾打,花了不少時間,我終于配置好了TOMCAT服務(wù)器,不容易啊。不過因?yàn)槎际亲约号模瑓s也了解到了不少東西,也可以說沒白費(fèi)力氣。也因此想到一些東西,當(dāng)自己有不會的東西時,自己要先想想,查查資料,上網(wǎng)找答案,實(shí)在不會了再問問高手,或者過來人,這是相當(dāng)有幫助的,你會明白很多底層的原理性的東西,不要一有不會的就問別人。學(xué)了一點(diǎn)JSP以后,我又學(xué)HTML去了,后來又去搞網(wǎng)頁設(shè)計,寒假還學(xué)了ASP,然后又用ASP做了幾個小網(wǎng)頁,真是學(xué)的亂七八糟的,也學(xué)的一塌糊涂,所以一直到現(xiàn)在,我還在一邊學(xué)JSP,一邊補(bǔ)J2SE的基本知識,整天在這轉(zhuǎn),沒有任何進(jìn)步了。最不爽的是我是參加了一個科技創(chuàng)新,現(xiàn)在要花很多的時間在那上面,還要看地質(zhì)方面的東西,了解什么測井的知識,真頭疼。真想不干算了,一心學(xué)我的JAVA,不過現(xiàn)在還是拖拖拉拉的,一來不想讓導(dǎo)師失望,二來不想讓我們組長說我太沒信義,唉,難辦啊!現(xiàn)在的學(xué)習(xí)已經(jīng)不像當(dāng)初那么容易了,要做點(diǎn)東西要想很多,也要花很多時間去弄,而且往往不是只會JAVA就能行的了,還要會HTML、XML、JAVASCRIPT、CSS,還得學(xué)會用很多工具,感覺路途很遙遠(yuǎn)啊,自己好渺小。 我的logic java學(xué)習(xí)總結(jié) 在將近三個月的java學(xué)習(xí)中,我接觸到了編程的樂趣.我熱愛java,熱愛編程.我將不懈的努力遨游在編程的浩海之中.我將我在java學(xué)習(xí)中經(jīng)常出錯的地方作個總結(jié)列出如下: 1.一個class中只能有一個main方法.2.靜態(tài)的方法不能調(diào)用非靜態(tài)的方法.若要調(diào)用,需要把非靜態(tài)的方法加上static.3.類名的首字母要大寫.字段,變量名,方法名,首單詞要小寫,其后單詞的首字母要大寫.包名全小寫.并且所有的單詞要緊靠在一起.4.聲明一個String類型的變量時,其值要用雙引號;聲明一個char類型的變量時,其值要用單引號.5.“=”是賦值運(yùn)算符,”==”是關(guān)系運(yùn)算符.所以在if條件結(jié)構(gòu)中,括號內(nèi)的條件要是boolean類型的.6.Switch結(jié)構(gòu)中,case 后緊接的是”:”.并且每個case后要加上一個break.7.類是對象的模板,對象是類的實(shí)體.8.將對象實(shí)例化要使用new關(guān)鍵字.9.盡可能的加上注釋,并用javadoc生成自己的程序文檔.10.“.”操作符后是方法.用法是:對象名.方法名.11.toString()是一個很重要的方法.它返回的是一個字符串.12..length在數(shù)組中是屬性,在字符串中是方法.13.數(shù)組中,聲明,分配并賦值的寫法有兩種: 1變量類型[] 變量名=new變量類型[此處為空] {X, X, X ,X,……};○ 2變量類型[] 變量名=new○ 14.提取字符串中的某一部分subString(beginindex,endindex), Beginindex的位置從0開始, endindex的位置從1開始.15.StringBuffer的功能要比String的強(qiáng)大.16.append()是StringBuffer的方法,不是String的方法. .如何學(xué)習(xí)Java? 3.1 Java學(xué)習(xí)路線 3.1.1 基礎(chǔ)語法及Java原理基礎(chǔ)語法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當(dāng)危險的。學(xué)習(xí)Java也是如此,必須要有扎實(shí)的基礎(chǔ),你才能在J2EE、J2ME領(lǐng)域游刃有余。參加SCJP(SUN公司認(rèn)證的Java程序員)考試不失為一個好方法,原因之一是為了對得起你交的1200大洋考試費(fèi),你會更努力學(xué)習(xí),原因之二是SCJP考試能夠讓你把基礎(chǔ)打得很牢靠,它要求你跟JDK一樣熟悉Java基礎(chǔ)知識;但是你千萬不要認(rèn)為考過了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險的。獲得“真正”的SCJP只能證明你的基礎(chǔ)還過得去,但離實(shí)際開發(fā)還有很長的一段路要走。 3.1.2 OO思想的領(lǐng)悟掌握了基礎(chǔ)語法和Java程序運(yùn)行原理后,我們就可以用Java語言實(shí)現(xiàn)面向?qū)ο蟮乃枷肓?。面向?qū)ο?,是一種方法學(xué);是獨(dú)立于語言之外的編程思想;是 CBD基于組件開發(fā)的基礎(chǔ);屬于強(qiáng)勢技術(shù)之一。當(dāng)以后因工作需要轉(zhuǎn)到別的面向?qū)ο笳Z言的時候,你會感到特別的熟悉親切,學(xué)起來像喝涼水這么簡單。 使用面向?qū)ο蟮乃枷脒M(jìn)行開發(fā)的基本過程是: ●調(diào)查收集需求?!窠⒂美P?。 ●從用例模型中識別分析類及類與類之間的靜態(tài)動態(tài)關(guān)系,從而建立分析模型?!窦?xì)化分析模型到設(shè)計模型?!裼镁唧w的技術(shù)去實(shí)現(xiàn)。●測試、部署、總結(jié)。 3.1.3 基本API的學(xué)習(xí)進(jìn)行軟件開發(fā)的時候,并不是什么功能都需要我們?nèi)?shí)現(xiàn),也就是經(jīng)典名言所說的“不需要重新發(fā)明輪子”。我們可以利用現(xiàn)成的類、組件、框架來搭建我們的應(yīng)用,如SUN公司編寫好了眾多類實(shí)現(xiàn)一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調(diào)用類中的方法來完成某些功能或繼承它。那么這些類中究竟提供了哪些方法給我們使用?方法的參數(shù)個數(shù)及類型是?類的構(gòu)造器需不需要參數(shù)?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,Java DOC文檔(參考文獻(xiàn)4.4)就是這樣的文檔,它可以說是程序員與程序員交流的文檔?;続PI指的是實(shí)現(xiàn)了一些底層功能的類,通用性較強(qiáng)的API,如字符串處理/輸入輸出等等。我們又把它成為類庫。熟悉API的方法一是多查Java DOC文檔(參考文獻(xiàn)4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。 3.1.4 特定API的學(xué)習(xí)Java介入的領(lǐng)域很廣泛,不同的領(lǐng)域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做界面開發(fā),那么你需要學(xué)習(xí)Swing/AWT/SWT等API;如果你進(jìn)行網(wǎng)絡(luò)游戲開發(fā),你需要深入了解網(wǎng)絡(luò)API/多媒體API/2D3D等;如果你做WEB開發(fā),就需要熟 悉Servlet等API啦??傊枰鶕?jù)工作的需要或你的興趣發(fā)展方向去選擇學(xué)習(xí)特定的API。 3.1.5 開發(fā)工具的用法在學(xué)習(xí)基礎(chǔ)語法與基本的面向?qū)ο蟾拍顣r,從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時候不要急于上手JBuilder/Eclipse等集成開發(fā)環(huán)境,以免過于關(guān)注IDE的強(qiáng)大功能而分散對Java技術(shù)本身的注意力。過了這一階段你就可以開始熟悉 IDE了。程序員日常工作包括很多活動,編輯、編譯及構(gòu)建、調(diào)試、單元測試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項(xiàng)活動都有專門的工具,如果獨(dú)立使用這些工具的話,你將會很痛苦,你需要在堆滿工具的任務(wù)欄上不斷的切換,效率很低下,也很容易出錯。在JBuilder、Eclipse等IDE中已經(jīng)自動集成編輯器、編譯器、調(diào)試器、單元測試工具JUnit、自動構(gòu)建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進(jìn)去,又提供了豐富的向?qū)椭煽蚣艽a,讓我們的開發(fā)變得更輕松。應(yīng)該說IDE發(fā)展的趨勢就是集成軟件開發(fā)中要用到的幾乎所有工具。從開發(fā)效率的角度考慮,使用IDE是必經(jīng)之路,也是從一個學(xué)生到一個職業(yè)程序員轉(zhuǎn)變的里程碑。Java開發(fā)使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder 占有的市場份額是最大的。JBuilder在近幾年來一直是Java集成開發(fā)環(huán)境中的霸主,它是由備受程序員尊敬的Borland公司開發(fā),在硝煙彌漫的 Java IDE大戰(zhàn)中,以其快速的版本更新?lián)魯BM的Visual Age for Java等而成就一番偉業(yè)。IBM在Visual Age for Java上已經(jīng)無利可圖之下,干脆將之貢獻(xiàn)給開源社區(qū),成為Eclipse的前身,真所謂“柳暗花明又一村”。浴火重生的Eclipse以其開放式的插件擴(kuò)展機(jī)制、免費(fèi)開源獲得廣大程序員(包括幾乎所有的骨灰級程序員)的青睞,極具發(fā)展?jié)摿Α?/p> 3.1.6 學(xué)習(xí)軟件工程 對小型項(xiàng)目而言,你可能認(rèn)為軟件工程沒太大的必要。隨著項(xiàng)目的復(fù)雜性越來越高,軟件工程的必要性才會體現(xiàn)出來。參見“軟件開發(fā)學(xué)習(xí)路線”小節(jié)。 3.2學(xué)習(xí)要點(diǎn) 確立的學(xué)習(xí)路線之后,我們還需要總結(jié)一下Java的學(xué)習(xí)要點(diǎn),這些要點(diǎn)在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進(jìn)行匯總,不要嫌我婆婆媽媽啊。 3.2.1勤查API文檔當(dāng)程序員編寫好某些類,覺得很有成就感,想把它貢獻(xiàn)給各位苦難的同行。這時候你要使用“Javadoc”工具(包含在JDK中)生成標(biāo)準(zhǔn)的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文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。當(dāng)需要某項(xiàng)功能的時候,你應(yīng)該先查相應(yīng)的DOC文檔看看有沒有現(xiàn)成的實(shí)現(xiàn),有的話就不必勞神費(fèi)心了直接用就可以了,找不到的時候才考慮自己實(shí)現(xiàn)。使用步驟一般如下: ●找特定的包,包一般根據(jù)功能組織。●找需要使用類,類命名規(guī)范的話我們由類的名字可猜出一二?!襁x擇構(gòu)造器,大多數(shù)使用類的方式是創(chuàng)建對象?!襁x擇你需要的方法。 3.2.2 查書/google->寫代碼測試->查看源代碼->請教別人 當(dāng)我們遇到問題的時候該如何解決?這時候不要急著問別人,太簡單的問題,沒經(jīng)過思考的問題,別人會因此而瞧不起你??梢韵日艺視?,到google中搜一下看看,絕大部分問題基本就解決了。而像“某些類/方法如何使用的問題”,DOC文檔就是答案。對某些知識點(diǎn)有疑惑是,寫代碼測試一下,會給你留下深刻的印象。而有的問題,你可能需要直接看 API的源代碼驗(yàn)證你的想法。萬不得已才去請教別人。 3.2.3學(xué)習(xí)開源軟件的設(shè)計思想 Java領(lǐng)域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對這些工具、框架進(jìn)行分析,領(lǐng)會其中的設(shè)計思想,有朝一日說不定你也能寫一個XXX框架什么的,風(fēng)光一把。分析開源軟件其實(shí)是你提高技術(shù)、提高實(shí)戰(zhàn)能力的便捷方法。 3.2.4 規(guī)范的重要性 沒有規(guī)矩,不成方圓。這里的規(guī)范有兩層含義。第一層含義是技術(shù)規(guī)范,多到http://004km.cn下載JSRXXX規(guī)范,多讀規(guī)范,這是最權(quán)威準(zhǔn)確最新的教材。第二層含義是編程規(guī)范,如果你使用了大量的獨(dú)特算法,富有個性的變量及方法的命名方式;同時,沒給程序作注釋,以顯示你的編程功底是多么的深厚。這樣的代碼別人看起來像天書,要理解談何容易,更不用說維護(hù)了,必然會被無情地掃入垃圾堆。Java編碼規(guī)范到此查看或下載http://Java.sun.com/docs/codeconv/,中文的也有,啊,還要問我在哪,請參考3.2.2節(jié)。 3.2.5 不局限于Java 很不幸,很幸運(yùn),要學(xué)習(xí)的東西還有很多。不幸的是因?yàn)橐獙W(xué)的東西太多且多變,沒時間陪老婆家人或女朋友,導(dǎo)致身心疲憊,嚴(yán)重者甚至導(dǎo)致抑郁癥。幸運(yùn)的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達(dá)成心愿。Java不要孤立地去學(xué)習(xí),需要綜合學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、OOP、軟件工程、UML、網(wǎng)絡(luò)編程、數(shù)據(jù)庫技術(shù)等知識,用橫向縱向的比較聯(lián)想的方式去學(xué)習(xí)會更有效。如學(xué)習(xí)Java集合的時候找數(shù)據(jù)結(jié)構(gòu)的書看看;學(xué)JDBC的時候復(fù)習(xí)數(shù)據(jù)庫技術(shù);采取的依然是“需要的時候再學(xué)”的原則。 4.結(jié)束語需要強(qiáng)調(diào)的是,學(xué)習(xí)軟件開發(fā)確實(shí)有一定的難度,也很辛苦,需要付出很多努力,但千萬不要半途而廢。本文如果能對一直徘徊在Java神殿之外的朋友有所幫助的話,筆者也欣慰了。哈哈,怎么聽起來老氣橫秋呀?沒辦法,在電腦的長期輻射之下,都快變成小老頭了。最后奉勸各位程序員尤其是MM程序員,完成工作后趕快遠(yuǎn)離電腦,據(jù)《胡播亂報》報道,電腦輻射會在白皙的皮膚上面點(diǎn)綴一些小黑點(diǎn),看起來鮮艷無比……第二篇:學(xué)習(xí)java的一些初步體會
第三篇:我的JAVA學(xué)習(xí)經(jīng)歷
第四篇:我的java學(xué)習(xí)總結(jié)
第五篇:java學(xué)習(xí)