第1章 Java語言概述與面向對象思想 1
1.1 Java語言的發展 1
1.1.1 Java語言的產生 1
1.1.2 Java語言的發展 1
1.2 Java語言的特色 2
1.3 面向對象與面向過程的差別 3
1.3.1 面向過程思想回顧 4
1.3.2 面向對象思想介紹 4
1.4 面向對象程序設計中的主要概念和特徵 4
1.4.1 主要概念 5
1.4.2 主要特徵 5
*1.5 Java與C++的差別 5
1.6本章小結 5
習題 5
第2章 Java語言開發環境 6
2.1 JDK 6
2.1.1 JDK的簡介 6
2.1.2 JDK的構成 6
2.1.3 JDK的使用 6
2.2 IDE 8
2.2.1 IDE簡介 8
2.2.2 JBuilder 9
2.2.3 Eclipse 9
2.2.4 相關資源 9
2.3 Project管理 9
2.3.1 Project的含義 9
2.3.2 可行的Project組織模式 9
2.3.3 主要開發工具的Project目錄 10
2.4 本章小結 10
習題 10
第1章 Java語言概述與面向對象思想
1.1 Java語言的發展
1.1.1 Java語言的產生
上世紀90年代初期,Sun公司在研究一種適用於將來的智能設備的編程語言,該語言要具備一些新的特性,以免C++的一些不足。
該語言起初命名爲Oak,來源於語言做者Gosling辦公室窗外的一棵橡樹(Oak)。後來在註冊時候遇到了衝突,因而就從手中的熱咖啡聯想到了印度尼西亞一個盛產咖啡的島嶼,中文名叫爪哇,Java語言得名於此。
隨着Internet的迅速發展,Web應用日益普遍,Java語言也獲得了迅速發展。1994年,Gosling用Java開發了一個實時性較高、可靠、安全、有交互功能的新型Web瀏覽器,它不依賴於任何硬件平臺和軟件平臺。這種瀏覽器名稱爲HotJava,並於1995年同Java語言一塊兒,正式在業界對外發表,引發了巨大的轟動,Java的地位隨之而獲得確定。此後的發展很是迅速。
Java編程語言的句法與C++的句法類似,語義則與Small Talk TM的語義類似。Java編程語言可被用來建立任何常規編程語言所能建立的應用程序。
設計Java編程語言的主要目標是:
提供一種易於編程的語言,從而消除其它語言在諸如指針運算和存儲器管理方面影響健壯性的缺陷。
利用面向對象的概念使程序真正地成爲徹底面向對象的程序。
爲使代碼儘量清晰合理、簡明流暢提供了一種方法。
爲得到以下兩點益處提供一種解釋環境:
提升開發速度──消除編譯─連接—裝載—測試周期;
代碼可移植性──使操做系統能爲運行環境作系統級調用。
爲運行不止一個活動線程的程序提供了一種方式。
經過容許下載代碼模塊,從而當程序運行時也能動態支持程序改變。
爲那些保證安全性而裝載的代碼模塊提供了一種檢查方法。
精心開發的Java核心技術爲上述目標的實現提供了保證,其中包括以下幾個主要技術:
Java虛擬機
自動垃圾收集
代碼安全性
1.1.2 Java語言的發展
Java語言的發展目標並不只僅是一種編程語言,同時還要構建一種開發環境、一種應用環境、一種部署環境。
做爲Java語言的最基本支持,Sun公司在1996年發佈了Java開發工具包JDK 1.0(JDK是Java Develop Kit的簡稱),其中包括了進行Java開發所須要的各類實用程序(編譯、執行、文檔生成器等等)、基本類庫(至關於C語言的函數庫以及C++的類庫)、程序實例等等。1998年,Sun公司發佈了更新的JDK 1.2,因爲在技術思想方面與之前有不少改進,因此此後的Java技術通常稱之爲Java 2。隨後,針對不一樣的領域特徵,Java技術分爲三種不一樣的平臺(最新的稱謂又去掉了意義模糊的2,如JavaSE):
J2SE——標準Java平臺
J2SE是Java語言的標準版,指的就是JDK(1.2及其之後版本),包含Java基礎類庫和語法。它用於開發具備豐富的GUI(圖形用戶界面)、複雜邏輯和高性能的桌面應用程序。
J2EE——企業級Java平臺
J2EE創建在J2SE之上,用於開發和實施企業級應用程序。它是一個標準的多層體系結構,能夠將企業級應用程序劃分爲客戶層、表示層、業務層和數據層,主要用於開發和部署分佈式、基於組件、安全可靠、可伸縮和易於管理的企業級應用程序。
J2ME——嵌入式Java技術平臺
J2ME也是創建在J2SE之上,主要用於開發具備有限的鏈接、內存和用戶界面能力的設備應用程序。例如移動電話(手機)、PDA(電子商務)、可以接入電纜服務的機頂盒或者各類終端和其餘消費電子產品。
任何語言創建的應用程序的類型或多或少都與應用程序的運行環境有關,而Java語言通常能夠創建以下的兩種程序:
Applications
Applications是一種獨立的程序,它是一種典型的通用程序,可運行於任何具有Java運行環境的設備中。
Applets
Applets是一種貯存於WWW服務器上的用Java編程語言編寫的程序,它一般由瀏覽器下載到客戶系統中,並經過瀏覽器運行。Applets一般較小,以減小下載時間,它由超文本標識語言(HTML)的Web頁來調用。
Java運行環境具備一些特殊性,或者有不少特殊的人爲創建的運行環境,因此Java編程中常常創建各類組件,它們能夠在特定環境中運行,如Servlet、JavaBean、JSP等。
在Java技術體系中,有不少免費或非免費的第三方Java組件,他們每每提供了某一方面的解決方案,能夠應用在不少項目的開發過程當中。
學習Java語言須要逐漸瞭解Java技術體系,從局部細節開始學習,從總體中進行認識並選擇方向,從應用中進行鞏固提升。
1.2 Java語言的特色
Java語言適用於Internet環境,是一種被普遍使用的網絡編程語言,它具備以下的一些特色:
簡單
Java語言的語法規則和C++相似,但Java語言取消了指針和多重繼承,統一使用引用來指示對象(C++中有兩種形式,其實是兩種產生對象的途徑,而Java中只有一種),經過自動垃圾收集免去了程序設計人員對於內存塊的釋放工做。
面向對象(近於徹底)
Java語言爲了提升效率,定義了幾個基本的數據類型以非類的方式實現,餘下的全部數據類型都以類的形式進行封裝,程序系統的構成單位也是類。於是幾乎能夠認爲是徹底面向對象。
平臺無關性(可移植、跨平臺)
Java虛擬機(JVM)是在各類體系結構真實機器中用軟件模擬實現的一種想象機器,必要時候能夠用硬件實現。
固然,這些虛擬機內部實現各異,但其功能是一致的——執行統一的Java虛擬機指令。
Java編譯器將Java 應用程序的源代碼文件(.java)翻譯成Java字節碼文件(.class),它是由Java虛擬機指令構成的。因爲是虛擬機器,於是Java虛擬機執行Java程序的過程通常稱爲解釋。
依賴於虛擬機技術,Java語言具備與機器體系結構無關的特性,即Java程序一旦編寫好以後,不需進行修改就能夠移植到任何一臺體系結構不一樣的機器上。
從操做系統的角度看,執行一次Java程序的過程就是執行一次Java 虛擬機進程的過程。
面向網絡編程
Java語言產生之初就面向網絡,在JDK中包括了支持TCP/IP、HTTP和FTP等協議的類庫。
多線程支持
多線程是程序同時執行多個任務的一種功能。多線程機制可以使應用程序並行執行多項任務,其同步機制保證了各線程對共享數據的正確操做。
良好的代碼安全性
運行時(Runtime)一詞強調以動態的角度看程序,研究程序運行時候的動態變化,也用運行時環境一詞表達相似的含義。
Java技術的不少工做是在運行時完成的,如增強代碼安全性的校驗操做。
通常地,Java技術的運行環境執行以下三大任務:
加載代碼——由類加載器執行
類加載器爲程序的執行加載所須要的所有類(儘量而未必同時)。
校驗代碼——由字節碼校驗器執行
Java代碼在實際運行以前要通過幾回測試。字節碼校驗器對程序代碼進行四遍校驗,這能夠保證代碼符合JVM規範而且不破壞系統的完整性。如--檢查僞造指針、違反對象訪問權限或試圖改變對象類型的非法代碼。
執行代碼——由運行時的解釋器執行
自動垃圾收集
許多編程語言都容許在程序運行時動態分配內存塊,分配內存塊的過程因爲語言句法不一樣而有所變化,但老是要返回指向存儲區起始位置的指針。
在C,C++ 及其它一些語言中,程序員負責取消分配內存塊。有時這是一件很困難的事情。由於程序員並不老是事先知道內存塊應在什麼時候被釋放。當在系統中沒有可以被分配的內存塊時,可致使程序癱瘓,這種程序被稱做具備內存漏洞。
當分配內存塊再也不須要時,程序或運行環境應取消分配內存塊。
垃圾收集就是將再也不須要的已分配內存塊回收。
在其它通常的語言中,取消分配是程序員的責任。
Java編程語言提供了一種系統級線程以跟蹤存儲區分配,來完成垃圾收集:
可檢查和釋放再也不須要的存儲塊
可自動完成上述工做
可在JVM實現週期中,產生意想不到的變化
良好的代碼健壯性
Java可以檢查程序在編譯和運行時的錯誤。類型檢查能幫助用戶檢查出許多在開發早期出現的錯誤。同時不少集成開發工具(IDE)的出現使編譯和運行Java程序更加容易,而且不少集成開發工具(如Eclipse)都是免費的。java
1.3 面向對象與面向過程的差別
一種程序設計語言的產生,不只是程序設計技術的改進,也包含了表達和認知思想的進步。
以C語言爲表明的部分早期語言,被稱爲面向過程的語言,不只由於其程序設計的表達形式是以過程爲基本元素,本質上更在於此時對計算機化的系統的理解的主導思想仍是控制流或者數據流的,構成系統的要素是模塊——處理邏輯。
面嚮對象語言的產生,是由於對於系統的理解或抽象到了更爲高級的層次。此時的認知思想不只更接近於現實世界,其抽象程度也很高。於是,既有易懂的一方面,也有難懂的另外一方面,就看理解的境界了。
1.3.1 面向過程思想回顧
面向過程思想和程序設計語言的體現,能夠簡單總結爲如下幾條:
對系統的認識採用結構化分析的過程——自頂向下,逐步求精地進行功能分解;
每一個功能就是處理數據的一個模塊,於是IPO描述充分刻畫了模塊的內外特徵;
每一個模塊都是控制流的,於是有典型的三種程序結構——順序、分支、循環;
模塊間的關係經過調用維繫,於是模塊成爲了函數,這也是面向過程方式下最主要的代碼重用方式;
儘管函數調用有參數和返回值,但數據老是和函數分開的,不只有了著名的斷言——程序=算法+數據,也使得絕對平等產生了無序的麻煩——全部的函數和數據的關聯關係沒有限制;
若是要使用數據流,那麼只能是在數據產生以後的適當時機調用函數。
這一時期的主要缺點是:對系統的理解比較難,系統地開發效率低,代碼的可重用性差。
1.3.2 面向對象思想介紹
面向對象思想,對現實世界採用直觀的理解,計算機化時候採用深度的抽象,簡單地能夠總結以下:
系統是由事物構成的,事物之間是有聯繫的,複雜的事物也是系統;
系統與系統、系統與事物、事物與事物之間是有明確界限(邊界)的;
系統或事物的狀態刻畫能夠用屬性表示,屬性通常是些簡單的數據,若是複雜那就是事物了;
系統或事物的狀態會發生變化,稱爲行爲,產生變化是有緣由的(內部的或外部的),變化的過程多是複雜的;
不一樣的事物之間會具備共同的屬性和行爲,共同的極端情形就是徹底包含。
基於以上的認識,一個運行時(動態)的具體系統或事物,是由幾個更小的具體事物構成(極端的事物就是一個簡單的屬性數據),它們是不斷髮生變化的。若是對事物這一律念進行了有效的抽象,那麼問題就迎刃而解。
首先,將任何一個具體的事物稱爲對象(Object),它的極端情形就是過去的變量;事物是分類的,每一類事物都具備統一的屬性和行爲,即類型——抽象數據類型,簡稱爲類(Class);行爲既然是過程,那麼就抽象成函數,命名爲方法,以示區別。
例如:
描述身高或姓名,各自只是一個簡單的數據變量;
描述一個學生,可使用學號、姓名、宿舍、班級等;那更換宿舍算什麼呢!
那描述宿舍、班級,又要有許多個項目。程序員
1.4 面向對象程序設計中的主要概念和特徵
面向對象程序設計(Object Oriented Programming,OOP)語言中,爲了進行更爲高度的抽象,會引入一些現實世界中難於找到的概念,但對於一個程序語言來講確實頗有價值的。如下暫時介紹的概念基本上都來源於對現實世界的抽象,要從程序設計的角色中去理解它們。
面向對象程序設計使系統更易於理解,也使代碼具備更好的重用性、可擴展性、易於管理和維護。
1.4.1 主要概念
一、類
類是對一類事物的抽象表示,其角色就至關於數據類型,固然能夠算做複雜的數據類型。如學生、宿舍、班級。
二、對象
對象表示一個具體的事物,其角色就是變量,即一個複雜數據類型——xx類的變量。如周瑜、張飛、瑜飛居,飛虎班。
三、成員
一個事物的構成元素,討論類的時候就是虛擬的,討論對象的時候就是具體的。如在類中,一個變量屬於成員——成員變量,一個對象也屬於成員——成員對象,一個函數也屬於成員——成員方法。
1.4.2 主要特徵
OOP語言有三個特徵:封裝、繼承及多態性。
一、封裝
類的構成包括成員變量/對象與成員方法,這樣將相關的數據與函數包裝在一塊兒,同其餘的類相區分,就是封裝。顯然,避免了面向過程語言的平行缺陷,說明了類和成員之間的所屬關係。進一步地,能夠限制類的成員在外部的可見性,那麼就將封裝體現得更完美。
二、繼承
當一種事物甲徹底是另外一種事物乙的特例,那麼,通常地,類甲只是比類乙多出一些成員變量/對象與成員方法,稱爲類甲繼承類乙,類甲稱爲(類乙的)子類,類乙稱爲(類甲的)父類。
父類也稱爲基類、超類,子類也稱爲導出類、派生類。
顯然編寫子類就沒有必要重複書寫父類中乙有的代碼部分,這是OOP中最典型的代碼重用。
三、多態
多態表示一個類的某種行爲存在多種實現版本。簡單的狀況是在一個類中,給出多種不一樣的實現,複雜的狀況是在多個子類中各自給出不一樣的實現。
*1.5 Java與C++的差別
1.6本章小結
習題
1.解釋Java語言的三種平臺。
2.解釋支撐Java語言目標的三種主要技術(自查資料完善)。
3.關於面向對象與面向過程的不一樣,從問題理解和問題表示兩種角度,按照我的的理解和認識,例示其不一樣的地方。算法
第2章 Java語言開發環境
2.1 JDK
2.1.1 JDK的簡介
能夠從Sun公司的官方網站(http://java.sun.com)上下載Java開發工具包(JDK)。沒必要要求最新的版本,注意Java SE、Windows平臺等信息。如:
jdk-1_5_0_17-windows-i586-p.exe
2.1.2 JDK的構成
2.1.3 JDK的使用
一、安裝
過程簡單,基本使用默認設置,注意安裝目錄(最好簡單化)。
二、設置環境變量
環境變量——應用程序運行時候須要的一些相對固定值的參數。
例如,Java開發工具等軟件須要使用JDK,那麼必須知道JDK在系統中的什麼位置,因而你們約定在操做系統中定義一個名稱爲JAVA_HOME的環境變量,其內容表示JDK的安裝目錄。
在win2000/2003中的方法:操做【個人電腦】—【屬性】—【高級】—【環境變量】後,在【系統變量】區域進行新建、編輯等操做便可。
JAVA_HOME——必設的環境變量,表示JDK安裝目錄(如C:\Java\jdk1.5.0_17)。(第一次是新建)
Path——名稱程序查找路徑。若是須要在命令行方式下使用Java的話,修改其內容,在前面增長JDK命令目錄,不一樣項目中間使用分號分隔。(修改,增長%JAVA_HOME%\bin)
CLASSPATH——類庫設置。(新建,.; C:\Java\jdk1.5.0_17 \lib\tools.jar)。
三、使用
建立程序
可使用最簡單的文本編輯器,編寫以下的程序,保存的名字必須是Hello.java。
package chap01; //當前類所屬包名稱編程
public class Hello //當前類名
{
public static void main(String[] args) //應用程序的主函數
{
System.out.println("Hello, 個人第一個Java應用程序!"); //輸出函數
}
}
程序內容解釋
在以上的程序中,必須瞭解並逐漸熟悉的關鍵點:
聲明包名——chap01,指明類的位置(所屬包)、至關於文件夾名稱,用途在於方便類的組織和管理;
聲明類名——Hello,與程序文件名相同(指必須的public類);
類屬性——public,描述類的可見性,即類和其它類、包的關係;
主函數——main,程序入口(僅Applications類型須要);
主函數屬性——public static,公有、靜態(特殊的函數);
主函數的參數——String[] args,命令行參數(若是執行程序時候給了參數,將會由系統封裝成字符串數組傳遞到這裏,程序內部能夠今後得到並處理);
輸出函數——這是Java類庫中提供的一個在標準輸出設備(顯示器、字符輸出,對於操做系統來講是能夠重定向的設備)顯示文本的函數。注意其中出現的類名稱System、成員對象名稱out、成員方法名稱println,書寫語法以及參數。從幫助中能夠方便地查找到函數的參數語法;
整個類的框架——括號等表達的結構。
註釋格式——//表示行註釋,本行後面的內容爲註釋;/**/表示塊註釋,其中的內容爲註釋。
以上的內容在一個Java應用程序中幾乎是必需的。
典型源文件佈局
一個Java源文件可包含三個「頂級」要素:
一個包聲明(可選,沒有表示頂級包,但有點麻煩);
任意數量的導入語句import,表示將要使用的外部Java類;
類和接口聲明。
該三要素必須以上述順序出現。即,任何導入語句出如今全部類定義以前;若是使用包聲明,則包聲明必須出如今類和導入語句以前。
若是須要或者說是遵循編程規範,那麼在文件開頭可使用以下形式的文檔註釋:
/**
文檔信息描述
*/
這種形式的註釋能夠被專門的文檔生成工具所處理(由javadoc命令生成的HTML文件)。
程序編譯
以下圖中的命令javac Hello.java。
注意編譯後的文件變化。
程序運行
以下圖中的命令java chap01.Hello。
命令窗口與簡單命令解釋
有多種形式打開以下的命令窗口,注意其中常見的命令的含義以及其成功執行的前提。一條命令通常由 命令動詞+空格+參數 構成,並以回車結束。命令動詞中若是不包含路徑那麼將從默認的路徑中查找命令程序,命令可能的參數內容以及形式取決於程序自己,若是須要,可使用諸如 java -? 或 java –help 形式得到。
d:——切換當前分區;
cd——切換當前某分區下的工做文件夾,須要參數;
md——建立新的文件夾,須要參數;
copy——拷貝文件;
…………
windows
2.2 IDE
2.2.1 IDE簡介
IDE的含義是Java集成開發環境(Integrated Development Environment,IDE)。
有不少IDE可供選擇,典型的如JBuilder、Eclipse等。
2.2.2 JBuilder
JBuilder是使用Java開發的,支持J2EE技術的Java集成開發環境。但JBuilder不是徹底免費的。
JBuilder的安裝程序存放在機器中的C:\java\JBX中,兩個目錄至關於兩張光盤,安裝時候當出現安裝項目列表時候只選第一個便可,安裝後的處理按照其中的說明文件進行,解密環節或許須要執行若干次。
最好先安裝JDK。
若是出現解密命令失敗,通常是path環境變量設置問題。
2.2.3 Eclipse
Eclipse是基於Java的,開放源碼的、可擴展的應用開發平臺,它爲編程人員提供了一流的Java集成開發環境(Integrated Development Environment,IDE)。是一個能夠用於構建集成Web和應用程序的開發工具平臺,其自己並不會提供大量的功能,而是經過插件來實現程序的快速開發功能。
Eclipse是一個成熟的可擴展的體系結構。它爲建立可擴展的開發環境提供了一個平臺。這個平臺容許任何人構建與環境或其餘工具無縫集成的工具,而工具與Eclipse無縫集成的關鍵是插件。Eclipse還包括插件開發環境(PDE),PDE主要針對那些但願擴展Eclipse的編程人員而設定的。這也正是Eclipse最具魅力的地方。經過不斷的集成各類插件,Eclipse的功能也在不斷的擴展,以便支持各類不一樣的應用。
雖然Eclipse是針對Java語言而設計開發的,可是它的用途並不侷限於Java語言,經過安裝不一樣的插件Eclipse還能夠支持諸如C/C++、PHP、COBOL等編程語言。
Eclipse利用Java語言寫成,因此Eclipse能夠支持跨平臺操做,可是須要SWT(Standard Widget Toolkit)的支持,不過這已經不是什麼大問題了,由於SWT已經被移植到許多常見的平臺上,例如Windows、Linux、Solaris等多個操做系統,甚至能夠應用到手機或者PDA程序開發中。
2.2.4 相關資源
須要關注各家公司的官網、以及對應中文網站。
還有如www.csdn.net這樣的綜合性技術網站。
2.3 Project管理
2.3.1 Project的含義
Project即項目或工程,幾乎全部的IDE,使用時候必須先創建Project,才能夠建立程序、編譯程序、運行程序、修改程序、調試程序。
若是有一種很是理想和完善的IDE工具,那麼它能夠管理一個Project的全部文檔資源和生命週期。最好是從軟件工程的角度去思考和理解Project。
2.3.2 可行的Project組織模式
學習程序設計語言,首先要學會管理本身的代碼資源,使用合理的組織方式。
影響實際項目開發中的工程組織方式有多種因素:軟件生命週期的不一樣階段、項目的功能結構、項目關聯人員角色、文檔分類等。
在本書的學習中,建議每章組織爲一個工程,章內全部例子、習題以及本身建立的程序可以分門別類(文件夾=包)進行組織。
平時管理好本身的勞動成果,要有代碼資源的積累。
2.3.3 主要開發工具的Project目錄
2.4 本章小結
習題
1. 創建一個總結文檔,分章節記錄之後學習實踐過程當中的一些關鍵的操做過程和技巧、問題的解決方法、總結等。以便之後查閱。
2.練習JDK的安裝、編譯並執行Hello或本身編寫的應用程序。
3.改造Hello程序,自定義三個整型變量a、b、c並賦值,而後適當地處理保證a最大、c最小,再按從大到小順序輸出。
編程時候主函數的代碼中,除了輸出函數以外,其它能夠按照c語言的語法進行。
4. 安裝JBuilder,嘗試建立工程、創建程序、編譯、運行、修改、調試。
此過程當中,關注其中的少許主菜單(文件、工程、運行)中的主要功能。
4. 查閱JBuilder幫助,經過System類最終找到輸出函數print系列適當閱讀。
數組