面向對象觀念的建立
Java是面向對象的開發工具,使用java開發應用時,一定要懂面向對象編程的概念。在學過了java語法之後,應該建立OOP的概念。
理論學習階段,首先應當理解class和object,了解class、interface、abstract class,理解OOP的繼續性,封裝性(public, protected,private)和多態性。然後應當熟悉UML,可以閱讀一些UML的簡單資料,基本上了解類圖、狀態圖和時序圖就可以了。
演繹階段,對OOP的實踐。而OOP的成功范例應該是常見的23種設計模式。這個階段需要閱讀並體會設計模式UML圖和示例代碼,我推薦《java與模式》這本書,也可以訪問http://www.jdon.com/designpatterns/index.htm 。不必讀懂模式,只需要讀懂每個模式的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.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" );