《Java程序設(shè)計應(yīng)用開發(fā)》全套教學(xué)課件_第1頁
《Java程序設(shè)計應(yīng)用開發(fā)》全套教學(xué)課件_第2頁
《Java程序設(shè)計應(yīng)用開發(fā)》全套教學(xué)課件_第3頁
《Java程序設(shè)計應(yīng)用開發(fā)》全套教學(xué)課件_第4頁
《Java程序設(shè)計應(yīng)用開發(fā)》全套教學(xué)課件_第5頁
已閱讀5頁,還剩460頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

面向?qū)ο蟪绦蛟O(shè)計

第1章Java概述第2章Java編程基礎(chǔ)第3章Java面向?qū)ο蠡A(chǔ)第4章面向?qū)ο蟾呒壧匦缘?章面向?qū)ο蟾呒壧匦缘?章Java常用類第7章Java集合第8章圖形用戶界面開發(fā)第8章圖形用戶界面開發(fā)-作業(yè)案例第9章多線程第10章Java網(wǎng)絡(luò)程序設(shè)計第11章IO(輸入輸出)第12章JDBC技術(shù)全套可編輯PPT課件Java程序設(shè)計-課程說明課程基本信息總學(xué)時/總學(xué)分:44學(xué)時/3學(xué)分理論學(xué)時:28上機(jī)學(xué)時:16課程類別:專業(yè)必修課考試類型:院考閉卷筆試:平時比例(作業(yè)、考勤)+末考比例:40%+60%面向?qū)ο蟪绦蛟O(shè)計-課程說明《面向?qū)ο蟪绦蛟O(shè)計》是計算機(jī)學(xué)科各專業(yè)的核心編程課程本課程是計算機(jī)學(xué)科(軟件工程,網(wǎng)絡(luò)工程,信息安全,計算機(jī)科學(xué)與技術(shù))等專業(yè)的一門核心專業(yè)必修課,是Java高級程序設(shè)計、移動開發(fā)、Web程序設(shè)計、云開發(fā)等課程的先修課。Java是一門面向?qū)ο蟮木幊陶Z言,功能強(qiáng)大、簡單易用且應(yīng)用范圍較廣。其主要內(nèi)容有:(1)程序設(shè)計基礎(chǔ):數(shù)據(jù)類型、控制結(jié)構(gòu)、方法、數(shù)組等的基本概念、操作和應(yīng)用;(2)面向?qū)ο蠡A(chǔ):封裝、繼承、多態(tài)等特性的基本原理、操作及應(yīng)用;(3)面向?qū)ο笊钊爰皯?yīng)用:抽象類、接口的基本概念及應(yīng)用,輸入和輸出流,Java集合,圖形化界面設(shè)計(4)多線程、網(wǎng)絡(luò)編程、數(shù)據(jù)庫編程。第1章Java概述

本章內(nèi)容1.1認(rèn)識Java1.2JDK的使用1.3Java語言的集成開發(fā)環(huán)境1.1認(rèn)識Java1.1.1什么是Java在認(rèn)識Java之前,先了解兩個基本概念。1.軟件開發(fā)軟件開發(fā)是根據(jù)用戶要求建造軟件系統(tǒng)或者系統(tǒng)中的軟件部分的過程。軟件開發(fā)是一項包括需求捕捉、需求分析、設(shè)計、實現(xiàn)和測試的系統(tǒng)工程。軟件是一系列按照特定順序組織的計算機(jī)數(shù)據(jù)和指令的集合,分為系統(tǒng)軟件和應(yīng)用軟件。軟件一般使用某種程序設(shè)計語言來實現(xiàn),通常采用相應(yīng)的開發(fā)工具進(jìn)行開發(fā)。2.計算機(jī)語言語言是人與人之間用于溝通的一種方式。例如,中國人與中國人用普通話溝通;中國人要和英國人交流,需要學(xué)習(xí)英語。計算機(jī)語言是人與計算機(jī)交流的方式。如果人要與計算機(jī)交互,需要學(xué)習(xí)計算機(jī)語言。計算機(jī)語言有很多種,如C、C++、Java、Python、PHP等。計算機(jī)語言(1)C/C++程序設(shè)計語言

大中型游戲大多使用C/C++作為程序設(shè)計語言。C/C++是所有程序設(shè)計人員公認(rèn)的功能強(qiáng)大的程序設(shè)計語言,也是運(yùn)行時速度比較快的語言。(2)JAVA程序設(shè)計語言Java程序具有跨平臺的優(yōu)點(diǎn),程序的移植性好,所以Java非常適合進(jìn)行游戲制作。對于大型網(wǎng)絡(luò)游戲來說,使用Java語言設(shè)計則不具備速度優(yōu)勢。(3)FlashActionScriptFlashActionScript屬于一種腳本語言,通常嵌入在Flash文件中,負(fù)責(zé)對Flash動畫流程進(jìn)行控制。使用FlashActionScript設(shè)計出來的游戲畫面精美,容量也較小,所以在小游戲的設(shè)計領(lǐng)域迅速走紅。(4)C#程序設(shè)計語言

C#(讀做“Csharp”)是由C++和Java發(fā)展演化而來的程序語言,同時具備了兩種語言的尤點(diǎn),既支持面向?qū)ο蟪绦蛟O(shè)計,又具有很高的運(yùn)行速度。1.1認(rèn)識JavaJava語言版本Java語言發(fā)展到今天,有多個版本。1995年5月23日,SUN公司將Oak語言重新命名為Java,1996年1月23日Sun公司推出JDK1.0,標(biāo)志著Java正式誕生。Java語言第一次提出了“WriteOnce,RunAnywhere”的口號。1998年12月4日,JDK迎來了一個里程碑式的版本JDK1.2,工程代號為Playground(競技場),Sun在這個版本中把Java技術(shù)體系拆分為3個發(fā)展方向。(1)面向桌面應(yīng)用開發(fā)的J2SE(Java2PlatformStandardEdition,標(biāo)準(zhǔn)版):包含構(gòu)成Java語言核心的類,如數(shù)據(jù)庫連接、接口定義、輸入/輸出和網(wǎng)絡(luò)編程,主要用于開發(fā)一般個人電腦上的應(yīng)用軟件。(2)面向手機(jī)等移動終端開發(fā)的J2ME(Java2PlatformMicroEdition,微型版):包含J2SE中的一部分類,用于消費(fèi)類電子產(chǎn)品的軟件開發(fā),如呼機(jī)、智能卡、手機(jī)、PDA和機(jī)頂盒。(3)面向企業(yè)級應(yīng)用開發(fā)的J2EE(Java2PlatformEnterpriseEdition,企業(yè)版):包含J2SE中的所有類,還包含用于開發(fā)企業(yè)級應(yīng)用的類,如EJB、Servlet、JSP、XML和事務(wù)控制,也是現(xiàn)在Java應(yīng)用的主要方向,用于開發(fā)企業(yè)級應(yīng)用軟件。1.1認(rèn)識JavaJava語言版本自從JDK1.3開始,Sun維持了一個習(xí)慣:大約每隔兩年發(fā)布一個JDK的主版本,以動物命名,期間發(fā)布的各個修正版本則以昆蟲作為工程名稱。2009年4月20日,Oracle公司宣布正式以74億美元的價格收購Sun公司,Java商標(biāo)從此正式歸Oracle所有。2011年7月28日,Oracle公司發(fā)布JavaSE7(JDK1.7)。2014年3月18日,Oracle公司發(fā)布JavaSE8(JDK1.8),市場主流版本。2019年9月,Oracle公司發(fā)布JavaSE13(JDK13)。最新的版本是2021年3月16日,Oracle公司發(fā)表發(fā)布JavaSE16(JDK16),僅支持6個月,屬于短期版本。2022年3月推出JDK19。1.1認(rèn)識Java1.1.2Java語言的特點(diǎn)Java的語法從C語言繼承而來,Java許多面向?qū)ο蟮奶匦远际艿紺++的影響。事實上,Java語言完全面向?qū)ο螅饤壛薈和C++的不足。1.簡單易用2.面向?qū)ο?.分布式4.解釋型5.健壯6.可移植性7.擁有較高的性能8.具有多線程處理能力1.1認(rèn)識Java1.1.3Java語言的應(yīng)用1.桌面GUI應(yīng)用程序2.移動應(yīng)用程序3.嵌入式系統(tǒng)4.Web應(yīng)用程序5.企業(yè)應(yīng)用程序6.科學(xué)應(yīng)用1.2JDK的使用Sun公司提供一套Java開發(fā)工具,簡稱JDK(JavaDevelopmentKit)。JDK是程序員使用Java語言編寫Java程序所需的開發(fā)工具包,是提供給程序員使用的。JDK包含了運(yùn)行環(huán)境JRE(JavaRuntimeEnvironment),同時還包含了編譯Java源碼的編譯器javac,還包含了很多Java程序調(diào)試、分析和打包的工具,以及Java程序編寫所需的文檔和demo例子程序。由于JDK8比較穩(wěn)定,是目前市場上主流的JDK版本,本書將針對JDK8版本進(jìn)行講解和運(yùn)用。JDK和JRE如果僅需要運(yùn)行Java程序,只需僅僅安裝JRE就可以。如果需要編寫Java程序,需要安裝JDK。JRE工具中只包含Java運(yùn)行工具,不包含Java編譯工具。1.2JDK的使用1.2.1JDK的安裝從Oracle官方網(wǎng)站下載相應(yīng)的IDK安裝文件。1.下載安裝JDK的安裝包從Oracle官網(wǎng)/java/technologies/javase-downloads.html下載安裝文件“jdk-8u201-windows-x64.exe",下載好JDK的安裝包之后,雙擊運(yùn)行該文件1.2JDK的使用1.2.1JDK的安裝2.JDK環(huán)境變量的配置JDK的安裝包安裝完畢后,需進(jìn)行環(huán)境變量的配置。1.2JDK的使用1.2.1JDK的安裝2.JDK環(huán)境變量的配置JDK的安裝包安裝完畢后,需進(jìn)行環(huán)境變量的配置。從Windows系統(tǒng)中啟動命令提示符窗口cmd,執(zhí)行Java–version命令,驗證JDK是否安裝成功,看到圖中JDK版本信息則說明JDK安裝成功。1.2JDK的使用1.2.2Java程序運(yùn)行機(jī)制1.Java程序運(yùn)行過程Java程序開發(fā)過程涉及Java源文件(.java文件)、字節(jié)碼文件(.class文件)、機(jī)器碼指令。Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。Java程序運(yùn)行機(jī)制示意圖如圖所示。1.2JDK的使用1.2.2Java程序運(yùn)行機(jī)制2.Java虛擬機(jī)(JavaVirtalMachine)Java虛擬機(jī)JVM是一個可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程,或者可以說是一個虛擬的計算機(jī),具有指令集并使用不同的存儲區(qū)域,負(fù)責(zé)執(zhí)行指令,管理數(shù)據(jù)、內(nèi)存、寄存器。Java虛擬機(jī)機(jī)制屏蔽了底層運(yùn)行平臺的差別,實現(xiàn)了“一次編譯,到處運(yùn)行”。1.2JDK的使用1.2.3Java程序的開發(fā)過程1.編寫Java源程序文件用記事本編寫一個“HelloWorld”小程序來驗證,保存為HelloWorld.java。

publicclassHelloWorld{

publicstaticvoidmain(String[]args){

System.out.println("HelloHelloWorld");

}

}2.編譯Java源程序文件打開命令提示符窗口,在命令提示符窗口中輸入:cd程序所在文件夾例如cdc:\HellojavacHelloWorld.java3.運(yùn)行Java程序命令提示符窗口中再輸入javaHelloworld運(yùn)行編譯好的class字節(jié)碼文件。1.3Java語言的集成開發(fā)環(huán)境IDE集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment)能夠幫助開發(fā)人員輕松編寫和調(diào)試程序。一個好的IDE具有許多強(qiáng)大的功能,可以幫助我們編寫代碼,包括調(diào)試,編輯,切換視圖,代碼管理等。Eclipse是目前最流行的Java語言開發(fā)工具。Eclipse具有強(qiáng)大的代碼編排功能,可以幫助程序開發(fā)人員完成語法修正、代碼修正、補(bǔ)全文字、信息提示等編碼工作,大大提高了程序開發(fā)的效率。Eclipse目前亦有人通過插件使其作為其他計算機(jī)語言比如C++、PHP、Python等語言開發(fā)工具。1.3Java語言的集成開發(fā)環(huán)境在這里同樣以Helloworld.java程序為例,來說明如何使用Eclipse來進(jìn)行Java程序的開發(fā)。(1)新建Java項目“File”→“New”→“JavaProject”,創(chuàng)建一個Java項目(2)新建Java類鼠標(biāo)右鍵單擊項目下的src文件夾,選擇“New”→“Class”(3)運(yùn)行Java程序單擊PackageExplorer視圖中HelloWorld.java文件,在彈出的菜單中選擇“RunAs”→“JavaApplication”運(yùn)行程序。也可以選中要運(yùn)行的文件,直接單擊工具欄中綠色的三角按鈕

運(yùn)行程序1.3Java語言的集成開發(fā)環(huán)境EclipseNetBeansNetBeans是Sun公司(2009年被甲骨文收購)在2000年創(chuàng)立的開放源代碼供開發(fā)人員和客戶社區(qū)的家園,旨在構(gòu)建世界級的JavaIDE。NetBean開發(fā)環(huán)境提供了豐富的產(chǎn)品文檔和培訓(xùn)資源以及大量的第三方插件。IntelliJIDEAIntelliJIDEA是一款綜合的Java編程環(huán)境,被許多開發(fā)人員和行業(yè)專家譽(yù)為市場上最好的IDE。它提供了一系列最實用的的工具組合:智能編碼輔助和自動控制,支持J2EE,Ant,JUnit,SVN和Git集成,非平行的編碼檢查和創(chuàng)新的GUI設(shè)計器。本章小結(jié)1.計算機(jī)語言2.JDK的使用3.Java語言的集成開發(fā)環(huán)境4.使用Eclipse開發(fā)Java項目第2章Java編程基礎(chǔ)

本章內(nèi)容2.1標(biāo)識符與數(shù)據(jù)類型2.2常量與變量2.3運(yùn)算符和表達(dá)式2.4邏輯控制語句2.5Java數(shù)組和應(yīng)用2.6Java方法2.1標(biāo)識符與數(shù)據(jù)類型2.1.1關(guān)鍵字關(guān)鍵字是Java語言里事先定義好并賦予特殊含義的英文單詞,在程序設(shè)計中不能再將其定義成別的用途。2.1.2標(biāo)識符標(biāo)識符是程序員定義的有效字符序列,用來標(biāo)志自己定義的變量名、符號常量名、對象名、數(shù)組名和類名等。標(biāo)識符的命名應(yīng)遵循以下規(guī)則。(1)只能由字母、數(shù)字、美元$和下劃線組成,第一個字符不能是數(shù)字字符??梢允褂脻h字,但一般不建議使用。(2)不能是Java中的關(guān)鍵字。(3)中間不能有空格。(4)不要太長,一般以不超過31個字符為宜。(5)標(biāo)識符的命名最好遵循Java推薦的命名規(guī)范,如常量命名全部采用大寫字母,類名每個單詞首字母大寫,屬性與方法名從第二個單詞開始首字母大寫等。(6)Java語言使用Unicode標(biāo)準(zhǔn)字符集下面是不合法的標(biāo)識符:D.S.Name,#323,57S9,c<d,-W在Java中,字母的大小寫是有區(qū)別的。例如,Add、add和ADD分別表示不同的標(biāo)識符。2.1.3數(shù)據(jù)類型數(shù)據(jù)類型決定了該數(shù)據(jù)所占用的存儲空間、所表示的數(shù)據(jù)范圍和精度,以及所能進(jìn)行的運(yùn)算。Java的數(shù)據(jù)類型大致可分為兩類,一類是基本數(shù)據(jù)類型,另一類是引用數(shù)據(jù)類型?;緮?shù)據(jù)類型包括整型、字符型、浮點(diǎn)型和布爾型等;引用數(shù)據(jù)類型包括類、接口、數(shù)組、枚舉等,如圖2-1所示。2.2常量與變量2.2.1常量常量就是在程序中固定不變的值,是不能改變的數(shù)據(jù)。例如,數(shù)字1、字符'a'、浮點(diǎn)數(shù)3.2等都是常量。在Java中,常量包括整型常量、浮點(diǎn)型常量、布爾常量、字符常量等。1.整型常量整型常量是整數(shù)類型的數(shù)據(jù),有二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制4種表示形式。二進(jìn)制0b01101100、0B10110101八進(jìn)制0342十六進(jìn)制0x25AF在程序中為了標(biāo)明不同的進(jìn)制,數(shù)據(jù)都有特定的標(biāo)識,八進(jìn)制必須以0開頭,如0711、0123;十六進(jìn)制必須以0x或0X開頭,如0xaf3、0Xff;整數(shù)以十進(jìn)制表示時,第一位不能是0。2.2.1常量2.浮點(diǎn)數(shù)常量浮點(diǎn)數(shù)常量就是在數(shù)學(xué)中用到的小數(shù),浮點(diǎn)數(shù)分為單精度浮點(diǎn)數(shù)(float)和雙精度浮點(diǎn)數(shù)(double)兩種類型。其中,單精度浮點(diǎn)數(shù)后面以F或f結(jié)尾,而雙精度浮點(diǎn)數(shù)則以D或d結(jié)尾。當(dāng)然,在使用浮點(diǎn)數(shù)時也可以在結(jié)尾處不加任何的后綴,此時JVM會默認(rèn)浮點(diǎn)數(shù)為double類型的浮點(diǎn)數(shù)。浮點(diǎn)數(shù)常量還可以通過科學(xué)計數(shù)的形式表示,如456,可以表示成4.56E2。2.34f2.342.2.1常量3.字符常量字符常量用于表示一個字符,一個字符常量要用一對英文半角格式的單引號(')括起來。字符常量可以是英文字母、數(shù)字、標(biāo)點(diǎn)符號、以及由轉(zhuǎn)義序列表示的特殊字符。Java有兩種字符常量,即一般字符常量如'A'、'$'、''(空格)和轉(zhuǎn)義字符常量。'\101'表示大寫A字符,'\u4F60'表示漢字'你'轉(zhuǎn)義字符名

稱功

能\a響鈴用于輸出響鈴\b退格(Backspace鍵)用于退回一個字符\f換頁用于輸出\n換行符用于輸出\r回車符用于輸出\t水平制表符(Tab鍵)用于輸出\v縱向制表符用于制表\\反斜杠字符用于表示一個反斜杠字符\'單引號用于表示一個單引號字符\"雙引號用于表示一個雙引號字符\dddddd是ASCII碼的八進(jìn)制值,最多三位用于表示該ASCII碼代表的字符\uhhhhUnicode轉(zhuǎn)義字符,4個十六進(jìn)制值用于表示一個Unicode編碼的字符表2-3Java常用的轉(zhuǎn)義字符2.2.1常量4.字符串常量字符串常量用于表示一串連續(xù)的字符,一個字符串常量要用一對英文半角格式的雙引號(“”)括起來。例如:"HelloWorld","My\nJava","Howoldareyou?1234"5.布爾常量布爾常量即布爾型的值,常用于邏輯判斷。布爾常量有true和false兩個值。6.null常量null常量只有一個值null,表示對象的引用為空。7.常量的定義Java中必須用final關(guān)鍵字聲明一個常量。final關(guān)鍵字表示這個值一旦被賦值,不能再更改。final數(shù)據(jù)類型常量名=缺省值;finalintSTUDENT_NUM=10;習(xí)慣上,常量的名字全部大寫,詞與詞之間用下劃線分隔。2.2.2變量變量是指在程序運(yùn)行過程中其值可以改變的量。變量是有名字的,在內(nèi)存中占據(jù)一定的存儲單元。在Java語言中使用變量之前必須先定義它的數(shù)據(jù)類型,根據(jù)其數(shù)據(jù)類型的不同,可分為不同類別的變量,如字符型變量、整型變量、浮點(diǎn)型變量等。變量只有在其作用域中才能起到作用,而離開此作用域時,局部變量將會被清空。當(dāng)程序進(jìn)入一個方法時,其中的局部變量將會被創(chuàng)建,在一個作用域中,即一個方法(函數(shù))中,變量名是唯一的,不允許重復(fù)。1.定義變量inta,b,c; //定義三個整型變量a,b,cfloatf; //定義一個單精度實型變量fcharc1,c2,c3; //定義三個字符型變量c1,c1,c3intwidth=30; //定義變量及賦值intheight; //定義變量height=40; //給變量賦值變量經(jīng)定義以后,便可以對其賦值和使用,若在使用前沒有賦值,則在編譯時會指出語法錯誤。2.2.2變量2.基本數(shù)據(jù)類型的變量(1)整型byteb=127;shorts=123;inti=5000;(2)浮點(diǎn)型Java中的浮點(diǎn)型包括float和double兩種,在內(nèi)存中float占用4字節(jié)即32位,用F、f表示。而double占用8字節(jié)即64位,用帶D或d或不加后綴的數(shù)值表示。floatf=18.5f; //定義變量及賦值doublemoney=57.8;2.2.2變量2.基本數(shù)據(jù)類型的變量(3)布爾值型現(xiàn)實生活中的“真”和“假”邏輯判斷是通過布爾值(boolean)來表示的,其值為true和false。boolean值并沒有指定其在內(nèi)存空間中的大小,而僅是通過true和false來表示。booleanflag=true;(4)字符型字符型(char)存放的對象只能為一個字符,而每個字符占用內(nèi)存空間的大小為16比特位(2個字節(jié))。聲明字符型需要用單引號把字符括起來,例如:charc='定'; //定義變量c及賦值charb='a'; //定義變量b及賦值chard='\u4F60';

//定義變量d及賦值漢字'你'

2.3運(yùn)算符和表達(dá)式表達(dá)式由變量、運(yùn)算符和數(shù)字等組合而成,例如:area=width*height;按運(yùn)算符在表達(dá)式中與運(yùn)算對象的關(guān)系(連接運(yùn)算對象的個數(shù))可分為:單目運(yùn)算(一元運(yùn)算符,只需一個操作數(shù))。雙目運(yùn)算(二元運(yùn)算符,需兩個操作數(shù))。三目運(yùn)算(三元運(yùn)算符,需三個操作數(shù))。按運(yùn)算符的運(yùn)算性質(zhì)又可分為算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等。

2.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式1.基本算術(shù)運(yùn)算符+(加法運(yùn)算符,或正值運(yùn)算符,如1+2,+3)-(減法運(yùn)算符,或負(fù)值運(yùn)算符,如1-2,-3)*(乘法運(yùn)算符,如1*2)/

(除法運(yùn)算符,如1/2)%(模運(yùn)算符或稱求余運(yùn)算符,如7%3=1)

2.自增和自減(增1和減1)運(yùn)算符自增和自減運(yùn)算符都是單目運(yùn)算符,它們表示為++和--,運(yùn)算結(jié)果是將操作數(shù)增1或減1。這兩個運(yùn)算符都有前置和后置兩種形式。前置形式是指運(yùn)算符在操作數(shù)的前面,后置形式是指運(yùn)算符在操作數(shù)的后面。例如:a++; //等價于a=a+1++a; //等價于a=a+1a--; //等價于a=a-1--a; //等價于a=a-12.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式2.自增和自減(增1和減1)運(yùn)算符inta=3;intb=++a; //相當(dāng)于a=a+1;b=a;System.out.println(a+""+b); //結(jié)果為:44intc=a++; //相當(dāng)于c=a;a=a+1;System.out.println(a+""+c); //結(jié)果為:542.3.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式inta=3;intb=++a; //相當(dāng)于a=a+1;b=a;System.out.println(a+""+b); //結(jié)果為:44intc=a++; //相當(dāng)于c=a;a=a+1;System.out.println(a+""+c); //結(jié)果為:542.3.2賦值運(yùn)算符和賦值表達(dá)式1.賦值運(yùn)算符賦值運(yùn)算符“=”的一般格式為:

變量=表達(dá)式;它表示將其右側(cè)的表達(dá)式求出結(jié)果,賦給其左側(cè)的變量。例如:inti;i=3*(4+5); //i的值變?yōu)?7賦值運(yùn)算符的結(jié)合性是從右至左的,因此程序中可以出現(xiàn)連續(xù)賦值的情況。例如,下面的賦值是合法的:

inti,j,k;

i=j=k=10; //i,j,k都賦值為102.復(fù)合賦值運(yùn)算符表2-4是一些常用的復(fù)合賦值運(yùn)算符。2.3.2賦值運(yùn)算符和賦值表達(dá)式2.復(fù)合賦值運(yùn)算符表2-4中的非直接賦值運(yùn)算符在執(zhí)行速度上快于一般的賦值方式,即A-=B相當(dāng)于A=A-B,而前者的執(zhí)行速度卻快于后者。

inta=12,x=3,y;a+=a; //表示a=a+a=12+12=24;y*=x+2;

//表示y=y*(x+2);而不是y=y*x+2;2.3.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符用于兩個值進(jìn)行比較,運(yùn)算結(jié)果為true(真)或false(假)。Java中的關(guān)系運(yùn)算符如下:<(小于)

<=(小于等于)>(大于)>=(大于等于)==(等于)!=(不等于)關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性是從左到右,<、<=、>和>=這4個運(yùn)算符的優(yōu)先級相同,==和!=運(yùn)算符的優(yōu)先級相同,前4個運(yùn)算的優(yōu)先級高于后兩個。關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符。例如:a+b>c 等價于 (a+b)>ca!=b>c 等價于 a!=(b>c)2.3.4邏輯運(yùn)算符和邏輯表達(dá)式Java中常用的三種邏輯運(yùn)算符是:&&(邏輯與,二元運(yùn)算符)a&&b||(邏輯或,二元運(yùn)算符)a||b?。ㄟ壿嫹?,一元運(yùn)算符)!a注意短路運(yùn)算a&&ba||b2.3.5位運(yùn)算符和位運(yùn)算表達(dá)式位(bit)是計算機(jī)中表示信息的最小單位,一般用0和1表示。一個字符在計算機(jī)中占一個字節(jié),一個字節(jié)由8個二進(jìn)制組成。位運(yùn)算符對操作數(shù)按其二進(jìn)制形式逐位進(jìn)行運(yùn)算,參加位運(yùn)算的操作數(shù)必須為整數(shù)。相應(yīng)的運(yùn)算規(guī)則為:按位與:0&0=00&1=01&0=01&1=1,即只要按位有一個為0,按位與&的結(jié)果就為0。按位或:0|0=00|1=11|0=11|1=1,即只要按位有一個為1,按位或|結(jié)果就為1。按位異或:0^0=00^1=11^0=11^1=0,即按位相同為0,不同為1。2.3.5位運(yùn)算符和位運(yùn)算表達(dá)式1.按位與(&)變量c的值為2。2.3.5位運(yùn)算符和位運(yùn)算表達(dá)式2.按位或(|)變量c的值為19。2.3.5位運(yùn)算符和位運(yùn)算表達(dá)式3.按位異或(^)變量c的值為17。2.3.5位運(yùn)算符和位運(yùn)算表達(dá)式4.按位求反(~)5.左移(<<)2.3.5位運(yùn)算符和位運(yùn)算表達(dá)式6.右移(>>)a=12a>>3注意:“>>>”運(yùn)算符的含義同“>>”類似,但其是無符號移位,左側(cè)補(bǔ)0。2.3.6條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符“?:”是Java中唯一一個三目運(yùn)算符,該運(yùn)算符需要三個操作數(shù)。表達(dá)式1?表達(dá)式2:表達(dá)式3其中,當(dāng)表達(dá)式1為true時,結(jié)果為表達(dá)式2;當(dāng)表達(dá)式1為false時,結(jié)果為表達(dá)式3。例如inta=6,b=7,m;m=a<b?a:b//m=62.3.7運(yùn)算符優(yōu)先級運(yùn)算符參與運(yùn)算的先后順序,通常把這種順序稱作運(yùn)算符的優(yōu)先級。2.3.8類型轉(zhuǎn)換1.自動類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)當(dāng)把一個低級數(shù)據(jù)類型轉(zhuǎn)換成高級數(shù)據(jù)類型時,即占用內(nèi)存空間字節(jié)小的轉(zhuǎn)換成占用內(nèi)存空間字節(jié)大

的數(shù)據(jù),Java執(zhí)行的為自動類型轉(zhuǎn)換,在程序中不需要作任何說明,如把byte類型轉(zhuǎn)換成int類型就屬于這種情況。byteb=3;intx=b;

2.強(qiáng)制類型轉(zhuǎn)換(顯式類型轉(zhuǎn)換)當(dāng)把高級數(shù)據(jù)類型轉(zhuǎn)換成低級的數(shù)據(jù)類型時,稱為強(qiáng)制類型轉(zhuǎn)換,但是此時會出現(xiàn)數(shù)據(jù)缺失的情況。強(qiáng)制類型轉(zhuǎn)換必須作出明確的說明,即讓虛擬機(jī)明白這是強(qiáng)制轉(zhuǎn)換,否則會出現(xiàn)錯誤。(轉(zhuǎn)換類型)變量名inta=10;byteb=(byte)a;如果在轉(zhuǎn)換時數(shù)據(jù)超出了轉(zhuǎn)換類型的取值范圍,那么將會造成數(shù)據(jù)“溢出”,導(dǎo)致轉(zhuǎn)換失敗,例如:inta=200;byteb=(byte)a;2.3.9打印語句把結(jié)果顯示到控制臺上。System.out.println("helloxmj"); //在控制臺上打印helloxmjSystem.out.print("hello");System.out.println("xmj");利用print()方法打印信息后不能換行再打印下面一段信息,而是直接在同一行中打印出來,但是println()方法可以自動換行。2.3.10Java語言注釋1.以“/*”開頭并以“*/”結(jié)尾的注釋形式可以跨越多行代碼,中間為注釋內(nèi)容,這種注釋方式也稱為多行注釋,例如:/*這是測試部分請讀者注意*/注釋的內(nèi)容不會被編譯,所以也可以把上面的分行注釋改寫成單行,例如:/*這是測試部分請讀者注意*/2.單行注釋,以“//”開頭,后面緊跟注釋內(nèi)容,此內(nèi)容必須和“//”符號在同一行,例如://這是測試部分請讀者注意3.文檔注釋,其也稱為多行注釋,以“/**”開頭,以“*/”結(jié)尾,也可以跨越多行代碼,中間為注釋內(nèi)容,此注釋方式可以把注釋內(nèi)容轉(zhuǎn)化為超文本文件,這里需要用到Java中的Javadoc命令,例如:/**這是測試部分*請讀者注意*/注意:如果利用文檔注釋“/**…*/”注釋某個變量,當(dāng)在IDE工具中把鼠標(biāo)移動到此變量上面時,會出現(xiàn)注釋的內(nèi)容,這樣可以方便程序員更快地知道此變量的含義。2.4邏輯控制語句在Java中包括的邏輯控制語句有if…elseswitchforwhiledo…whilebreakreturn2.4.1選擇結(jié)構(gòu)語句選擇結(jié)構(gòu)語句有if…elseswitch1.if…else語句if(布爾表達(dá)式)

語句1或者if(布爾表達(dá)式)

語句2else

語句3if…else是邏輯語句中最簡單的一個,而其中的else是作為可選項出現(xiàn)的if語句在某些情況下可以用條件運(yùn)算符“?:”來簡化表達(dá)。例如,求兩個數(shù)a、b中較大的數(shù),采用if語句如下:if(a>b)c=a;elsec=b;也可用條件運(yùn)算符實現(xiàn):c=a>b?a:b;2.4.1選擇結(jié)構(gòu)語句2.if…else語句的嵌套一個if…else語句可實現(xiàn)二選一分支,if…else語句的嵌套則可以實現(xiàn)多選一的多路分支情況。

if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;elseif(表達(dá)式3)語句3;…elseif(表達(dá)式n)語句n;else語句n+1;Java獲得鍵盤輸入Java獲得鍵盤輸入可以使用Scanner類的方法。通常需要經(jīng)過3個步驟。①在程序開頭導(dǎo)入類:importjava.util.Scanner;②輸入之前創(chuàng)建Scanner類對象:Scannerscanner=newScanner(System.in);System.in是標(biāo)準(zhǔn)輸入流對象,對應(yīng)標(biāo)準(zhǔn)輸入設(shè)備即鍵盤。③輸入數(shù)據(jù)賦給相應(yīng)的變量。輸入不同類型的數(shù)據(jù)要用不同的方法,這些方法都是以next開頭的,如nextInt()用來輸入int類型數(shù)據(jù),nextByte()用來輸入byte類型數(shù)據(jù),nextDouble()用來輸入double類型數(shù)據(jù),等等。讀者可以通過JavaAPI幫助文檔查看所要使用的方法。例如鍵盤輸入成績score如下:Scannerscanner=newScanner(System.in);score=scanner.nextInt();//鍵盤輸入成績2.4.1選擇結(jié)構(gòu)語句switch語句被稱為多路分支語句,雖然使用if…else嵌套語句可以實現(xiàn)多路分支,但是嵌套過多,會導(dǎo)致程序不便于閱讀,而使用switch語句,邏輯結(jié)構(gòu)顯示更加整潔。switch(變量值){case常量1:

語句1break;case常量2:

語句2break;//…default:

語句nbreak;}注意:通過上面的語句可以看到,每個case后面都有一個break結(jié)尾,這是為了使執(zhí)行流程跳到switch末尾,其中break是可選的,如果省略break語句,則會繼續(xù)執(zhí)行下面的case語句。2.4.2循環(huán)結(jié)構(gòu)語句1.while和do…while語句while語句也為循環(huán)語句,其實現(xiàn)方法為:當(dāng)循環(huán)開始時,條件判斷為true,此循環(huán)將一直進(jìn)行下去,條件判斷為false時循環(huán)才會結(jié)束,并且每執(zhí)行一次循環(huán)體都會重新計算條件判斷。do…while循環(huán)和while循環(huán)的區(qū)別就在于其一定會執(zhí)行一次,而while循環(huán)并不一定會循環(huán)(當(dāng)條件判斷表達(dá)式開始就為false時)。2.4.2循環(huán)結(jié)構(gòu)語句1.while和do…while語句【例2.3】求sum=1!+2!+3!+…+n!,當(dāng)sum≥1000時n的值?!纠?.4】輸入一個非負(fù)的整數(shù),將其反向后輸出。例如,輸入24789,變成98742輸出?!纠?.5】輸入兩個正整數(shù),求它們的最大公約數(shù)。2.4.2循環(huán)結(jié)構(gòu)語句2.for語句for循環(huán)語句是程序中用到最多的邏輯控制語句,其實現(xiàn)方法為初始化變量值,然后對此變量值進(jìn)行條件判斷,而且在每次循環(huán)后都進(jìn)行指定的變量修改?!纠?.7】打印出所有的“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153是一個“水仙花數(shù)”,因為153=13+53+33。2.4.3循環(huán)的嵌套Java的三種循環(huán)語句可以相互嵌套,構(gòu)成循環(huán)嵌套。(1)循環(huán)嵌套時,外層循環(huán)和內(nèi)層循環(huán)間是包含關(guān)系,即內(nèi)層循環(huán)必須被完全包含在外層循環(huán)中,不得交叉。(2)當(dāng)程序中出現(xiàn)循環(huán)嵌套時,程序每執(zhí)行一次外層循環(huán),則其內(nèi)層循環(huán)必須循環(huán)所有的次數(shù)(即內(nèi)層循環(huán)結(jié)束)后,才能進(jìn)入到外層循環(huán)的下一次循環(huán)?!纠?.8】輸出一個金字塔圖形,如圖2-8所示。2.4.3循環(huán)的嵌套【例2.9】輸出九九乘法表,如圖2-9所示。2.4.4跳轉(zhuǎn)語句功能是改變程序的流程,使程序從其所在的位置轉(zhuǎn)向另一處執(zhí)行。Java提供了跳轉(zhuǎn)語句包括break語句、continue語句和return語句。1.break語句break語句的一般格式為:break;該語句只能用于兩種情況:(1)用在switch結(jié)構(gòu)中,當(dāng)某個case分支執(zhí)行完后,使用break語句跳出switch結(jié)構(gòu)。(2)用在循環(huán)結(jié)構(gòu)中,用break語句來結(jié)束循環(huán)。如果放在嵌套循環(huán)中,則break語句只能結(jié)束其所在的那層循環(huán)。【例2.10】任意輸入若干個正整數(shù)(不多于50個),計算已輸入正整數(shù)之和,直到輸入了負(fù)數(shù)為止。2.4.4跳轉(zhuǎn)語句2.continue語句continue語句的一般格式為:continue;該語句只能用在循環(huán)結(jié)構(gòu)中。當(dāng)在循環(huán)結(jié)構(gòu)中遇到continue語句時,則跳過continue語句后的其他語句,結(jié)束本次循環(huán),并轉(zhuǎn)去判斷循環(huán)控制條件,以決定是否進(jìn)行下一次循環(huán)?!纠?.11】輸出0~100之間所有不能被3整除的數(shù)。break和continue可以控制循環(huán)語句的流程,其中break為退出循環(huán),不再執(zhí)行下面剩余的循環(huán)部分,而continue則是停止當(dāng)前循環(huán),跳轉(zhuǎn)到循環(huán)起始位置開始下面的循環(huán)部分。2.4.4跳轉(zhuǎn)語句3.return語句return語句被稱為返回語句,其有兩種作用:一是指定方法的返回值,二是可以結(jié)束方法的執(zhí)行,直接從方法中跳出。publicclassExample2_12{publicstaticvoidmain(String[]args){

inti=0; //定義初始值while(i<3){ //判斷循環(huán)條件i++;

//變量自增if(i==2) //當(dāng)i為2時return; //跳出方法(1)System.out.println("循環(huán)內(nèi)部"+i);}System.out.println("循環(huán)外部"+i);}}把(1)其中的return修改成break和continue,然后運(yùn)行相應(yīng)代碼2.5Java數(shù)組和應(yīng)用引入數(shù)組就不需要在程序中定義大量變量,大大減少了程序中變量的數(shù)量,使程序精煉,而且數(shù)組含義清楚,使用方便,明確地反映了數(shù)據(jù)間的聯(lián)系。2.5.1Java數(shù)組定義和創(chuàng)建1.定義數(shù)組定義數(shù)組格式如下:數(shù)組元素類型[]數(shù)組名;或數(shù)組元素類型

數(shù)組名[];//為了和C++兼容,不建議使用int[]array;//定義了一個int數(shù)組,名字為array,元素類型為intdoublescore[];//定義了一個double數(shù)組,名字為score,元素類型為double2.5.1Java數(shù)組定義和創(chuàng)建2.創(chuàng)建數(shù)組(1)new關(guān)鍵字使用new關(guān)鍵字,并指定數(shù)組元素的個數(shù)(數(shù)組的長度),以確定在堆空間分配內(nèi)存空間的大小。使用格式如下:數(shù)組名=new數(shù)組元素類型[數(shù)組元素個數(shù)];例如:int[]array;array=newint[5];也可以定義數(shù)組和創(chuàng)建數(shù)組合并在一起,用一條語句實現(xiàn):int[]array=newint[5];//合二為一,元素初值為02.5.1Java數(shù)組定義和創(chuàng)建2.創(chuàng)建數(shù)組數(shù)組名=new數(shù)組元素類型[]{元素初值列表};int[]array=newint[]{1,2,3,4,5};2.5.1Java數(shù)組定義和創(chuàng)建2.創(chuàng)建數(shù)組(2)初始化的方式創(chuàng)建數(shù)組在定義數(shù)組的時候,可以不使用new關(guān)鍵字,直接給出初始化的元素初值列表,系統(tǒng)將先按照初值的個數(shù)在堆內(nèi)存中創(chuàng)建數(shù)組對象,然后將初值依次存儲在數(shù)組元素中。數(shù)組元素類型[]數(shù)組名={元素初值列表};例如:int[]array={1,2,3,4,5};【例2.13】理解數(shù)組引用性質(zhì)2.5.2使用數(shù)組1.?dāng)?shù)組元素的使用數(shù)組元素的使用方式:

數(shù)組名[下標(biāo)]2.遍歷數(shù)組中的元素Java還提供foreach循環(huán)語句。該語句提供一種簡單、明了的方法來循環(huán)訪問數(shù)組的元素。使用foreach語句的一般形式如下:for(數(shù)據(jù)類型

循環(huán)變量:數(shù)組或集合名){//循環(huán)體}int[]mya={1,2,3,4,5,6};

for(inti:mya)

System.out.print(""+i);2.5.2使用數(shù)組3.一維數(shù)組的應(yīng)用(1)遞推問題(2)排序問題

【例2.13】用數(shù)組來求Fibonacci數(shù)列問題。Fibonacci數(shù)列是1,1,2,3,5,8,13,21,34,…

【例2.14】編寫程序,用冒泡法對10個數(shù)排序(按由小到大的順序)。2.5.3多維數(shù)組1.二維數(shù)組的聲明和創(chuàng)建二維數(shù)組的定義有很多方式。第一種方式:數(shù)據(jù)類型[][]數(shù)組名=new數(shù)據(jù)類型[行的個數(shù)][列的個數(shù)];下面以第一種方式聲明一個數(shù)組,如下所示。int[][]xx=newint[3][4];2.5.3多維數(shù)組1.二維數(shù)組的聲明和創(chuàng)建第二種方式:數(shù)據(jù)類型[][]數(shù)組名=newint[行的個數(shù)][];下面以第二種方式聲明一個數(shù)組,如下所示。int[][]xx=newint[3][];定義中只聲明了此二維數(shù)組由3個元素組成,其中每個元素是一維數(shù)組,需要繼續(xù)創(chuàng)建每個元素。例如:xx[0]=newint[1];xx[1]=newint[2];xx[2]=newint[3];2.5.3多維數(shù)組1.二維數(shù)組的聲明和創(chuàng)建第三種方式:數(shù)據(jù)類型[][]數(shù)組名={{第0行初始值},{第1行初始值},...,{第n行初始值}};下面以第三種方式聲明一個數(shù)組,如下所示。int[][]xx={{1,2},{3,4,5,6},{7,8,9}};2.5.3多維數(shù)組2.二維數(shù)組中元素的訪問二維數(shù)組中元素的訪問也是通過索引的方式。二維數(shù)組元素的表示形式為:數(shù)組名[行下標(biāo)][列下標(biāo)]以下普通for循環(huán)的方式輸出數(shù)組arry的所有元素值。int[][]arry=newint[3][4];

for(i=0;i<3;i++){//先遍歷行

for(j=0;j<4;j++)//在每一行,逐一遍歷各個列

System.out.print(arry[i][j]+"");//從遍歷的行和列獲取二維數(shù)組的元素內(nèi)容

System.out.println();}3.二維數(shù)組的應(yīng)用輸出九行楊輝三角形2.5.4Arrays類在Java中,數(shù)組實際上是對象。Arrays類是所有數(shù)組類型的抽象基類型,位于java.util包中,使用時需要導(dǎo)入(importjava.util.Arrays),在Java中用作所有數(shù)組的基類,提供創(chuàng)建、操作、搜索和排序數(shù)組的方法。1.length屬性2.sort()方法3.fill()方法4.toString()和deepToString()方法5.copyOf()和copyOfRange()方法2.6Java方法方法就是一段可以重復(fù)調(diào)用的代碼。在Java中,定義一個方法的語法格式如下:修飾符返回值類型方法名(參數(shù)類型參數(shù)名1,參數(shù)類型參數(shù)名2,...){

執(zhí)行語句 ... return返回值;}【例2.17】演示方法的定義與調(diào)用。2.6Java方法2.6.2方法的重載所謂方法重載,就是在同一個作用域內(nèi)方法名相同但參數(shù)個數(shù)或者參數(shù)類型不同的方法。例如,在同一個作用域內(nèi)同時定義三個add()方法,這三個add()方法就是重載的方法?!纠?.18】演示重載方法的定義與調(diào)用,在該案例中,定義三個add()方法,分別用于實現(xiàn)兩個整數(shù)相加、三個整數(shù)相加以及兩個小數(shù)相加的功能。定義了三個同名的add()方法,但它們的參數(shù)個數(shù)或類型不同,從而形成了方法的重載。在main()方法中調(diào)用add()方法時,通過傳入不同的參數(shù)便可以確定調(diào)用哪個重載的方法,如add(1,2)調(diào)用的是add(intx,inty)方法。需要注意的是,方法的重載與返回值類型無關(guān)。本章小結(jié)1.常量與變量2.運(yùn)算符和表達(dá)式3.邏輯控制語句4.Java數(shù)組第3章Java面向?qū)ο蠡A(chǔ)

本章內(nèi)容3.1面向?qū)ο蟪绦蛟O(shè)計的思想和概念3.2Java語言的類和對象3.3構(gòu)造方法3.4this關(guān)鍵字3.5static關(guān)鍵字3.6包3.7綜合案例——模擬猜拳游戲3.8綜合案例——酒店客房管理3.1面向?qū)ο蟪绦蛟O(shè)計的思想和概念

面向?qū)ο蟪绦蛟O(shè)計(ObjectOrientedProgramming,OOP)是軟件系統(tǒng)設(shè)計與實現(xiàn)的方法,這種方法既吸取了結(jié)構(gòu)化程序設(shè)計的絕大部分優(yōu)點(diǎn),又考慮了現(xiàn)實世界與面向?qū)ο罂臻g的映射關(guān)系,所追求的目標(biāo)是將現(xiàn)實世界的問題求解盡可能的簡單化。在自然界和社會生活中,一個復(fù)雜的事物總是由很多部分組成的。面向?qū)ο蟪绦蛟O(shè)計方法提出了一些全新的概念,如類和對象、封裝、繼承和多態(tài)3.1面向?qū)ο蟪绦蛟O(shè)計的思想和概念3.1.1類和對象的概念1.類面向?qū)ο蠓椒ㄖ械摹邦悺?,是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供了抽象的描述,其內(nèi)部包括屬性和行為兩個主要部分。2.對象面向?qū)ο蠓椒ㄖ械膶ο?,是描述系統(tǒng)中某一客觀事物的一個實體。對象由一組屬性和一組行為構(gòu)成。屬性是用來描述對象靜態(tài)特征的數(shù)據(jù)項,而行為是用來描述對象動態(tài)特征的操作序列。類和對象的關(guān)系就像模具與產(chǎn)品之間的關(guān)系,一個屬于某類的對象稱為該類的一個實例,如張三就是人這個類的一個實例,或是這個類的具體表現(xiàn)。對象和類對象和類屬性(數(shù)據(jù)成員、成員變量)3.1面向?qū)ο蟪绦蛟O(shè)計的思想和概念3.1.2面向?qū)ο蟮娜筇匦?.封裝與數(shù)據(jù)隱藏在Java中,封裝是通過類來實現(xiàn)的。類是描述具有相同屬性和方法的對象的集合,定義了該集合中每個對象所共有的屬性和方法。封裝也是面向?qū)ο蠓椒ㄖ械囊粋€重要原則。2.繼承繼承(inheritance)是面向?qū)ο蟪绦蛟O(shè)計能夠提高軟件開發(fā)效率的重要原因之一,也是軟件規(guī)?;囊粋€重要手段。子類的對象擁有其父類的全部屬性和行為,稱為子類對父類的繼承。例如,人們認(rèn)識了汽車的特征之后,再考慮小轎車時,因為知道小轎車也是汽車,于是認(rèn)為小轎車具有汽車的全部一般特征,從而可以把精力用于發(fā)現(xiàn)和描述小轎車不同于一般汽車的獨(dú)有的那些特征。3.1面向?qū)ο蟪绦蛟O(shè)計的思想和概念3.1.2面向?qū)ο蟮娜筇匦?.多態(tài)性面向?qū)ο蟮耐ㄐ艡C(jī)制是消息,面向?qū)ο蠹夹g(shù)是通過向未知對象發(fā)送消息來進(jìn)行程序設(shè)計的。當(dāng)一個對象發(fā)出消息時,對于相同的消息,不同的對象具有不同的反應(yīng)能力。這樣,一個消息可以產(chǎn)生不同的響應(yīng)效果,這種現(xiàn)象稱為多態(tài)性。在操作計算機(jī)時,“雙擊鼠標(biāo)左鍵”這個操作可以很形象地說明多態(tài)性的概念。不同的對象會有不同的反應(yīng)?!拔募A”對象“可執(zhí)行文件”對象音樂文件多態(tài)

Animal類Dog類Bird類Fish類動物會“動”act行為不同3.1面向?qū)ο蟪绦蛟O(shè)計的思想和概念3.1.3面向?qū)ο蠛兔嫦蜻^程的區(qū)別C語言是一個結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制),面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依次調(diào)用就可以了。面向?qū)ο笫前褬?gòu)成問題事務(wù)分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描述某個事物在整個解決問題的步驟中的行為。五子棋游戲為例講解面向過程的設(shè)計五子棋面向過程的設(shè)計思路就是首先分析問題的步驟:①開始游戲,②黑子先走,③繪制畫面,④判斷輸贏,⑤輪到白子,⑥繪制畫面,⑦判斷輸贏,⑧返回步驟②,⑨輸出最后結(jié)果。把上面每個步驟用分別的函數(shù)來實現(xiàn),問題就解決了。面向?qū)ο蟮脑O(shè)計而面向?qū)ο蟮脑O(shè)計則是從另外的思路來解決問題。整個五子棋可以分為①黑白雙方,這兩方的行為是一模一樣的;②棋盤系統(tǒng),負(fù)責(zé)繪制畫面;③規(guī)則系統(tǒng),負(fù)責(zé)判定諸如犯規(guī)、輸贏等。第一類對象(玩家對象)負(fù)責(zé)接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負(fù)責(zé)在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進(jìn)行判定。好處:功能擴(kuò)展容易加入悔棋的功能僅僅改動(棋盤對象)

五子棋游戲改為圍棋游戲,區(qū)別就是規(guī)則面向過程的設(shè)計【例3.1】面向過程編程的方法實現(xiàn)輸入圓的半徑,求圓的周長和面積。①輸入半徑r;②計算周長=2*π*r;③計算面積=pi*r2;④輸出半徑、周長、面積。importjava.util.Scanner;publicclassExample3_1{publicstaticvoidjisuan(intr){System.out.println("theradiusis:"+r);System.out.println("theareais:"+r*r*3.14);System.out.println("thegirthis:"+2*r*3.14);}publicstaticvoidmain(String[]args){intr;System.out.println("inputtheradius:");Scannerscanner=newScanner(System.in);System.out.print("請輸入第半徑:");r=scanner.nextInt();//鍵盤輸入

jisuan(r);}}面向?qū)ο蟮脑O(shè)計設(shè)計圓類對象實例importjava.util.Scanner;classCircle{doubleradius;voidsetRadius(doubler){radius=r;}voidgetGirth(){System.out.println("theareais:"+2*radius*3.14);}voidgetArea(){System.out.println("theareais:"+radius*radius*3.14);}};publicclassExample3_2{publicstaticvoidmain(String[]args){Circlec;//對象實例

c.setRadius(3);c.getGirth();c.getArea();}}3.2Java語言的類和對象在Java程序中類和對象是最基本、最重要的單元。類表示某類群體的一些基本特征抽象,對象表示一個個具體的事物。學(xué)生可以看作是一個類,小明、李華、大軍都是學(xué)生類型的對象。類用于描述多個對象的共同特征,它是對象的模板。對象用于描述現(xiàn)實中的個體,它是類的實例。對象是根據(jù)類創(chuàng)建的,一個類可以對應(yīng)多個對象。3.2.1類的定義class類名{

成員變量;//靜態(tài)變量(類變量)和實例變量

成員方法;}成員變量用于描述對象的特征,成員變量也被稱作對象的屬性;成員方法用于描述對象的行為,可簡稱為方法。類名首字母大寫,駝峰描述法DrawCicle3.2.1類的定義學(xué)生類定義的示例代碼如下所示。classStudent{Stringname; //定義String類型的變量nameintage=22; //定義int類型的變量ageStringsex; //定義String類型的變量sex//定義sayHello

()方法

voidsayHello(){System.out.println("大家好,我是"+name+"!");}}定義梯形類Lader類,里面計算面積方法--行為UML圖3.2.1類的定義在Java中,定義在類中的變量被稱為成員變量,定義在方法中的變量被稱為局部變量。classStudent{intage=20; //類中定義的變量被稱作成員變量voidsayHello(){intage=30; //方法內(nèi)部定義的變量被稱作局部變量System.out.println("大家好,我"+age+"歲了,我在看書!");

}

voidsayHello2(){

System.out.println(“大家好,我”+age+“歲了,我在看書!”);//age=?}}3.2.2對象的創(chuàng)建與使用對象(Object)是實際世界中存在的個體或概念實體,它表示世界中某個具體的事物,如一個電腦、一本書等事物都屬于對象。classStudent{Stringname; //定義String類型的變量nameintage; //定義int類型的變量ageStringsex; //定義String類型的變量sex//定義sayHello

()方法

voidsayHello(){System.out.println("大家好,我是"+name+"!");}}3.2.2對象的創(chuàng)建與使用1.對象的創(chuàng)建在Java程序中可以使用new關(guān)鍵字創(chuàng)建對象,具體格式如下:類名對象名稱;對象名稱=new類名();classStudent{Stringname; //定義String類型的變量name//定義sayHello

()方法

voidsayHello(){System.out.println("大家好,我是"+name+"!");}}Studentstu;stu

=newStudent();3.2.2對象的創(chuàng)建與使用2.對象屬性和方法的訪問通過“.”運(yùn)算符實現(xiàn),格式如下:對象名稱.屬性名對象名稱.方法名

classStudent{ Stringname;//聲明姓名屬性 voidsayHello(){

System.out.println("大家好,我是"+name); }}publicclassExample3_4{publicstaticvoidmain(String[]args){ Studentstu1=newStudent();//創(chuàng)建第一個Student對象

Studentstu2=newStudent();//創(chuàng)建第二個Student對象

="小明";

//為stu1對象的name屬性賦值

stu1.sayHello();

//調(diào)用對象的方法

="小華";

stu2.sayHello(); }}3.2.2對象的創(chuàng)建與使用classStudent{ Stringname;//聲明姓名屬性 voidsayHello(){

System.out.println("大家好,我是"+name); }}publicclassExample3_4{publicstaticvoidmain(String[]args){ Studentstu1=newStudent();//創(chuàng)建第一個Student對象

Studentstu2=newStudent();//創(chuàng)建第二個Student對象

="小明";//為stu1對象的name屬性賦值

stu1.sayHello();//調(diào)用對象的方法

="小華";

stu2.sayHello(); }}對象的引用【例3.5】對象的引用傳遞。classStudent{Stringname; //聲明姓名屬性

intage; //聲明年齡屬性

voidsayHello(){System.out.println("大家好,我是"+name+",年齡"+age);}}publicclassExample3_5{publicstaticvoidmain(String[]args){Studentstu1=newStudent();//聲明stu1對象并實例化

Studentstu2=null;//聲明stu2對象,但不對其進(jìn)行實例化

stu2=stu1;

//stu1給stu2分配空間使用權(quán)。

="小明";//為stu1對象的name屬性賦值

stu1.age=20;stu1.sayHello();//調(diào)用對象的方法

stu2.age=50;stu2.sayHello();}}3.3構(gòu)造方法

在Java中提供了一個特殊的成員方法——構(gòu)造方法(也稱為構(gòu)造函數(shù)),通過構(gòu)造方法可以為對象的屬性初始化。創(chuàng)建一個類時都會提供一個默認(rèn)的構(gòu)造方法,即無參的構(gòu)造方法,這里構(gòu)造方法的名字和類名相同,而且沒有返回值。構(gòu)造方法名稱前不能有任何返回值類型(包括void類型)的聲明。不能在構(gòu)造方法中使用return返回一個值,但是可以單獨(dú)寫return語句作為方法的結(jié)束。1.構(gòu)造方法的定義構(gòu)造方法是類的一個特殊成員方法,在類實例化對象時自動調(diào)用?!纠?.6】創(chuàng)建一個類名為Student的類,其擁有一個不帶參數(shù)的構(gòu)造方法Student()?!纠?.7】創(chuàng)建一個類名為Student的類,其擁有一個帶參數(shù)的構(gòu)造方法Student()。3.3構(gòu)造方法

2.構(gòu)造方法重載與普通方法一樣,構(gòu)造方法也可以重載。當(dāng)一個方法名相同而參數(shù)不同時,則說明方法重載。重載是為了可以使用同一個方法名來實現(xiàn)多種功能,默認(rèn)構(gòu)造方法和帶參構(gòu)造方法也是重載?!纠?.8】構(gòu)造方法的重載和普通成員方法的重載。3.4this關(guān)鍵字

注意Java中有一個特殊的對象實例為this,其只能在方法內(nèi)部使用,表示調(diào)用這個方法的對象實例。Java中的this關(guān)鍵字語法比較靈活,其主要作用有以下2種。(1)使用this關(guān)鍵字訪問成員變量。(2)使用this關(guān)鍵字調(diào)用本類的構(gòu)造方法。1.使用this關(guān)鍵字訪問成員變量【例3.9】this關(guān)鍵字訪問成員變量。3.4this關(guān)鍵字

2.使用this關(guān)鍵字調(diào)用構(gòu)造方法構(gòu)造方法是在實例化對象時被Java虛擬機(jī)自動調(diào)用,在程序中不能像調(diào)用其他成員方法一樣調(diào)用構(gòu)造方法,但可以在一個構(gòu)造方法中使用“this(參數(shù)1,參數(shù)2…)”的形式調(diào)用其他的構(gòu)造方法?!纠?.10】this關(guān)鍵字調(diào)用構(gòu)造方法。應(yīng)注意以下幾點(diǎn):①只能在構(gòu)造方法中使用this調(diào)用其他的構(gòu)造方法,不能在成員方法中通過this調(diào)用其他構(gòu)造方法。②在構(gòu)造方法中,使用this調(diào)用構(gòu)造方法的語句必須位于第一行,且只能出現(xiàn)一次。3.5static關(guān)鍵字

在Java中,static關(guān)鍵字是一個修飾符,用于修飾類的成員方法、類的成員變量,另外可以編寫static代碼塊來優(yōu)化程序性能;被static關(guān)鍵字修飾的方法或者成員變量不需要依賴于對象來進(jìn)行訪問,只要類被加載就可以通過類名去進(jìn)行訪問。3.5.1靜態(tài)成員變量在類中,用static聲明的成員變量為靜態(tài)成員變量,也稱為類變量。靜態(tài)成員變量是屬于類的,也就是從類被創(chuàng)建好后便一直存在,其生命周期與其所在的類相同,在整個應(yīng)用程序執(zhí)行期間都有效。若一個類有多個對象實例,那么這些實例會共享該靜態(tài)成員變量。同時在類不創(chuàng)建實例對象的情況下,同樣可以用類名訪問該靜態(tài)成員變量的值?!纠?.11】訪問靜態(tài)成員變量。3.5static關(guān)鍵字

3.5.2靜態(tài)方法static修飾的方法一般稱作靜態(tài)方法,也稱為類方法。由于靜態(tài)方法不依賴于任何對象就可以進(jìn)行訪問,因此對于靜態(tài)方法來說,是沒有this的,因為它不依附于任何對象,既然都沒有對象,就談不上this了。并且由于這個特性,在靜態(tài)方法中不能訪問類的非靜態(tài)成員變量和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論