本書用面向對象的思想介紹了如何運用Java語言基礎進行Java程序的設計。全書共分9章, 包括Java入門、Java語言基本語法、Java面向對象編程、異常處理、Java Applet程序、圖形化用戶界面編程、線程機制、輸入輸出流和Java數據庫技術。其中前兩章使用記事本編輯Java程序和在DOS界面下使用命令行進行編輯和運行程序, 這樣有利于初學者熟悉和掌握Java的基本語法和程序格式; 后面的章節使用Eclipse作為Java程序開發環境, 圍繞“學生信息管理系統”項目的分析和開發過程逐漸展開。本書注重培養讀者使用面向對象的思維方法分析問題與解決問題的能力, 注重使用Eclipse提高學習知識與開發程序的效率。全書內容循序漸進, 結構合理, 每節案例都具有代表性, 每章最后的綜合案例是對本章知識的梳理和總結, 充分運用“項目驅動式”進行知識講解。
1.一線教師傾力加盟
2.案例采用進階設計。每個案例約分成3~8階段分解和設計,一部分案例采用逐步完善并進一步優化方法,最終形成一個完整的程序;另一部分案例采用劃分為多個類并逐個類分析和講解的方法。
3.針對性強。案例的選題貼近學生平時的興趣點,注重提升學生的“創新和創業”能力的培養。
4.教輔材料齊全。本教材有配套的教案、課件和案例等。
前言
伴隨我國經濟結構的調整,科技興國戰略的進一步實施,科學、工業、國防和教育行業需要大批高素質的計算機專門人才。
我國高等教育事業取得了舉世矚目的成就,但也面臨不少深層次的矛盾和困難,主要體現在:高等教育規模居世界之首,但“大而不強”的問題比較突出;以質量求生存、求發展的意識有所強化,但對提高質量投入的資源與精力依舊不足、教學的中心地位仍欠重視;教育體制機制改革雖在持續推進,但仍不能適應經濟發展新常態、釋放創新活力的需求;教育國際化水平不斷提高,但我國高等教育的國際話語權和競爭力依舊不強。
隨著我國高等教育水平不斷提高,與發達國家高等教育的差距日益縮小,由此,自身創新的任務愈發凸顯和繁重。以新發展理念引領高等教育新發展、以創新的思維發展教育事業,著力深化教育理念、培養模式、教學內容方法手段的改革,著力培養具有社會責任感、創新精神和實踐能力的人才。作為一名普通的高校教師,除了提升自身能力和素質,就是對教材的更新和創新,因為要培養一流的計算機人才必須要有一流的名師指導和精品的教材輔助。
本書既注重基礎知識的講解,同時更注重知識靈活運用和創新思維的培養。本書的特色有以下4點。
1.一線教師傾力加盟
一線教師傾力加盟參與編寫教程內容和教學案例的設計;所有案例都通過上機調試,能夠正確運行;依托案例來講解和分析Java語言的基礎知識,注重工程技術能力的培養。
2.案例采用進階設計
每個案例分成3~8階段來分解和設計,一部分案例采用逐步完善并進一步優化方法,最終形成一個完整的程序;另一部分案例采用劃分為多個類并逐個類分析和講解的方法。總之,從簡到繁、從易到難,使學生在學習編程的過程有緩沖的空間,不會感到太大的壓力。
3.針對性強
案例的選題貼近學生平時的興趣點,注重提升學生的“創新和創業”能力的培養。4.教輔材料齊全
本書有配套的教案、課件和案例等。
參加本書編寫工作的有:第一主編遼寧科技學院講師胡楠(編寫第3章、第5~9章),第二主編遼寧科技學院講師馬志財(編寫第1章、第2章和第4章)。全書由主編胡楠統稿,后又根據出版社的意見進行了必要的修改和定稿。
限于編者的水平,書中難免出現疏漏之處,懇請廣大師生和讀者提出寶貴意見和建議,以便再版修訂時改正。
編者2017年2月
第1章Java入門1
1.1Java語言概述1
1.1.1Java語言發展史1
1.1.2Java的特點2
1.1.3Java平臺體系結構2
1.2Java運行環境及配置4
1.2.1JDK安裝包的下載和安裝4
1.2.2Java環境配置7
1.2.3Eclipse的安裝和基本使用8
1.3Java例子程序12
1.3.1Java程序開發步驟12
1.3.2Java Applet(小程序)開發步驟14
課后上機訓練題目15
第2章Java語言基本語法16
2.1Java程序結構16
2.1.1源代碼文件框架16
2.1.2注釋符16
2.1.3標識符、關鍵字和轉義符17
2.2數據類型、變量和常量20
2.2.1數據類型20
2.2.2變量與常量21
2.3運算符和表達式23
2.3.1算術運算符23
2.3.2關系運算符24
2.3.3邏輯運算符25
2.3.4位運算符26
2.3.5賦值運算符27
2.3.6其他運算符及其表達式282.3.7運算符的優先級30
2.3.8表達式30
2.4Java流程控制32
2.4.1分支語句32
2.4.2for循環語句40
2.4.3while循環結構44
2.4.4dowhile循環結構46
2.4.5break語句和continue語句48
2.4.6流程控制綜合案例——制作日歷50
2.5數組的使用56
2.5.1數組的聲明56
2.5.2數組的創建57
2.5.3數組綜合案例——學生成績管理系統61
課后上機訓練題目67
第3章Java面向對象編程68
3.1類68
3.1.1類的定義和聲明68
3.1.2類的成員變量69
3.1.3類的成員方法70
3.1.4方法重載73
3.1.5構造方法74
3.2對象76
3.2.1使用new實例化對象77
3.2.2對象的使用77
3.2.3方法的參數傳值78
3.2.4對象的銷毀82
3.3類的封裝83
3.3.1包機制83
3.3.2訪問權限86
3.3.3讀寫訪問器88
3.3.4靜態成員的訪問方法90
3.4繼承92
3.4.1父類和子類92
3.4.2super和this關鍵字95
3.4.3最終類和抽象類98
3.5接口100
3.5.1接口的聲明與實現100
3.5.2常用的系統接口104
3.6多態105
3.6.1多態的實現條件105
3.6.2靜態多態與動態多態105
3.6.3靜態綁定與動態綁定105
3.7內部類107
3.7.1內部類的聲明和使用107
3.7.2內部類的類型107
3.8常用類112
3.8.1java.lang包中的基礎類112
3.8.2java.util包中的集合類116
3.9面向對象編程案例——學生成績管理系統119
課后上機訓練題目126
第4章異常處理127
4.1異常的概述127
4.2異常類——Throwable128
4.2.1Exception類及其子類128
4.2.2Error類及其子類129
4.3Java異常處理機制130
4.3.1捕捉異常130
4.3.2拋出異常132
4.3.3異常處理舉例132
4.4用戶自定義的異常類135
課后上機訓練題目136
第5章Java Applet程序137
5.1Applet的運行原理137
5.1.1Applet概述137
5.1.2Applet類的層次138
5.1.3Applet的生命周期138
5.1.4Applet圖形的顯示和刷新139
5.1.5Applet的創建和執行140
5.2HTML中的Applet標記和屬性142
5.3Java Applet程序案例——簡單圖形展示143
課后上機訓練題目145
第6章圖形化用戶界面編程146
6.1AWT和Swing146
6.1.1AWT 概述147
6.1.2Swing概述147
6.1.3AWT與Swing的關系148
6.1.4Swing組件149
6.2Swing的容器組件151
6.2.1Swing頂層容器151
6.2.2Swing普通容器158
6.3Swing常用組件163
6.3.1標簽(JLabel)163
6.3.2文本框(JTextField)與密碼框(JPasswordField)163
6.3.3文本域(JTextArea)164
6.3.4按鈕(JBotton)165
6.3.5單選按鈕(JRadioButton)167
6.3.6復選框(JCheckBox)169
6.3.7選擇框(JComboBox)170
6.3.8列表框(JList)170
6.4Swing高級組件172
6.4.1表格(JTable)172
6.4.2樹(JTree)175
6.4.3菜單(JMenuBar)178
6.4.4進度條(JProgressBar)182
6.5布局管理器183
6.5.1BorderLayout布局管理器183
6.5.2FlowLayout布局管理器183
6.5.3GridLayout布局管理器184
6.5.4GridBagLayout布局管理器184
6.5.5CardLayout布局管理器185
6.6事件處理188
6.6.1事件類和事件監聽器188
6.6.2事件處理機制190
6.6.3焦點事件192
6.6.4選項事件193
6.6.5鍵盤事件196
6.6.6鼠標事件197
6.6.7窗口事件200
6.7圖形用戶接口案例——計算器202
課后上機訓練題目207
第7章線程機制208
7.1線程簡介208
7.1.1線程的概念208
7.1.2Runnable接口和Thread類209
7.2線程的實現210
7.2.1繼承Thread類創建線程210
7.2.2實現Runnable接口創建線程211
7.3線程的狀態與調度212
7.3.1線程的生命周期212
7.3.2線程的優先級和調度策略213
7.4線程狀態的切換214
7.4.1線程的啟動和終止214
7.4.2線程的就緒和阻塞216
7.5線程的同步217
7.5.1資源沖突217
7.5.2同步和鎖 219
課后上機訓練題目222
第8章輸入輸出流223
8.1輸入輸出流概述223
8.1.1數據流基本概念223
8.1.2數據流類介紹224
8.2字節流227
8.2.1InputStream和OutputStream227
8.2.2FileInputStream和FileOutputStream228
8.2.3ByteArrayInputStream和ByteArrayOutputStream 231
8.2.4BufferedInputStream和BufferedOutputStream233
8.2.5SequenceInputStream236
8.2.6System.in和System.out238
8.3字符輸入和輸出239
8.3.1Reader和Writer239
8.3.2InputStreamReader和OutputStreamReader240
8.3.3FileReader和FileWriter242
8.3.4BufferedReader和BufferedWriter242
8.3.5StringReader和StringWriter243
8.4文件246
8.4.1File類246
8.4.2RandomAccessFile類249
8.5Java對象串行化252
8.5.1串行化的概念252
8.5.2串行化的方法253
課后上機訓練題目255
第9章Java數據庫技術256
9.1數據庫簡介256
9.1.1關系數據庫概述256
9.1.2MySQL數據庫簡介258
9.1.3MySQL Workbench簡介262
9.2JDBC數據庫編程263
9.2.1JDBC技術介紹264
9.2.2使用JDBC訪問數據庫264
9.2.3JDBC高級特性276
9.3數據庫編程案例——學生管理系統291
課后上機訓練題目301
參考文獻302
第1章Java入門任務目標
(1)了解Java語言的發展史。
(2)掌握JDK的安裝、環境變量的設置及常用命令的使用;掌握Java集成開發環境Eclipse的使用。
(3)掌握JavaApplication與JavaApplet程序結構、編譯、運行的過程。
1.1Java語言概述
Java語言是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言。Java技術具有卓越的通用性、高效性、平臺移植性和安全性。
1.1.1Java語言發展史
1991年,美國Sun公司的某個研究小組為了能夠在消費類電子產品上開發應用程序,積極尋找合適的編程語言。消費電子產品種類繁多,包括電冰箱、電視機頂盒、微波爐等,即使是同一類消費電子產品所采用的處理芯片和操作系統也不相同,也存在著跨平臺的問題。研究小組考慮是否可以采用當時最流行的C++語言來編寫消費電子產品的應用程序,但是研究表明,對于消費電子產品而言C++語言過于復雜和龐大,安全性也并不令人滿意。于是,BillJoy領導的研究小組就著手設計和開發出一種語言,稱之為Oak語言(橡樹語言)。該語言簡化了C++語言,保留了C++語言的大部分語法規則,去掉了頭文件、預處理、指針、運算符重載、多繼承等功能。
但是Oak語言在商業上并未獲得成功。時至1995年,互聯網在世界上蓬勃發展,Sun公司發現Oak語言所具有的跨平臺、面向對象、安全性高等特點非常符合互聯網的需要,于是改進了該語言的設計,并把Oak更名為Java后,Sun公司于1995年5月23日正式對外發布。Java是印度尼西亞一個以盛產咖啡而聞名的小島,而程序員們往往喜歡喝咖啡,因此起名為Java語言。看來,目前Java這杯咖啡已經飄香在世界各地。1.1.2Java的特點
Java語言是一種適用于網絡編程的語言,它的基本結構與C++極為相似,但卻簡單得多。它集成了其他一些語言的特點和優勢,又避開了它們的不足之處。它的主要特點如下。
1.簡單性
Java與C++相比,不再支持運算符重載、多重繼承等易混淆和較少使用的特性,而增加了內存空間自動垃圾收集的功能,復雜特性的省略和實用功能的增加使得開發變得簡單而可靠。另外,Java的系統非常小,Java應用軟件能在相當小的系統之上獨立工作。
2.平臺獨立性
這是Java最吸引人的地方。由于它采用先編譯成中間碼(字節碼),然后裝載與校驗,再解釋成不同的機器碼來執行,即“Java虛擬機”的思想,“屏蔽”了具體的“平臺環境”特性要求,使得只要能支持Java虛擬機,就可運行各種Java程序。
3.面向對象的技術
面向對象的技術是近年來軟件開發中用得最為普遍的程序設計方法,具有繼承性、封裝性、多態性等眾多特點,Java在保留這些優點的基礎上,又具有動態聯編的特性,更能發揮出面向對象的優勢。
4.多線程
多線程機制使應用程序能并行執行,Java有一套成熟的同步原語,保證了對共享數據的正確操作。通過使用多線程,程序設計者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環機制,這樣就很容易實現網絡上實時的交互行為。
5.動態性
Java的設計使它適合于一個不斷發展的環境,在類庫中可以自由地加入新的方法和實例變量而不會影響用戶程序的執行,并且Java通過接口來支持多重繼承,使之比嚴格的類繼承具有更靈活的方式和擴展性。
6.安全性
Java有建立在公共密鑰技術基礎上的確認技術,指示器語義的改變將使應用程序不能再去訪問以前的數據結構或是私有數據,大多數病毒也就無法破壞數據。因而,用Java可以構造出無病毒、安全的系統。
1.1.3Java平臺體系結構
完整的Java體系結構實際上包含4個組件,即Java編程語言、Javaclass文件、Java虛擬機(JVM)、JavaAPI(應用程序接口)。當編寫并運行一個Java程序時,首先用Java編程語言編寫代碼,然后將代碼編譯為Javaclass文件,最后在JVM中執行類文件。JVM與JavaAPI共同構成了Java平臺,也稱為JRE(JavaRuntimeEnvironment,Java運行環境),該平臺可以建立在任意操作系統上。圖11是Java不同功能模塊之間的相互關系,以及它們與應用程序、操作系統之間的關系。
圖11Java平臺體系結構
1.Java虛擬機
Java虛擬機(JavaVirtualMachine,JVM)是運行所有Java程序的抽象計算機,是Java語言的運行環境。JVM可以看作在一臺真正的機器上用軟件方式實現的一臺假想機。實際上,JVM是一套支持Java語言運行的軟件系統,擁有自己完善的硬體架構,由5個部分組成,即指令集、寄存器集、類文件結構棧、垃圾收集器(GarbageCollector)、方法區域,提供了跨平臺能力的基礎框架,如圖12所示。這5部分是JVM的邏輯成分,不依賴任何實現技術或組織方式,但它們的功能必須在真實機器上以某種方式實現。
圖12JVM結構
JVM的解釋器在得到字節碼(.class文件)后,對其進行轉換,就可以在多種平臺上不加修改地運行。JVM的跨平臺特點源于Java源程序(.java文件)被編譯后,形成的字節碼文件可以運行在任何含有JVM的平臺上,無論是Windows、UNIX、Linux還是MacOS,即JVM屏蔽了與具體操作系統平臺相關的信息。
JVM既可以使用軟件方式實現,也可以使用硬件方式實現。
2.JavaAPI應用程序
JavaAPI是運行庫的集合,它為程序員提供了一套訪問主機系統資源的標準方法,JavaAPI通過支持平臺無關性和安全性,使得Java適應于網絡應用。
運行Java程序時,JVM裝載程序的class文件所使用的JavaAPIclass文件。所有被裝載的class文件(包括從應用程序中和從JavaAPI中提取的)和所有已經裝載的動態庫(包含本地方法)共同組成了在JVM上運行的整個程序。在一個平臺能夠支持Java程序以前,必須在這個特定平臺上明確地實現API的功能。為訪問主機上的本地資源,JavaAPI調用了本地方法。由于JavaAPIclass文件調用了本地方法,Java程序就不需要再調用它們了。通過這種方法,JavaAPIclass文件為底層主機提供了具有平臺無關性、標準接口的Java程序。對Java程序而言,無論平臺內部如何,JavaAPI都會有同樣的表現和可以預測的行為。正是由于在每個特定的主機平臺上明確地實現了JVM和JavaAPI,因此,Java程序自身就能夠成為具有平臺無關性的程序。
1.2Java運行環境及配置
JRE就是一個為了讓Java程序在計算機上運行而搭建的一個環境。
1.2.1JDK安裝包的下載和安裝
Java開發工具包(JavaDevelopmentKit,JDK)是Sun公司推出的一種Java軟件開發工具包(SoftwareDevelopmentKit,SDK),JDK是開發Java程序的一個平臺。JDK一般有以下3種版本。
(1)SE(J2SE)(StandardEdition,標準版)是通常采用的一個版本。
(2)EE(J2EE)(EnterpireEdition,企業版),使用這種JDK開發J2EE應用程序。
(3)ME(J2ME)(MicroEdition)主要用于移動設備、嵌入式設備上的Java應用程序。
JDK內容豐富且功能強大,它是整個Java的核心,包括Java運行環境、Java工具和Java基礎的類庫,但是沒有提供程序的編輯環境和集成化開發環境(IntegratedDevelopmentEnvironment,IDE)。通常情況下,Java源程序可以使用記事本等編輯工具來編輯。后來陸續出現并得到應用的IDE平臺,如JBuilder、MyEclipse和Eclipse等,它們都建立在JDK運行環境之上,本教材采用Eclipse平臺。
1.JDK安裝包的下載
Sun公司的官方網址為http://www.sun.com,它提供了諸多版本的JDK供用戶下載,首先選中AcceptLicenseAgreement單選按鈕,然后根據計算機的操作系統選擇正確的版本下載,如圖13所示。下面以為jdk8u71windowsi586.exe的文件安裝為例,介紹JDK的安裝方法。
圖13選擇下載JDK的版本
2.JDK的安裝
(1)雙擊該文件,彈出圖14所示的安裝向導界面,單擊“下一步”按鈕。
圖14JDK安裝程序界面
(2)進入JDK定制安裝界面,如圖15所示。單擊“更改”按鈕,將目標文件夾的位置由默認值C:\\ProgramFiles\\Java\\jdk1.8.0_71\\更改為D:\\java\\jdk\\,這樣簡短且不易出錯,然后單擊“下一步”按鈕,直到出現圖16所示的界面時標志著JDK安裝成功。
圖15JDK定制安裝界面
圖16JDK安裝成功界面
3.安裝JDK的目錄信息
在D:\\java\\jdk目錄下會有bin、db、include、jre、lib等子目錄和部分文件,以下是部分子目錄的簡要介紹。
(1)bin子目錄:工具和程序,可幫助開發、執行、調試、保存Java程序。
(2)include子目錄:包含C頭文件,支持使用Java本機界面、JVMTM工具界面以及Java2平臺的其他功能進行本機代碼編程的頭文件。
(3)jre子目錄:與JavaSE運行時環境相關,包含Java虛擬機、類庫及其他文件,可支持執行以Java語言編寫的程序。
(4)lib子目錄:包含附加庫,是開發工具需要的附加類庫和支持文件。
4.JDK常用開發工具
bin子目錄中的常用Java開發工具主要有以下幾種。
(1)javac:Java語言的編譯器,用于將Java源程序轉換為字節碼。
(2)java:Java解釋器,執行已經轉換成字節碼的Java程序。
(3)appletviewer:Java小程序Applet瀏覽器,用于運行JavaApplet。
(4)javap:反編譯工具,將類文件還原回方法和變量。
(5)javadoc:文檔生成器,根據Java源代碼及其說明語句生成HTML文件。
1.2.2Java環境配置
JDK安裝成功后要設置環境變量,以便正常使用所安裝的開發工具包。Windows7系統下待配置JDK環境變量分別是Path、ClassPath和HOME_PATH,環境變量設置步驟如下。
(1)在Windows7系統桌面上,右擊“計算機”圖標,在彈出的快捷菜單中選擇“屬性”命令,在彈出的“系統”對話框中,單擊“高級系統設置”選項,在彈出的“系統屬性”對話框中,單擊“環境變量”按鈕,如圖17所示,然后進入“環境變量”對話框,如圖18所示。
圖17“系統屬性”對話框
圖18“環境變量”對話框
(2)設置Path變量。該變量的主要作用是指定Java開發包中的編譯器、解釋器等工具所在的目錄。如圖18所示的“環境變量”對話框的“系統變量”列表框中找到Path變量(如果沒有Path變量,則新建一個名為Path的系統變量)后單擊“編輯”按鈕,在彈出的“編輯系統變量”對話框中設置變量的值:現有變量的值保持不變,在尾部追加“;D:\\Java\\jdk\\bin”。注意分號“;”不能少,它是兩個路徑之間的分隔符,如圖19所示。單擊“確定”按鈕,Path變量的設置成功。
(3)設置ClassPath變量。該變量的作用是指定類搜索路徑,JVM就是通過ClassPath來尋找類的。需要把jdk安裝目錄下的lib子目錄中的dt.jar和tools.jar設置到ClassPath中。單擊圖18中“系統變量”列表框下面的“新建”按鈕,在彈出的“新建系統變量”對話框中,輸入變量名ClassPath,變量值為“.;D:\\Java\\jdk\\bin”,其中圓點“.”表示當前目錄,寫在最前面,作為系統查找類的首個路徑。最后單擊“確定”按鈕,兩個系統變量設置成功,如圖110所示。
圖19設置Path環境變量對話框
圖110設置ClassPath環境變量對話框
(4)執行“開始”→“運行”菜單命令,輸入cmd,輸入命令javac,出現圖111所示的窗口,說明環境變量配置成功。
圖111在cmd窗口中輸入javac命令的顯示內容
1.2.3Eclipse的安裝和基本使用
Eclipse是一個開放源代碼的、基于Java的可擴展集成開發平臺。它只是一個框架和一組服務,用于通過插件組件構建開發環境。Eclipse附帶了一個標準的插件集,包括Java開發工具JDK。Eclipse功能完整,它由IBM公司于2001年推出。用戶可以直接到官方網站http://www.eclipse.org/downloads/根據自己計算機的操作系統選擇正確的Eclipse軟件包版本下載。在Windows系統上要進行Java程序開發,除了需要Eclipse軟件包外,還需要在計算機上安裝和配置JDK。
1.Eclipse安裝
使用Eclipse不需要運行安裝程序,不需要向Windows的注冊表寫信息,只要將Eclipse壓縮包解壓后放到本地文件夾中即可使用。
(1)將下載的壓縮包解壓到本地。選定某個版本的壓縮包(如eclipsejeemars1win32.zip),將其解壓到本地的目錄下(D:\\eclipse),然后雙擊此目錄中的eclipse.exe文件即可啟動Eclipse。打開Eclipse的界面,如圖112所示。
圖112啟動Eclipse的界面
(2)在WorkspaceLauncher對話框中,選擇或新建一個目錄用于保存創建的項目,如圖113所示。
圖113在WorkspaceLauncher對話框中指定項目保存的目錄
(3)在WorkspaceLauncher對話框中設置完畢后,單擊OK按鈕,進入Eclipse工作界面,如圖114所示。
圖114Eclipse工作界面
2.Eclipse的使用
(1)新建Java項目。在Eclipse主界面菜單欄中依次執行File→New→JavaProject命令,進入NewJavaProject對話框,輸入項目名稱Project_1,如圖115所示,單擊Finish按鈕。
圖115在Eclipse環境中新建Java項目
(2)新建Java類。在Eclipse主界面菜單欄中依次執行File→New→Class命令,進入NewJavaClass對話框,先設置包名為mypackage,然后設置其名稱為Class_1,最后選