JAVA全方位學習
java 2全方位學習 J2ME無線java應用開發 JAVA手機程式設計入門與應用
1、對於一般PC平台來說,Java的程式分成兩大類,一個是在PC的作業系統上通過JVM直接啟動並執行Java Application,另一種是通過瀏覽器中附帶的JVM啟動並執行Java Applet。
2、<applet code="要啟動並執行class檔案名稱" width="顯示的寬度" height="顯示的高度"></applet>。
3、javac,java,appletviewer。
4、java是用unicode作為字元集的,所以我們在Java程式中使用中文或是英文甚至是其他的語言作為class名稱、變數名稱都可以。
5、JFC-java foundation classes,GUI-graphical uesr interface。
6、java -jar Java2D.jar。
7、PDA-個人資料處理。jpda-Java Platform Debugger Architecture。
第4章 程式基本單元
8、關鍵字與保留字的區別。標誌符的魔力。Literal的含義。變數的意義,變數命名的原則。
9、基礎資料型別 (Elementary Data Type):整型,浮點,其他類型。
10、為什麼數值範圍正負值分開,無理數或是無窮小數的表示問題。其核心是精度問題。浮點數不存在0這個數值,所以會產生誤差。
11、其他資料類型:boolean,char,常用逸出字元,特殊字元的表示方法。
12、Java兩種變數的模式:成員變數(member variable),局部變數(local variable)。成員變數初始值在聲明時就指定了。而局部變數則不會,要求使用者自己設定初始值。
13、類型轉換分為自動類型轉換(promotion)和強制類型轉換(casting)兩種。其中每種又分為放大(widening)和縮小(narrowing)兩種。放大轉換屬於自動類型轉換,縮小轉換屬於強制類型轉換。
14、資料類型的後面加上一個英文字母,是由於Java對於literal預設的資料類型有關,基本上Java對整數的lieral預設為int型,而對於浮點數的literal預設為double型。
15、Java裡有個特殊的類,可以像一般的基礎資料型別 (Elementary Data Type)一樣使用,它就是String-字串。
第5章 Java的運算式
16、5%2與5%-2與-5%2與-5%-2的區別。
17、比較子的結果只有兩種,true和flase。instanceof?
18、邏輯與和一般與的差別。在需要改變變數的值時,用一般與。通常使用邏輯運算子,因為運算速度會快一些。
19、邏輯運算的優先順序在比較子之下。
20、賦值運算子是所有運算子中最低的。賦值運算子從右邊運算到左邊。而算術運算子是從左邊運算到右邊。並且賦值運算子的左邊只能有一個變數存在。
21、位元運算符(bitwise)。 &,|,^,~(complement)。位元運算符只能用於整數資料型別中。位移運算(shift)的用處。位移運算比較難。要理解位移運算的用途。瞭解減次運算的含義。
22、運算子的優先順序和結合性。
第6章 Java的語句
23、語句有很多種,粗略的把它們分為四類:第一類是一般的語句,第二類是聲明語句,第三類是條件流程式控制制語句,第四類是迴圈控制語句。
24、對象的聲明與變數的聲明是不同的。對象在聲明後,必須進行執行個體化,而變數聲明是不需要的。
25、?:運算子的使用。
26、Switch的參數只能是(<byte、short、int或char變數>)的其中一種。
27、for(<控制迴圈變數初始值設定>;<迴圈結束判斷條件陳述式>;<控制迴圈變數值改變方法>){<代碼>s}。千萬不使用浮點數作為控制變數。由於浮點數誤差問題。
28、while(<迴圈結束判斷條件陳述式>){<代碼>s}。
29、do{<代碼>s} while(<迴圈結束判斷條件陳述式>)。
30、進階迴圈控制-嵌套迴圈。以及break和continue的使用。
31、標記<token>的使用。以冒號: 作為結束。運用適當的break、continue和token可以增強程式的彈性。但不要亂用token。
32、必須瞭解備註陳述式、if語句、switch語句、迴圈語句、break、continue和標記的使用與限制。
第7章 Java物件導向程式設計
33、 對象是符合某種類定義所產生出來的執行個體(instance)。類是抽象的,而對象是實在的。屬性(attribute)是用來形容一個執行個體對象的,其實就 是變數。方法(method)是對象自己的行為或者是使用它們的方法,其實就是函數。屬性和方法稱為對象的成員。類可以說是藍圖(blueprint), 類中會定義許多產生該類對象時,所必須具備的一些屬性與方法。
34、繼承(inheritance)和多態(polymorphism)是類的另 外兩個重要的特性。繼承最主要的目的是為了“擴充”原類的功能、加強或改進原類所沒有定義的屬性及方法。被繼承的類為父類,繼承的類為子類。採用UML (Unified Modeling Language)的表達方式來設計類,可以畫出類別關係圖,其中最重要的組件是類表徵圖和繼承表徵圖。多態的概念比較難理解,需要加強理解,其中還有覆蓋 (override)的概念。
35、為了增強程式的可讀性和易用性。全世界的java程式師都遵守以下的規則:(1)Package(包),作為 Package名稱的英文單詞全部要小寫;(2)類,每個英文單詞的第一個字母大寫;(3)介面,規則與類一樣;(4)屬性,每個英文單詞的第一個字母小 寫,其他單詞的第一個英文字母大寫;(5)方法,規則和屬性一樣,不過後面有小括弧;(7)常量,英文單詞全部大寫,而且每兩個英文單詞之間用底線隔 開。
36、Animal和Zoo兩個類只需要對Zoo.java進行編譯即可。這是因為在Zoo.java中所有用到的類如果還沒有進行過編譯的話,在編譯Zoo.java的過程中它們都會被自動編譯。
37、建構函式(constuctor),除了可以在Java編譯時間為我們自動產生之外,還可以自行編寫所需要的建構函式。建構函式也是一個方法。
38、在一個類中,有多個建構函式使用相同的名稱,但是參數類型與個數卻各不相同,我們把這樣的一個行為稱為建構函式重載(overloading)。
39、原則上重載有兩個規則一定要遵守:一、方法名稱一定要一樣。否則的話,就是兩個不同的方法,不能稱為重載。二、調用的參數類型一定要不一樣。因為編譯器要通過參數類型來判斷調用的是哪一個方法。
40、 物件導向程式設計中一個非常重要的概念,我們稱為資訊的隱藏(information hidding),專用的技術術語為封裝(encapsulatio)。封裝的目的有兩個:一、保護類中的資料,不讓這些資料被錯誤的使用或破壞;二、隱 藏不需要讓別人知道的細節,以防別人誤用。封裝還有一些其他的重要的特點:隱藏類的具體細節;強制使用者通過單一介面訪問資料;程式更加容易維護。
41、屬性存取方法的命名規則:設定屬性值的方法以set作為開頭;擷取屬性值的方法以get作為開頭;Boolean資料類型值的擷取用isXXX形式來命名。
42、類的多態的,指類在不同情況下,可以看作是不同的類。
43、 類成員和執行個體成員。前面介紹的屬性和方法,屬於對象等級的,稱為執行個體成員。類成員必須使用限定詞static。類成員的調用方法為<類名稱 >.<類成員名稱>,也可以為<對象名稱>.<類成員名稱>。但是類方法中不能使用執行個體成員。
44、 子類產生對象時,會往上通知它的父類,它的父類又會通知父類的父類,持續這個操作直到最上層的java.lang.Object類。通知上層父類最主要的 目的時,對於那些繼承自父類的屬性或其他的設定做初始化的操作。從而達到 程式碼的重複使用,這也是繼承的目的。Java在編譯時間自動幫我們加上通知父類的程式碼,是加在建構函式裡面。super();這行的意思必須明白。 super是關鍵字。
45、調用super函數必須注意兩點:一、super調用必須在建構函式的第1行。二、如果子類中有好幾個不同的建構函式,二父類又沒有不需要參數的建構函式,那麼就必須在子類中的每個建構函式的第一行加上適當的super調用。
46、建構函式調用建構函式用this這個關鍵字。
47、 super和this在使用上有一些要注意的地方:一、super和this只能使用在建構函式程式碼中的第一行;二、super和this同時只能使 用一種;三、super和this的調用只能使用在建構函式中;四、如果建構函式中沒有使用super或this,那麼Java會自動幫你加上super ()調用。
48、屏蔽(shadow)-屬性(繼承關係)、覆蓋(override)-方法(繼承關係)、重載(overload)-方法(同一個類下函數同名,但參數不同)。使用屬性的幾種方法必須瞭解,super、this、強制類型轉換的使用。
第8章 深入Java物件導向程式設計
49、什麼是包(package)。包很像我們電腦中的目錄或是檔案夾。目錄分隔字元,dos用/,unix用/。目錄機制應用於Java物件導向的程式當中就是所謂的包。
50、 package語句中,原本的目錄分隔字元改用句點[.]來代替。package <package名稱>;必須注意:package語句一定只能寫在程式碼的第一行。package的UML圖示。除了每一個類的Java 檔案中的第一行設定package外,程式碼中用到其他類的地方也一併加上它的package的名稱。package的設定與使用。
51、import語句,必須寫在package語句之後,所有類聲明之前。import語句的萬用字元(*)。使用萬用字元只是將該package下的類import進來,不會把子目錄下的其他目錄中的類import進來。
52、 classpath的設定。classpath是Java程式在編譯與運行時會使用到的一個【環境變數】,它的主要用途是告訴編譯器去哪裡找到編譯或運行 時所需要的類。windows預設情況下classpath為【.】。設定classpath的兩種方法:一、直接設定;二、javac加上- classpath這個參數。
53、存取權限的限定詞的使用。protected與default的使用。成員限定詞有四個,而類聲明限定詞只有兩個。
54、final限定詞的使用-用於常量。final和static的使用。
55、 抽象類別的使用。關鍵字是abstract。能讓繼承的子類一定覆蓋某個特殊的方法,這種機制就是【抽象(abstract)】。在一個類中,我們可以指定 某個方法為抽象的,而一個抽象的方法不需要編寫方法的內容,也就是說當方法聲明完後,就直接以分號【;】來結束,不用加上左右大括弧。只要有任何一個抽象 方法,那麼這個類就必須成為一個抽象類別,所以我們必須把類的聲明加上abstract這個關鍵字。抽象類別不能產生對象執行個體。abstract只能用在類和 方法上。屬性和變數上沒有意義。
56、介面-一種標準、一些規範。在java中,介面是由一些常量和抽象方法所組成的。關鍵字是 【interface】,使用的格式如下:<限定詞>interface<介面名稱>[extends<介面名稱> s]。解決abstract不能解決的問題。介面中方法的文法聲明跟抽象方法的文法聲明是一樣的,就是是只有方法的聲明,而沒有方法本身,簡單的說就是聲 明完後直接以分號結束整個語句,而不用再加上大括弧。介面中的方法也都全部是抽象方法,只是不需要額外加上abstract這個關鍵字。extends <類名>,implements <介面名>。簡單的說,介面就是一個完全抽象的類。Java用多重介面的方法來完成類的多重繼承機制。implements<介面 1>,<介面2>……。java中存在一種特殊的介面,它只有介面的聲明,而內部是空的,也就是說完全沒有任何的常量和方法的聲明。這 種特殊大額介面稱為【標記介面(marker interface)】。
第9章 Object類的常用方法介紹
57、對象之間的比較,第一種觀點,對象相等是指對象為同一個。包括使用的記憶體。直接用==。第二種觀點,是兩個對象的內容是否相等。用equals方法。
58、理解hash code的含義。
59、引用(reference)與複製(clone)的區別。clone方法的使用。
60、將對象轉為字元的方法【toString】。
61、在設計的類的時候,最好也一併的把這幾個Object的方法覆蓋。
第10章 深入記憶體
62、變數記憶體的使用,變數聲明後,編譯器就分配了記憶體。
63、 對象記憶體的使用,對象聲明後,編譯器只是在記憶體中產生一個對象的引用(reference),它所存放的並不是一個真正的對象執行個體 ,因為對象的執行個體我們還沒產生。所以當一個對象被聲明後,在記憶體中這個對象引用的初始值會是【null】。我們用new這個關鍵字,配合調用類的構造函 數,來產生對象執行個體。但,此時對象引用與對象執行個體並沒有產生關聯。需要使用複製語句使它們關聯。每個對象引用佔用4個位元組的記憶體空間。對象的引用所存放的 是撒對象執行個體真正在記憶體中的地址。對象引用實際佔用的記憶體大小,跟系統(JVM)實現的方法有關,不同的系統大小不一定相同。
64、什麼是數組, 數組是存放量大、性質相同且需要做相同處理的資料。數組可以用在基礎資料型別 (Elementary Data Type)的變數上,當然也可以用在對象上。數組與對象有點相似,分成兩個階段——數組 引用的聲明和數組執行個體的產生。數組聲明格式如下:int a[];和int []a;數組聲明完後,在記憶體中表現的方法也跟對象一樣,也是個引用,而且初始值也是null。產生數組執行個體同樣要用到new關鍵字,在這之後要用賦值語 句進行關聯處理。也可以同時建立和初始化數組,如 int a[]={1,2,3,4}。
65、數組的索引(index),是[]裡面的數字,它表示這個數組中的第幾筆資料。數組的使用比較簡單,就是在陣列變數的名稱後,加上要訪問的索引。索引從0開始到數組的大小減1。
66、數組的length屬性獲得數組的大小。必須注意數組的大小是不能改變的。使用上比較有彈性。
67、 數組的複製。數組不是繼承自java.lang.Object類的對象,所以沒有clone這個用來複製對象執行個體的方法。可以利用迴圈賦值來實現。 java中提供了【System.arraycopy】方法。使用這個方法時需要5個參數,依次是源數組、來源數組資料起始位置、目的數組、目的數組資料 起始位置、複製資料的個數。使用上比較有彈性。arraycopy方法只適用於基礎資料型別 (Elementary Data Type)的數組。相比而言,第二種方法使用JNI的方法,所以速度上會 比較快。arraycopy的三種異常,NULLPointerException,ArrayIndexOutOfBoudsException, ArrayStroeException。
68、Java 本機介面(Java Native Interface (JNI))是一個本機編程介面,它是 Java 軟體開發工具箱(Java Software Development Kit (SDK))的一部分。JNI 允許 Java 代碼使用以其它語言(譬如 C 和 C++)編寫的代碼和程式碼程式庫。Invocation API(JNI 的一部分)可以用來將 JAVA 虛擬機器(JVM)嵌入到本機應用程式中,從而允許程式員從機器碼內部調用 Java 代碼。
預備知識
所 有樣本都是使用 Java、C 和 C++ 代碼編寫的,並可以移植到 Windows 和基於 UNIX 的平台上。要完全理解這些樣本,您必須有一些 Java 語言編程經驗。此外,您還需要一些 C 或 C++ 編程經驗。嚴格來說,JNI 解決方案可以分成 Java 編程任務和 C/C++ 編程任務,由不同的程式員完成每項任務。然而,要完全理解 JNI 是如何在兩種編程環境中工作的,您必須能夠理解 Java 和 C/C++ 代碼。
系統需求
瀏覽器:Netscape 4.x 或更高版本, 或者 Internet Explorer 4.x 或更高版本 ,支援 JavaScript 。 要運行本教程中的樣本,您需要下列工具與組件: Java 編譯器:隨 SDK 一起提供的 javac.exe。 JAVA 虛擬機器(JVM):隨 SDK 一起提供的 java.exe。 本機方法 C 檔案產生器:隨 SDK 一起提供的 javah.exe。 定義 JNI 的庫檔案和本機標頭檔。jni.h C 標頭檔、jvm.lib 和 jvm.dll 或 jvm.so 檔案,這些檔案都是隨 SDK 一起提供的。 能夠建立共用庫的 C 和 C++ 編譯器。最常見的兩個 C 編譯器是用於 Windows 的 Visual C++ 和用於基於 UNIX 系統的 cc。
68、多維陣列在記憶體中的樣子。必須理解。不規則數組的產生。 不規則數組是Java語言的一個重要特點,其他的程式語言像C或是Basic,都只能聲明規則的多維陣列,而且維數有上限。java沒有這個限制。
69、以上討論基礎資料型別 (Elementary Data Type)的數組,現在來看對象數組。防止NullPointerException異常的產生。
70、 變數的存取範圍【scope】,有點像類之間屬性及方法訪問的限制,這些限制是由於存取權限的限定詞、package和繼承這幾種關係組合起來的。變數訪 問範圍大致分為四個等級:第一、類級(static);第二、對象執行個體級;第三、方法級;第四、局域級。怎麼樣區分這幾個層級,必須注意。必須理解這四個 等級。存取範圍和視野的關係剛好相反。記憶體存在的時間。
71、參數的傳遞。以前的程式語言概念參數的傳遞有兩種方法,一是【傳值(call by value)】,另一個是【傳址(call by reference)】。但java裡面只有傳值這種方式。基礎資料型別 (Elementary Data Type)參數值傳遞與類對象型參數值傳遞是不同的。
72、 記憶體回收(garbage collection)。負責運行這個機制的就是【garbage collector】。對象聲明包括兩部分:對象引用和對象執行個體。如果一個對象執行個體不被任何對象引用指到的話,但啟動GC時,就會把對象執行個體回收回去,並 把記憶體釋放調。取消對象引用,只要將它指定為【null】即可。GC是不定時的啟動,也可以手動調用它,方法是【System.gc()】,它會調用 【Runtime.getRuntime.gc()】,這兩個方法都可以使用。finalize方法同樣也是Object類常用的一個方法,與GC有關。 它是在對象被回收前,GC所調用的方法。回收順序與對象執行個體的產生順序有關。既是我們手動調用System.gc(),GC也不見得一定運行,GC正確的 啟動時間無法得知。
第11章 Application與Applet
73、Application的輸出,System類的out屬性是 PrintStream對象,有prinlin方法和print方法,也可以用err屬性是PrintStream對象,有prinlin方法和 print方法,但有區別,out屬性可以重新導向(redirected),err屬性只能輸出到預設的裝置上。Application預設的就是所開啟 的命令列視窗,Applet預設的就是Java Console。 可以用>來實現重新導向。println和print方法都是屬於重載的方法,除了可以接受八種基礎資料型別 (Elementary Data Type)和String類型作為參數外,還可以接 受一般的對象作為參數,編譯器會自動調用這個對象的【toString】方法,char數組也可以作為這兩個方法的參數。
74、 Application的輸入,分為兩種,一是參數輸入(命令列參數),Wrapper類的使用。基礎資料型別 (Elementary Data Type)與Wrapper類的對應關係。 Wrapper類種有相應的parseXXX方法來實現字串轉換為基礎資料型別 (Elementary Data Type)。二是標準輸入,System類的in屬性是InputStream對 象,有read方法來讀取輸入,讀進來是byte對類型,需要轉化為其他類資料型。通常使用InputStreamReader類,然後串連到 BufferedReader類,用BufferedReader類提供的讀取字串的方法【readLine】。
75、系統參數的擷取用【System.getProperties】方法。必須注意系統參數與命令列參數的區別。
76、 System類的使用。setXXX(setOut、setErr、setIn),setProperties和SetProperty的區別。 System.exit(n),虛擬機器會調用Runtime.getRutime.exit(n)方法。currentTimeMills。
77、Runtime類的使用。可以通過exec這個方法來運行一個外部程式。
78、 Appplication必須有一個main的方法,符合四個條件。而一個Applet一定要繼承java.applet.Applet類。main方法 是Application啟動並執行起始點,而Applet啟動並執行起始點在init方法上。Applet中,System.out或System.err方法 來輸出,但System.in方法不能用。Applet有自己的輸入方式,類似於命令列參數的方式。在HTML檔案中,加上參數文法,<param name=<參數名稱> value=<參數值>>。然後在java程式中,應用java.applet.Applet類的【getParam】方法。
79、 Applet基本方法的使用。init、start、stop、destroy、paint。destroy和finalize方法的區別在於使用地點不 同。paint方法的使用。paint方法中有個屬性是Graphics對象,注意Graphics類的【drawString】方法的使用。
80、java的安全性,是指Applet滿足java指定的重重安全規範。四點限制措施。
81、Application和Applet的結合。Java Web Start是取代Applet的機制。
第12章 異常處理
82、異常是指程式在啟動並執行過程中,由於編寫程式的倏忽,外在環境的因素,或是電腦系統本身的問題,都可能導致程式運行時產生錯誤,造成死機或是計算的結果不正確,這些突發的狀況稱為異常。 異常處理是指當程式出現異常時,能夠作出一些應變的處理。
83、java.lang.Throwable類。Exception類(可以控制)和Error類(無法控制)。
84、 RuntimeException常見的有以下幾種:ArithmeticException、 ArrayIndexOutOfBoundsException、ArrayStoreException、ClassCastException、 IllegalArgumentException、NativeArraySizeException、NullPointerException、 SecurityException。由於自己編程引起的。
85、CheckedException常見的有以下幾種:ClassNotFoundExecption、FileNotFoundException、InterrupedException、IOException、SQLException。一些外部因素引起的。
86、Error有OutOfMemoryError、StackOverflowError、UnknowError、AWTError、ThreadDeath。系統級且非常嚴重的錯誤。錯誤原因是記憶體不足或者是運行時掛起。
87、 捕捉和處理異常。主要是針對CheckedException類的異常。try、catch、finally三個關鍵字的使用。處理異常包括以下兩個步 驟:一、把異常的名稱及一些相關的資訊顯示出來,二、用最安全的方法恢複程式的運行。顯示異常資訊用到,toString、 getLocalizedMessage、getMessage、printStackTrace方法。其中printStackTrace方法有三種不 同的重載。彈性(flexibility)。 finally關鍵字的使用注意以下三點:一、沒有異常產生-》進finally區塊-》方法中剩下未啟動並執行程式碼。二、有異常產生-》捕捉到-》進 catch區塊-》finally區塊-》方法中剩下未啟動並執行程式碼;三、有異常產生-》沒有捕捉到-》進finally區塊-》方法中剩下未啟動並執行程 序代碼。
88、注意異常捕捉的順序。越上層的類,越放在下面。
89、throws關鍵字的使用,在方法聲明上拋出異常。throw關鍵字,在方法內部拋出異常。必須注意拋出RuntimeException和CheckedException兩種異常在使用上的差別。
90、定義自己的Exception。
91、拋出異常方法覆蓋的問題。注意兩點:一、不可拋出原有方法拋出異常類的父類或上層類;二、拋出的異常類數目不能筆原有的方法拋出的還多。主要是因為編譯時間拋出的異常類無法自動轉化為父類中所聲明的異常類。
第13章 容器(Container)與布局(Layout)
92、什麼是AWT(Abstract Windowing Toolkit),什麼是GUI(Graphical User Interface)圖形使用者介面。AWT包的結構圖。
93、 Container包括Frame和Panel。Frame是先構造,然後setSize,然後再setVisible。理解Deprecation。 Frame的常用方法。記住【Ctrl】+【C】來停止程式的方法。Panel不能獨立出現在畫面上,必須放在某個Container中才行,例如 Frame或瀏覽器裡面。Applet本身就是一個panel。add方法的使用。
94、什麼是Layout。【setLayout(< xxxLayout>)】方法。有五個基本的Layout類。Frame預設的布局是BorderLayout類。Panel預設的布局是 FlowLayout。另外還有CardLayout、GridLayout、GridBagLayout。也可以設計自己的Layout類。
95、pack和setSize方法的區別。
96、 如果不使用Layout,可以使用【setSize】和【setLocation】方法來代替。最好使用Layout類。
第14章 事件處理
97、什麼是事件【event】。事件就是別人給予它的一些操作。明白事件處理結構:事件本身、事件產生的來源、誰來處理事件。
98、什麼是委託處理模式【Delegation Model】。事件處理的機制。
99、AWT Event類的結構圖。分為兩類:Low-level和senmantic。
100、【Listener】這個介面(interface)與【Adapter】類的相對應。
101、一個對象可以委託好幾個類來處理相同的事件,一個處理事件的類也可以同時處理不同對象所產生的事件。這種情況稱為【multiplexer】。
102、 WindowEvent、MouseEvent、KeyEvent類事件處理的介面,類和方法。以及其他常用的Low-level Event類,分別是ContainterEvent和FocusEvent。
103、Swing是Java所設計的另外一組更豐富、功能更多的GUI空間。理解Swing和AWT的區別。