版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java簡(jiǎn)介第一章就業(yè)技能結(jié)構(gòu)圖本門(mén)課程主要技能點(diǎn)課程整體目標(biāo)掌握J(rèn)ava語(yǔ)言基礎(chǔ)知識(shí)理解面向?qū)ο蟮木幊趟枷脒\(yùn)用Java編寫(xiě)命令行程序運(yùn)用JDBC編寫(xiě)數(shù)據(jù)庫(kù)訪問(wèn)程序運(yùn)用Swing組件編寫(xiě)圖形用戶(hù)界面程序運(yùn)用Swing組件和JDBC實(shí)現(xiàn)C/S結(jié)構(gòu)的應(yīng)用程序課程項(xiàng)目展示俄羅斯方塊游戲演示演示項(xiàng)目案例:俄羅斯方塊預(yù)習(xí)檢查什么是程序?Java領(lǐng)域有哪些技術(shù)?創(chuàng)建一個(gè)Java程序的步驟?本章目標(biāo)了解Java語(yǔ)言了解Java程序的類(lèi)型理解Java虛擬機(jī)(JVM)掌握J(rèn)ava程序運(yùn)行環(huán)境的配置編寫(xiě)第一個(gè)基于Java的程序Java中程序的注釋Java釋義“Java”一詞的本意是地名——“爪哇”;爪哇島位于南太平洋,是印度尼西亞的一部分。爪哇島關(guān)于爪哇全世界三大咖啡產(chǎn)地:巴西印尼爪哇島中國(guó)海南島由此可見(jiàn),Java的原意是指一個(gè)咖啡的產(chǎn)地,也可以說(shuō)是一種咖啡的品牌。Java語(yǔ)言簡(jiǎn)介Java是一種程序設(shè)計(jì)語(yǔ)言,由SunMicrosystem公司于1995年推出;早在1991年,Sun公司的JamesGosling等人開(kāi)始開(kāi)發(fā)名為Oak的程序設(shè)計(jì)語(yǔ)言,希望用來(lái)控制嵌入在有線電視機(jī)頂盒和PDA等設(shè)備中的微處理器;1994年,Oak語(yǔ)言正式更名為Java;Java語(yǔ)言憑借其獨(dú)有的安全性、可移植性和平臺(tái)無(wú)關(guān)性,迅速走紅。Java可以做什么開(kāi)發(fā)桌面應(yīng)用程序銀行軟件、商場(chǎng)結(jié)算軟件開(kāi)發(fā)面向Internet的應(yīng)用程序網(wǎng)上數(shù)碼商城、阿里巴巴、易趣網(wǎng)演示示例:Java2DDemoJava與InternetInternet使Java成為網(wǎng)絡(luò)上最流行的編程語(yǔ)言;同時(shí),Java對(duì)Internet的影響也意義深遠(yuǎn);在Java出現(xiàn)以前,幾乎沒(méi)有工具可以在Internet上執(zhí)行動(dòng)態(tài)交互程序;使用Java語(yǔ)言編寫(xiě)的Applet程序可以對(duì)用戶(hù)的輸入和操作作出響應(yīng)。Java程序的類(lèi)型-AppletApplet(小應(yīng)用程序)是用Java編寫(xiě),在Internet上運(yùn)行的程序,可以在任何客戶(hù)端系統(tǒng)上下載,在瀏覽器中運(yùn)行。Java程序的類(lèi)型-ApplicationApplication(應(yīng)用程序)是指在計(jì)算機(jī)操作系統(tǒng)支持下運(yùn)行的程序,它既可以基于圖形界面,又可以基于控制臺(tái)。Java的平臺(tái)無(wú)關(guān)性Java是一種既面向?qū)ο笥挚梢钥缙脚_(tái)的語(yǔ)言,即:編寫(xiě)一次,隨處運(yùn)行;Java不僅適用于單機(jī)應(yīng)用程序和基于網(wǎng)絡(luò)的程序,也可用于創(chuàng)建消費(fèi)類(lèi)設(shè)備的附件程序,如移動(dòng)電話、掌上設(shè)備等。Java源程序代碼WindowsLinuxSolarisJVMJava虛擬機(jī)Java字節(jié)碼(可跨平臺(tái))編譯運(yùn)行Java虛擬機(jī)Java虛擬機(jī)(JavaVirtualMachine)是可運(yùn)行Java字節(jié)碼的虛擬計(jì)算機(jī)系統(tǒng);使用Java語(yǔ)言編寫(xiě)的程序,實(shí)際上是運(yùn)行在JVM之上,而不是運(yùn)行在操作系統(tǒng)上;它有一個(gè)解釋器組件,可以實(shí)現(xiàn)Java字節(jié)碼和計(jì)算機(jī)操作系統(tǒng)之間的通信。用戶(hù)USER字節(jié)碼程序JVM(Java虛擬機(jī))操作系統(tǒng)硬件Java虛擬機(jī)的運(yùn)行過(guò)程網(wǎng)絡(luò)JIT代碼生成器.java源代碼文件.class字節(jié)碼文件編譯時(shí)運(yùn)行時(shí)硬件類(lèi)加載器字節(jié)碼校驗(yàn)器解釋器Java開(kāi)發(fā)工具包開(kāi)發(fā)和運(yùn)行Java程序,必須依賴(lài)和使用由SunMicrosystem公司提供的Java開(kāi)發(fā)工具包(JavaDevelopmentKit)。操作系統(tǒng)Java虛擬機(jī)Java基礎(chǔ)類(lèi)庫(kù)客戶(hù)端編譯器瀏覽器插件開(kāi)發(fā)工具集成開(kāi)發(fā)環(huán)境JavaPlatform2JDK(Java開(kāi)發(fā)工具包)從1.3版本以后,Sun公司將其正式更名為JavaPlatform2;為適應(yīng)不同的用途,又將其細(xì)分為三個(gè)版本:J2SE(StandardEdition):標(biāo)準(zhǔn)版,適用于普通應(yīng)用程序的開(kāi)發(fā);J2EE(EnterpriseEdition):企業(yè)版,適用于大型企業(yè)級(jí)應(yīng)用程序的開(kāi)發(fā);J2ME(MircoEdition):微型版,適用于移動(dòng)設(shè)備或嵌入式設(shè)備的程序開(kāi)發(fā)。下載安裝JDK打開(kāi)瀏覽器,在地址欄鍵入:/j2se/1.6.3/download.html,登錄Sun公司的官方網(wǎng)站,免費(fèi)下載JDK軟件和文檔;下載完畢,即可安裝JDK;默認(rèn)安裝在C盤(pán)根目錄下bin目錄:存放可執(zhí)行文件;lib目錄:存放Java的類(lèi)庫(kù)文件;demo目錄:存放演示程序;jre目錄:存放Java運(yùn)行環(huán)境文件。
配置環(huán)境變量成功安裝JDK以后,還需配置環(huán)境變量才可以開(kāi)發(fā)和調(diào)試Java程序,右擊【我的電腦】→【屬性】→【高級(jí)】→【環(huán)境變量】:編輯Path變量新建classpath變量開(kāi)發(fā)Java程序的步驟創(chuàng)建Java源程序Java源程序可以使用任何文本編輯器創(chuàng)建與編輯,一般用.java作為擴(kuò)展名,其實(shí)就是一個(gè)使用Java語(yǔ)言編寫(xiě)的文本文件;編譯源程序Java編譯器讀取Java源程序并翻譯成Java虛擬機(jī)能夠明白的指令集合,并以字節(jié)碼的形式保存在文件中,通常,字節(jié)碼文件以.class作為擴(kuò)展名;運(yùn)行class(字節(jié)碼)文件Java解釋器讀取字節(jié)碼文件,取出指令并翻譯成計(jì)算機(jī)能夠執(zhí)行的機(jī)器代碼,完成運(yùn)行過(guò)程。編寫(xiě)第一個(gè)Java程序打開(kāi)記事本,新建一個(gè)文本文件,將文件名改為Hello.java,在文件中鍵入如下內(nèi)容并保存:classHello{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");}}Java源程序擴(kuò)展名為.java的源文件使用記事本進(jìn)行編輯使用javac編譯器編譯源文件接下來(lái)需要將源程序進(jìn)行編譯;進(jìn)入命令提示行,切換到源文件所在的目錄,執(zhí)行javac命令,使用javac編譯器編譯源文件;javac命令的格式是:javac完整的源文件名切換到源文件所在的目錄使用javac命令編譯源文件光標(biāo)閃爍表示語(yǔ)法無(wú)誤,順利通過(guò)編譯.class(字節(jié)碼)文件順利通過(guò)編譯后將生成一個(gè)擴(kuò)展名為.class的字節(jié)碼文件(類(lèi)描述文件)。擴(kuò)展名為.java的源文件通過(guò)編譯后生成的擴(kuò)展名為.class的字節(jié)碼文件使用java解釋器運(yùn)行字節(jié)碼文件進(jìn)入命令提示行,在字節(jié)碼文件所在的目錄下,執(zhí)行java命令,使用java解釋器運(yùn)行字節(jié)碼文件;java命令的格式是:java類(lèi)名稱(chēng)請(qǐng)注意:這里只需要類(lèi)名稱(chēng),而不是帶擴(kuò)展名的文件名。執(zhí)行java命令運(yùn)行字節(jié)碼文件程序運(yùn)行效果分析程序3-1關(guān)鍵字class用來(lái)定義一個(gè)類(lèi),Hello是類(lèi)的名稱(chēng);在Java程序中,所有的語(yǔ)句都必須放在某個(gè)類(lèi)中;整個(gè)類(lèi)及其所有成員都包含在一對(duì)花括號(hào)中(即{和}之間),它們標(biāo)志著類(lèi)定義塊的開(kāi)始和結(jié)束。定義類(lèi)的一般語(yǔ)法:
class類(lèi)名 { …… }分析程序3-2程序必須從main函數(shù)開(kāi)始執(zhí)行;關(guān)鍵字public是訪問(wèn)修飾符,用來(lái)控制類(lèi)成員的可見(jiàn)范圍及作用域;關(guān)鍵字static允許在不創(chuàng)建類(lèi)的實(shí)例的情況下,調(diào)用main函數(shù);關(guān)鍵字void用來(lái)說(shuō)明main函數(shù)是沒(méi)有返回值的;args是字符串?dāng)?shù)組,用來(lái)從命令行接收參數(shù);main函數(shù)的一般形式如下:
public
static
voidmain(String[]args) { …… }分析程序3-3String[]是字符串類(lèi)型的數(shù)組;在Java中,類(lèi)名稱(chēng)一般首字母大寫(xiě);使用System.out.println()將信息輸出到控制臺(tái)上,即打印出來(lái)。JavaAPI文檔JavaAPI文檔描述了Java的許多內(nèi)置功能,以及提供各種類(lèi)的幫助說(shuō)明,它是程序員經(jīng)常查閱的資料;可登錄Sun公司的官方網(wǎng)站免費(fèi)下載。Java語(yǔ)言的特點(diǎn)2-1簡(jiǎn)單去掉了C和C++中許多復(fù)雜功能,如指針、運(yùn)算符重載等,沒(méi)有g(shù)oto語(yǔ)句,沒(méi)有struct和union等;面向?qū)ο驤ava是完全面向?qū)ο蟮木幊陶Z(yǔ)言,比C++更徹底,純度更高;健壯性沒(méi)有指針,避免對(duì)指針的誤操作造成程序崩潰;程序員分配的內(nèi)存空間,無(wú)需釋放,由Java虛擬機(jī)的垃圾回收機(jī)制來(lái)統(tǒng)一完成此項(xiàng)工作,避免了內(nèi)存泄漏;Java語(yǔ)言的特點(diǎn)2-2安全性由于Java取消了指針運(yùn)算,有效地提高了程序的安全性;Java程序運(yùn)行在Java虛擬機(jī)上,虛擬機(jī)可以有效地過(guò)濾掉惡意代碼,防止程序員有意編寫(xiě)的病毒程序;分布性Java程序可以跨平臺(tái),跨操作系統(tǒng),完全支持網(wǎng)絡(luò)應(yīng)用程序的設(shè)計(jì);多線程Java程序使用一個(gè)稱(chēng)為“多線程”的進(jìn)程同時(shí)處理多項(xiàng)任務(wù)。小結(jié)程序運(yùn)行出現(xiàn)了問(wèn)題,怎么辦?如何定位錯(cuò)誤代碼的位置?如何知道錯(cuò)誤的原因?編程輸出以下信息。*********************************************
歡迎進(jìn)入Java編程世界*********************************************參考代碼Java文件中的注釋與其它編程語(yǔ)言一樣,也可以在Java文件添加注釋?zhuān)琂ava文件中的注釋有三種:?jiǎn)涡凶⑨專(zhuān)阂?/開(kāi)始,在行尾結(jié)束;多行注釋?zhuān)阂?*開(kāi)始,以*/結(jié)束,可以有多行;總結(jié)Java是面向?qū)ο蟮?、跨平臺(tái)的程序設(shè)計(jì)語(yǔ)言;Java程序是運(yùn)行在Java虛擬機(jī)之上的;要下載安裝JDK,才可以開(kāi)發(fā)和運(yùn)行Java程序;JDK提供一系列的工具,這些工具位于JDK安裝路徑的bin目錄下,常用的有:javac:編譯java:運(yùn)行javadoc:提取文檔可以使用任何文本編輯器編寫(xiě)Java源程序;Java中的注釋有三種:?jiǎn)涡凶⑨?、多行注釋、文檔注釋?zhuān)蛔鳂I(yè)1、完成(六)Java初級(jí)編程教材P13頁(yè)理論復(fù)習(xí)題。2、完成補(bǔ)充作業(yè)題。第二章Java語(yǔ)言基礎(chǔ)(上)作業(yè)點(diǎn)評(píng)本章相關(guān)詞匯(藍(lán)色為關(guān)鍵字)本章目標(biāo)Java中的變量和數(shù)據(jù)類(lèi)型Java中變量的作用域規(guī)則數(shù)據(jù)類(lèi)型轉(zhuǎn)換Java中的運(yùn)算符和表達(dá)式程序控制結(jié)構(gòu)變量變量是內(nèi)存中的一塊存儲(chǔ)區(qū)域,是存儲(chǔ)數(shù)據(jù)的基本單元;聲明變量的語(yǔ)法:
數(shù)據(jù)類(lèi)型標(biāo)識(shí)符[=值];如:
intnum;
floatmoney=123.45f;
charch1,ch2=‘A’;標(biāo)識(shí)符命名規(guī)則變量、函數(shù)、數(shù)組、對(duì)象、類(lèi)和接口等等都需要命名,這些名稱(chēng)統(tǒng)稱(chēng)為標(biāo)識(shí)符;Java中對(duì)于標(biāo)識(shí)符的命名規(guī)則作了如下限制:只能由英文字母、數(shù)字、下劃線“_”和“$”符號(hào)組成;必須以英文字母、“_”或“$”開(kāi)頭,即不能以數(shù)字開(kāi)頭;除“_”和“$”以外,不能包含其它任何特殊字符;不能與關(guān)鍵字沖突;嚴(yán)格區(qū)分大小寫(xiě)。關(guān)鍵字Java中的關(guān)鍵字:abstract、boolean、break、byte、case、catch、char、class、continue、do、double、else、enum、extends、false、find、finally、float、for、implements、import、instanceof、int、interface、long、native、new、null、package、private、protected、public、return、short、static、super、switch、synchronized、this、throw、throws、true、try、void、while標(biāo)識(shí)符命名規(guī)則練習(xí)題:ab$ a_b 13cn float Main ab doubles ab-12 a$.s name數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型用來(lái)確定要存儲(chǔ)在內(nèi)存單元中的數(shù)據(jù)的類(lèi)型;在Java中,數(shù)據(jù)類(lèi)型被區(qū)分成兩個(gè)種類(lèi):原始數(shù)據(jù)類(lèi)型引用數(shù)據(jù)類(lèi)型原始數(shù)據(jù)類(lèi)型原始數(shù)據(jù)類(lèi)型是最簡(jiǎn)單的數(shù)據(jù)形式,與C的基本數(shù)據(jù)類(lèi)型很相似:數(shù)據(jù)類(lèi)型轉(zhuǎn)換程序中經(jīng)常會(huì)遇到要將數(shù)據(jù)類(lèi)型進(jìn)行轉(zhuǎn)換的情況(如:在一個(gè)表達(dá)式中存在不同類(lèi)型的操作數(shù)時(shí)),Java的數(shù)據(jù)類(lèi)型轉(zhuǎn)換比C控制得更為嚴(yán)格;數(shù)據(jù)類(lèi)型轉(zhuǎn)換有兩種情況:自動(dòng)類(lèi)型轉(zhuǎn)換強(qiáng)制類(lèi)型轉(zhuǎn)換自動(dòng)類(lèi)型轉(zhuǎn)換自動(dòng)類(lèi)型轉(zhuǎn)換也稱(chēng)作隱式類(lèi)型轉(zhuǎn)換;將一種類(lèi)型的變量賦值給另一種類(lèi)型的變量時(shí),只要滿足以下條件,就會(huì)發(fā)生自動(dòng)類(lèi)型轉(zhuǎn)換:兩種類(lèi)型之間相互兼容;目標(biāo)類(lèi)型大于源類(lèi)型(即類(lèi)型提升);如:
charch='A';
intnum=ch;
floatf=num;
doubled=f;
//類(lèi)型轉(zhuǎn)換自動(dòng)發(fā)生,無(wú)需顯式說(shuō)明強(qiáng)制類(lèi)型轉(zhuǎn)換強(qiáng)制類(lèi)型轉(zhuǎn)換也稱(chēng)作顯式類(lèi)型轉(zhuǎn)換;如果被轉(zhuǎn)換的值的數(shù)據(jù)類(lèi)型大于其目標(biāo)類(lèi)型,將會(huì)丟失部分信息;如:
intx=65;
charch=x;這樣的語(yǔ)句將報(bào)錯(cuò),因?yàn)閏har類(lèi)型小于int類(lèi)型,編譯器無(wú)法將其自動(dòng)轉(zhuǎn)換,只能進(jìn)行強(qiáng)制轉(zhuǎn)換:
intx=65;
charch=(char)x;類(lèi)型提升規(guī)則不難看出,在有類(lèi)型提升的情況下,編譯器將自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換,否則就要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換;類(lèi)型提升應(yīng)遵循如下規(guī)則:兩種類(lèi)型必須兼容,且目標(biāo)類(lèi)型大于源類(lèi)型,例如: byte、char和short類(lèi)型都可以提升為int型。對(duì)于表達(dá)式而言,其最終結(jié)果將會(huì)與表達(dá)式中最高的數(shù)據(jù)類(lèi)型相同。引用數(shù)據(jù)類(lèi)型在Java中,除了上述8種原始數(shù)據(jù)類(lèi)型的變量以外,其余的全都屬于引用數(shù)據(jù)類(lèi)型,其中包括:數(shù)組對(duì)象存儲(chǔ)在引用類(lèi)型變量中的值是該變量表示的值的地址;變量的作用域和生命周期變量的作用域指變量起作用的范圍,說(shuō)明變量在什么部分可以被訪問(wèn);變量的生命周期是指變量在內(nèi)存中存在的周期,即什么時(shí)候分配空間,什么時(shí)候銷(xiāo)毀;作用域示例/*用于演示變量的作用域*/public
classScopeVariable{
public
static
voidmain(String[]args){
intouter=10;//outer定義在外層作用域
if(outer<100){ intinner=outer*2; //inner定義在內(nèi)層作用域
}
/*正確,main方法內(nèi)都可以訪問(wèn)outer變量*/ System.out.println("outer="+outer);
/*錯(cuò)誤,外層作用域不能訪問(wèn)定義在內(nèi)層作用域的變量*/ System.out.println("inner="+inner);}}運(yùn)算符和表達(dá)式運(yùn)算符是通過(guò)一定的運(yùn)算規(guī)則操作一個(gè)或多個(gè)操作數(shù),并生成結(jié)果的特定符號(hào);運(yùn)算符和操作數(shù)的有效組合稱(chēng)為表達(dá)式;Java提供了一系列豐富的運(yùn)算符,包括:算術(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符條件運(yùn)算符賦值運(yùn)算符算術(shù)運(yùn)算符算術(shù)運(yùn)算符主要用于數(shù)學(xué)計(jì)算,一般使用數(shù)值作為操作數(shù):關(guān)系運(yùn)算符關(guān)系運(yùn)算符可以測(cè)試兩個(gè)操作數(shù)之間的關(guān)系(但不會(huì)改變操作數(shù)的值),關(guān)系表達(dá)式的結(jié)果為boolean型true/false:邏輯運(yùn)算符邏輯運(yùn)算符與boolean型操作數(shù)一起使用:邏輯與和邏輯或Java提供了兩個(gè)在其它計(jì)算機(jī)語(yǔ)言中沒(méi)有的邏輯運(yùn)算符,這就是邏輯與和邏輯或的短路版本;對(duì)于短路與(&&),如果其左側(cè)為false,則不再計(jì)算其右側(cè),整個(gè)表達(dá)式的結(jié)果為false,只有左側(cè)為true時(shí)才計(jì)算右側(cè);對(duì)于短路或(||),如果其左側(cè)為true,則不再計(jì)算其右側(cè),整個(gè)表達(dá)式的結(jié)果為true,只有左側(cè)為false時(shí),才計(jì)算右側(cè)。短路與示例inta=10;intb=20;if(++a==12&++b==22){……}System.out.println(a);System.out.println(b);/*這里使用的是邏輯與,試分析最后的輸出結(jié)果*/inta=10;intb=20;if(++a==12&&++b==22){……}System.out.println(a);System.out.println(b);/*這里使用的是短路與,試分析最后的輸出結(jié)果*/11211120賦值運(yùn)算符賦值運(yùn)算符的運(yùn)算順序是從右至左的:條件運(yùn)算符?:條件運(yùn)算符是三元運(yùn)算符;它的一般形式是:
表達(dá)式1?表達(dá)式2:表達(dá)式3根據(jù)表達(dá)式1的結(jié)果來(lái)判斷執(zhí)行表達(dá)式2還是表達(dá)式3,如果表達(dá)式1的結(jié)果為true,則執(zhí)行表達(dá)式2,否則執(zhí)行表達(dá)式3;條件運(yùn)算符在某些情況下能夠替代小型的if…else語(yǔ)句。運(yùn)算符的優(yōu)先級(jí)很多情況下,一個(gè)表達(dá)式由多個(gè)運(yùn)算符組成,優(yōu)先級(jí)決定運(yùn)算符的計(jì)算順序:控制流語(yǔ)句一般情況下,程序是從上往下依次順序執(zhí)行的;但很多時(shí)候,我們需要改變程序執(zhí)行的流程,這就使用到了控制流語(yǔ)句;控制流語(yǔ)句包括:判斷語(yǔ)句循環(huán)語(yǔ)句跳轉(zhuǎn)語(yǔ)句判斷語(yǔ)句判斷語(yǔ)句也稱(chēng)作條件語(yǔ)句或分支語(yǔ)句;判斷語(yǔ)句主要用來(lái)控制程序在何種情況下執(zhí)行某一部分;判斷語(yǔ)句包括:if語(yǔ)句if…else語(yǔ)句if…elseif語(yǔ)句switch…case語(yǔ)句練習(xí):寫(xiě)程序,若星期一到星期五,則打印出“工作快樂(lè)”,若星期六、星期天則輸出“周末更快樂(lè)”循環(huán)語(yǔ)句循環(huán)語(yǔ)句也稱(chēng)作迭代語(yǔ)句;循環(huán)語(yǔ)句可用于重復(fù)執(zhí)行相同的操作;循環(huán)語(yǔ)句包括:while語(yǔ)句do…while語(yǔ)句for語(yǔ)句練習(xí):使用循環(huán)打印九九乘法表跳轉(zhuǎn)語(yǔ)句跳轉(zhuǎn)語(yǔ)句允許以非線性的方式執(zhí)行程序,可以將控制權(quán)轉(zhuǎn)到程序的其它部分;跳轉(zhuǎn)語(yǔ)句包括:break語(yǔ)句continue語(yǔ)句Java拋棄了C語(yǔ)言中的goto語(yǔ)句。跳轉(zhuǎn)語(yǔ)句判斷下面程序能循環(huán)多少次?classTest{ publicstaticvoidmain(String[]args){ inti=0; while(i<10){ if(i<10){ i++; continue; } if(i==5){ break; } } System.out.println(i); }}第二章Java語(yǔ)言基礎(chǔ)(下)如果要將某些信息打印到屏幕上,就必須使用輸出語(yǔ)句;使用System.out.println()實(shí)現(xiàn)換行輸出效果;使用System.out.print()實(shí)現(xiàn)輸出但不換行效果;無(wú)論輸出什么類(lèi)型的數(shù)據(jù),只需將數(shù)據(jù)作為參數(shù)傳遞給它們即可,而無(wú)需像C語(yǔ)言中那樣,使用%s、%d之類(lèi)的控制字符,如:
inta=10;
floatf=3.14f; System.out.println(a); System.out.print(f); System.out.println('X');作業(yè)點(diǎn)評(píng)有些時(shí)候,我們可能會(huì)需要對(duì)輸出格式進(jìn)行控制,這就使用到了轉(zhuǎn)義字符;以下是一些常用的轉(zhuǎn)義字符:本章目標(biāo)Java中的數(shù)組new關(guān)鍵字命令行參數(shù)回顧C(jī)語(yǔ)言中的內(nèi)存分配C語(yǔ)言中內(nèi)存分配的兩種形式:棧內(nèi)存:特點(diǎn):和作用域同生命周期,自動(dòng)申請(qǐng),自動(dòng)釋放。申請(qǐng)方式:局部變量,形式參數(shù)。棧內(nèi)存中的空間一般都有名稱(chēng),通過(guò)變量名訪問(wèn)其存儲(chǔ)的數(shù)據(jù)。堆內(nèi)存(即動(dòng)態(tài)內(nèi)存分配):特點(diǎn):手工申請(qǐng),手工釋放,生命周期由程序員決定。申請(qǐng)方式:由malloc函數(shù)或calloc函數(shù)申請(qǐng),realloc函數(shù)進(jìn)行調(diào)整,free函數(shù)負(fù)責(zé)釋放。堆內(nèi)存中的空間一般沒(méi)有名稱(chēng),只能通過(guò)指針訪問(wèn)。Java中的內(nèi)存分配Java中的原始數(shù)據(jù)類(lèi)型與C語(yǔ)言中的基本數(shù)據(jù)類(lèi)型一樣,其變量都是在棧中分配空間;而除了8種原始數(shù)據(jù)類(lèi)型以外,其它的任何數(shù)據(jù)都不可以在棧中分配,只能到堆中開(kāi)辟空間,而在堆中分配的空間又只能通過(guò)指針訪問(wèn);通過(guò)指針訪問(wèn)堆內(nèi)存的方式,在Java中被稱(chēng)作引用數(shù)據(jù)類(lèi)型;可以認(rèn)為,Java中的引用就類(lèi)似于C語(yǔ)言中的指針,只是對(duì)指針進(jìn)行了一定程度上的包裝,避免了因直接操作指針而造成的數(shù)據(jù)意外損壞,從而導(dǎo)致程序錯(cuò)誤的情況?;仡機(jī)語(yǔ)言中的數(shù)組在C語(yǔ)言中,從存儲(chǔ)方式上講,聲明數(shù)組有兩種情況;在棧內(nèi)存中分配空間,如:
intary[10];//聲明有10個(gè)整型元素的數(shù)組在堆內(nèi)存中分配空間,如:
int*p=NULL;//聲明整型指針
//指針指向堆空間 p=(int*)malloc(10*sizeof(int));C語(yǔ)言允許有棧數(shù)組,也允許有堆數(shù)組。 數(shù)組數(shù)組用于將相同類(lèi)型的數(shù)據(jù)存儲(chǔ)在連續(xù)的存儲(chǔ)單元中;可以通過(guò)指定數(shù)組的名稱(chēng)和長(zhǎng)度來(lái)聲明數(shù)組;一旦聲明數(shù)組的大小,就不能再修改;數(shù)組元素通過(guò)數(shù)組名和索引來(lái)訪問(wèn),索引從0開(kāi)始;數(shù)組可以是一維,也可以是多維。new關(guān)鍵字在Java中,不允許將數(shù)組分配在棧內(nèi)存中,只能分配在堆內(nèi)存中;Java中沒(méi)有類(lèi)似于malloc、calloc、realloc和free等函數(shù),取而代之的是new關(guān)鍵字;new是Java中內(nèi)置的操作符;new操作符用來(lái)從堆中分配指定類(lèi)型的內(nèi)存空間,并返回相應(yīng)類(lèi)型的引用,其作用類(lèi)似于malloc函數(shù)。Java中聲明數(shù)組的幾種方式在Java中聲明數(shù)組有如下方式://僅聲明數(shù)組的引用,但沒(méi)有分配內(nèi)存空間float[]fAry;//聲明數(shù)組的同時(shí),根據(jù)指定的長(zhǎng)度分配內(nèi)存,但數(shù)組中沒(méi)有值char[]chAry=new
char[10];//聲明數(shù)組并分配內(nèi)存,同時(shí)將其初始化int[]ary1=new
int[]{1,2,3,4,5};//與前一種方式相同,僅僅只是語(yǔ)法相對(duì)簡(jiǎn)略int[]ary2={1,2,3,4,5};聲明數(shù)組示例public
classArrayDemo{
public
static
voidmain(String[]args){
//聲明整型數(shù)組的引用,類(lèi)似于C中的int*p;
int[]ary;
//為數(shù)組引用在堆內(nèi)存中分配實(shí)際的內(nèi)存空間
//類(lèi)似于C中的p=(int*)malloc(10*sizeof(int));ary=new
int[10];
//使用循環(huán)為數(shù)組元素賦值
for(inti=0;i<ary.length;i++){ary[i]=i;}
//使用循環(huán)將數(shù)組元素逐個(gè)輸出到控制臺(tái)
for(inti=0;i<ary.length;i++){System.out.println(ary[i]);}}}數(shù)組之間賦值在C語(yǔ)言中,不可以將數(shù)組直接賦值給另一個(gè)數(shù)組;在Java中,語(yǔ)法上允許這樣做,但實(shí)際得到的效果是兩個(gè)數(shù)組引用指向同一塊內(nèi)存。
int[]ary1={2,4,6,8,10};
int[]ary2; ary2=ary1;//允許這樣賦值108642堆棧ary1ary2數(shù)組賦值示例public
classArrayDemo{
public
static
voidmain(String[]args){
int[]ary1={2,4,6,8,10};//聲明并初始化數(shù)組1
int[]ary2;//聲明數(shù)組2ary2=ary1;//將數(shù)組1賦值給數(shù)組2
ary2[3]=1024;//通過(guò)數(shù)組2修改其中一個(gè)元素的值
//打印出數(shù)組1中的元素
System.out.println("數(shù)組1中的元素:");
for(inti=0;i<ary1.length;i++){System.out.println(ary1[i]);}
//打印出數(shù)組2中的元素
System.out.println("數(shù)組2中的元素:");
for(inti=0;i<ary2.length;i++){System.out.println(ary2[i]);}}}關(guān)于數(shù)組長(zhǎng)度在Java中,程序員可以不再關(guān)注數(shù)組的長(zhǎng)度,數(shù)組自帶的length屬性將負(fù)責(zé)保管數(shù)組的長(zhǎng)度;C語(yǔ)言不檢查數(shù)組的邊界,數(shù)組索引完全由程序員掌握;Java對(duì)數(shù)組下標(biāo)越界情況強(qiáng)加約束;如果試圖訪問(wèn)不在有效索引以?xún)?nèi)的元素,將會(huì)引發(fā)運(yùn)行錯(cuò)誤。命令行參數(shù)在命令行使用java命令執(zhí)行程序時(shí),可以將一些參數(shù)傳遞給main函數(shù);main函數(shù)攜帶的String[](字符串?dāng)?shù)組)類(lèi)型的形參args正是為了接收這些來(lái)自命令行的參數(shù);可以從命令行傳遞任意多個(gè)字符串給main函數(shù),其間使用空格隔開(kāi),也可以不傳遞任何參數(shù);這些傳遞進(jìn)來(lái)的多個(gè)字符串最后以字符串?dāng)?shù)組的形式,供main函數(shù)中加以使用。命令行參數(shù)示例public
classArgumentDemo{
public
static
voidmain(String[]args){
intlen=args.length;//獲得命令行參數(shù)的個(gè)數(shù)
if(len>0)//判斷是否有命令行參數(shù)
{
//如果有,將其逐一打印到控制臺(tái)
System.out.println(len+"個(gè)命令行參數(shù),具體如下:");
for(inti=0;i<args.length;i++){System.out.println(args[i]);}}
else{
//否則給出提示信息
System.out.println("您沒(méi)有傳遞任何命令行參數(shù)。");}}}接收命令行參數(shù)輸入public
classArgumentDemo{
public
static
voidmain(String[]args){
Scannersc=newScanner(System.in);
//定義一個(gè)引用變量
intnum=sc.nextInt();System.out.println(num);
}}從命令行接收輸入:Scannersc=newSanner(System.in);JDBC基礎(chǔ)知識(shí)第三章java.io包中包含了一系列對(duì)輸入/輸出進(jìn)行操作的類(lèi)File類(lèi)用于訪問(wèn)文件系統(tǒng),但只能訪問(wèn)文件(或目錄)的屬性,而不能進(jìn)行讀/寫(xiě)操作流是指一連串流動(dòng)的數(shù)據(jù)信號(hào),是以先進(jìn)先出方式發(fā)送信息的通道,從流動(dòng)方向上區(qū)分,流可以分為輸入流和輸出流,從格式上區(qū)分,可以分為字節(jié)流和字符流使用FileInputStream類(lèi)和FileOutputStream類(lèi)以字節(jié)流的方式讀寫(xiě)文件回顧1回顧2FileReader類(lèi)和FileWriter類(lèi)配合BufferedReader類(lèi)和BufferedWriter類(lèi)可以以字符流的方式對(duì)文件進(jìn)行讀/寫(xiě)操作要從控制臺(tái)接受輸入,需要將System.in對(duì)象進(jìn)行包裝,使用如下語(yǔ)句:
InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr);絕大部分的IO操作都有可能拋出IOException本章相關(guān)詞匯本章目標(biāo)了解JDBC的概念和必要性了解JDBC驅(qū)動(dòng)程序類(lèi)型了解java.sql包理解JDBC程序的結(jié)構(gòu)使用JDBC進(jìn)行數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)簡(jiǎn)介當(dāng)今企業(yè)級(jí)應(yīng)用程序大部分采用了客戶(hù)機(jī)/服務(wù)器(C/S)模式;客戶(hù)端機(jī)器需要與服務(wù)器進(jìn)行通訊,要操作數(shù)據(jù)庫(kù)中的數(shù)據(jù),執(zhí)行SQL(StructuredQueryLanguage結(jié)構(gòu)化查詢(xún)語(yǔ)言)語(yǔ)句以及檢索查詢(xún)結(jié)果;在Java中實(shí)現(xiàn)這些活動(dòng)的技術(shù)稱(chēng)作JDBC。JDBCJDBC(JavaDataBaseConnectivity)是由SunMicrosystem公司提供的API(ApplicationProgrammingInterface應(yīng)用程序編程接口);它為Java應(yīng)用程序提供了一系列的類(lèi),使其能夠快速高效地訪問(wèn)數(shù)據(jù)庫(kù);這些功能是由一系列的類(lèi)和對(duì)象來(lái)完成的,我們只需使用相關(guān)的對(duì)象,即可完成對(duì)數(shù)據(jù)庫(kù)的操作。JDBC連接數(shù)據(jù)庫(kù)類(lèi)型使用JDBC連接數(shù)據(jù)庫(kù)可以通過(guò)不同的驅(qū)動(dòng)方式來(lái)實(shí)現(xiàn),有4種驅(qū)動(dòng)類(lèi)型:JDBC-ODBC橋驅(qū)動(dòng)純Java驅(qū)動(dòng)本地API部分Java驅(qū)動(dòng)JDBC網(wǎng)絡(luò)純Java驅(qū)動(dòng)不論采用哪種驅(qū)動(dòng)方式,在程序中對(duì)數(shù)據(jù)庫(kù)的操作方式基本相同,只是加載不同的驅(qū)動(dòng)程序即可。java.sql包
java.sql.DriverManager管理一組JDBC驅(qū)動(dòng)程序的基本服務(wù)。java.sql.Statement用于執(zhí)行靜態(tài)SQL語(yǔ)句并返回它所生成結(jié)果的對(duì)象。java.sql.PreparedStatement表示預(yù)編譯的SQL語(yǔ)句的對(duì)象。java.sql.ResultSet表示數(shù)據(jù)庫(kù)結(jié)果集的數(shù)據(jù)表,通常通過(guò)執(zhí)行查詢(xún)數(shù)據(jù)庫(kù)的語(yǔ)句生成。java.sql.SQLException提供關(guān)于數(shù)據(jù)庫(kù)訪問(wèn)錯(cuò)誤或其他錯(cuò)誤信息的異常。ODBCODBC(OpenDataBaseConnectivity)指開(kāi)放式數(shù)據(jù)庫(kù)連接,是由Microsoft公司提供的應(yīng)用程序接口;它負(fù)責(zé)連接各種不同產(chǎn)商和類(lèi)型的DBMS,然后為各種不同的編程語(yǔ)言提供查詢(xún)、插入、修改和刪除數(shù)據(jù)的功能;如同在各種不同的DBMS和各種不同的編程語(yǔ)言之間架設(shè)了一座通用的橋梁。JDBC程序訪問(wèn)數(shù)據(jù)庫(kù)步驟開(kāi)始導(dǎo)入java.sql包加載并注冊(cè)驅(qū)動(dòng)程序創(chuàng)建Connection對(duì)象創(chuàng)建Statement對(duì)象執(zhí)行SQL語(yǔ)句關(guān)閉ResultSet對(duì)象關(guān)閉Statement對(duì)象關(guān)閉Connection對(duì)象使用ResultSet對(duì)象建立數(shù)據(jù)源(ODBC)附加相應(yīng)產(chǎn)商提供的驅(qū)動(dòng)結(jié)束JDBC-ODBC橋方式純Java驅(qū)動(dòng)方式步驟詳解1:建立數(shù)據(jù)源這里以JDBC-ODBC橋驅(qū)動(dòng)方式為例,逐步詳細(xì)地講解在Java程序中如何操作數(shù)據(jù)庫(kù),而對(duì)于其它驅(qū)動(dòng)方式,只需更換驅(qū)動(dòng)程序即可,其余不變;首先建立ODBC數(shù)據(jù)源: 【開(kāi)始】→【設(shè)置】→【控制面板】→【管理工具】→【數(shù)據(jù)源(ODBC)】新建數(shù)據(jù)源,名稱(chēng)可以任意,這里假設(shè)已經(jīng)建立了一個(gè)名為myODBC的數(shù)據(jù)源,連接到SQLServer2005中的pubs數(shù)據(jù)庫(kù)。步驟詳解2:加載驅(qū)動(dòng)程序使用Class類(lèi)的forName方法,將驅(qū)動(dòng)程序類(lèi)加載到JVM(Java虛擬機(jī))中;對(duì)于使用JDBC-ODBC橋的驅(qū)動(dòng)方式,應(yīng)該加載: sun.jdbc.odbc.JdbcOdbcDriver類(lèi)如:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");步驟詳解3:獲得連接對(duì)象成功加載驅(qū)動(dòng)后,必須使用DriverManager類(lèi)的靜態(tài)方法getConnection來(lái)獲得連接對(duì)象;對(duì)于使用JDBC-ODBC橋的連接方式,連接字符串的一般形式是:“jdbc:odbc:數(shù)據(jù)源名稱(chēng)”,如: Connectioncon= DriverManager.getConnection("jdbc:odbc:myODBC","sa","");步驟詳解釋4:創(chuàng)建語(yǔ)句對(duì)象一旦成功連接到數(shù)據(jù)庫(kù),獲得Connection對(duì)象后,必須通過(guò)Connection對(duì)象的createStatement方法來(lái)創(chuàng)建語(yǔ)句對(duì)象,才可以執(zhí)行SQL語(yǔ)句;如:
Statementsta=con.createStatement();步驟詳解5:執(zhí)行SQL語(yǔ)句使用語(yǔ)句對(duì)象來(lái)執(zhí)行SQL語(yǔ)句,有兩種情況:一種是執(zhí)行DELETE、UPDATE和INSERT之類(lèi)的數(shù)據(jù)庫(kù)操作語(yǔ)句(DML),這樣的語(yǔ)句沒(méi)有數(shù)據(jù)結(jié)果返回,使用Statement對(duì)象的executeUpdate方法執(zhí)行;如:
sta.executeUpdate("INSERTINTOFriendsVALUES('田七','重慶',456712,'2003-2-25',7500)");步驟詳解5:執(zhí)行SQL語(yǔ)句(續(xù))另一種是執(zhí)行SELECT這樣的數(shù)據(jù)查詢(xún)語(yǔ)句(DQL),這樣的語(yǔ)句將從數(shù)據(jù)庫(kù)中獲得所需的數(shù)據(jù),使用Statement對(duì)象的executeQuery方法執(zhí)行;如:
ResultSetrs= sta.executeQuery("SELECT*FROMFriend");步驟詳解6:關(guān)閉資源當(dāng)對(duì)數(shù)據(jù)庫(kù)的操作結(jié)束后,應(yīng)當(dāng)將所有已經(jīng)被打開(kāi)的資源關(guān)閉,否則將會(huì)造成資源泄漏;Connection對(duì)象、Statement對(duì)象和ResultSet對(duì)象都有執(zhí)行關(guān)閉的close方法;函數(shù)原型都是:voidclose()throwsSQLException如:
rs.close();//關(guān)閉ResultSet對(duì)象 sta.close();//關(guān)閉Statement對(duì)象 con.close();//關(guān)閉Connection對(duì)象有可能拋出SQLException異常,必須捕捉;請(qǐng)注意關(guān)閉的順序,最后打開(kāi)的資源最先關(guān)閉,最先打開(kāi)的資源最后關(guān)閉。數(shù)據(jù)庫(kù)操作示例importjava.sql.*;//導(dǎo)入java.sql包public
classJDBCDemo{
public
static
voidmain(String[]args){StringstrCon="jdbc:odbc:myODBC";//連接字符串StringstrUser="sa";//數(shù)據(jù)庫(kù)用戶(hù)名StringstrPwd="";//口令System.out.println("正在連接數(shù)據(jù)庫(kù)...");
try{//監(jiān)控異常Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加載驅(qū)動(dòng)程序Connectioncon;
//獲得連接對(duì)象con=DriverManager.getConnection(strCon,strUser,strPwd);System.out.println("成功連接到數(shù)據(jù)庫(kù)。");Statementsta=con.createStatement();//創(chuàng)建語(yǔ)句對(duì)象
//執(zhí)行SQL語(yǔ)句StringstrSql="DELETEFROMFriendsWHERE[Name]='鄭六'";
intcount=sta.executeUpdate(strSql);System.out.println("成功刪除"+count+"行數(shù)據(jù)。");sta.close();con.close();//關(guān)閉所有已經(jīng)打開(kāi)的資源}catch(ClassNotFoundExceptioncnfe){cnfe.printStackTrace();}
catch(SQLExceptionsqle){sqle.printStackTrace();}}}操作結(jié)果集使用Statement對(duì)象的executeQuery方法成功執(zhí)行SELECT語(yǔ)句后,將返回一個(gè)包含有結(jié)果數(shù)據(jù)的ResultSet對(duì)象,要從該對(duì)象中獲取數(shù)據(jù),將使用到如下方法:操作結(jié)果集示例try{StringstrCon="jdbc:odbc:MyODBC";System.out.println("正在連接數(shù)據(jù)庫(kù)...");Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon;con=DriverManager.getConnection(strCon,"sa","");System.out.println("成功連接到數(shù)據(jù)庫(kù)。");Statementsta=con.createStatement();ResultSetrs=sta.executeQuery("SELECT*FROMFriends");System.out.println("查詢(xún)到數(shù)據(jù)如下:");
while(rs.next()){//循環(huán)將結(jié)果集游標(biāo)往下移動(dòng),到達(dá)末尾返回false
//根據(jù)字段名稱(chēng)獲得各個(gè)字段的值System.out.print(rs.getString("Name")+"\t");//獲得字符串System.out.print(rs.getString("Address")+"\t");//獲得字符串System.out.print(rs.getInt("Telephone")+"\t");//獲得整數(shù)System.out.print(rs.getDate("HireDate")+"\t");//獲得日期型數(shù)據(jù)System.out.println(rs.getFloat("Salary"));//獲得浮點(diǎn)型數(shù)據(jù)}rs.close();sta.close();con.close();}catch(ClassNotFoundExceptioncnfe){cnfe.printStackTrace();}
catch(SQLExceptionsqle){sqle.printStackTrace();}純Java驅(qū)動(dòng)方式連接數(shù)據(jù)庫(kù)使用JDBC-ODBC橋方式連接數(shù)據(jù)庫(kù),其性能完全取決于數(shù)據(jù)源(ODBC)的性能,并且無(wú)法脫離Microsoft的平臺(tái),這樣將帶來(lái)不便;大部分DBMS產(chǎn)商都為自己的產(chǎn)品開(kāi)發(fā)了純Java的驅(qū)動(dòng)程序,我們只需要加載相應(yīng)的驅(qū)動(dòng),就可以直接連接到數(shù)據(jù)庫(kù),而無(wú)需通過(guò)ODBC橋連接;鑒于DBMS產(chǎn)品太多,這里只針對(duì)當(dāng)今比較流行的SQLServer2005和Oracle9i進(jìn)行介紹。下載驅(qū)動(dòng)程序包要使用純Java驅(qū)動(dòng),首先必須獲得相應(yīng)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序包;將驅(qū)動(dòng)程序包復(fù)制到本地磁盤(pán),在命令提示行下,將完整路徑設(shè)置到classpath環(huán)境變量中。如用開(kāi)發(fā)工具開(kāi)發(fā)程序,還需在開(kāi)發(fā)環(huán)境中設(shè)置路徑純Java驅(qū)動(dòng)連接SQLServer2005使用純Java驅(qū)動(dòng)連接到SQLServer2005數(shù)據(jù)庫(kù),加載驅(qū)動(dòng)程序應(yīng)改成如下語(yǔ)句: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");連接字符串應(yīng)如下格式: "jdbc:sqlserver://服務(wù)器名或IP:1433;databaseName=數(shù)據(jù)庫(kù)名"如:
Connectioncon=DriverManager.getConnection("jdbc:sqlserver://:1433;
databaseName=pubs","sa","");純Java驅(qū)動(dòng)連接Oracle使用純Java驅(qū)動(dòng)連接到Oracle9i數(shù)據(jù)庫(kù),加載驅(qū)動(dòng)程序應(yīng)改成如下語(yǔ)句:
Class.forName("oracle.jdbc.driver.OracleDriver");連接字符串應(yīng)如下格式: "jdbc:oracle:thin:@服務(wù)名或IP:1521:數(shù)據(jù)庫(kù)名"如:
Connectioncon=DriverManager.getConnection("jdbc:oracle:thin:@:1521:NEWER","scott","tiger");總結(jié)JDBC是使用Java程序操作數(shù)據(jù)庫(kù)的技術(shù);使用Class類(lèi)的forName方法可以將驅(qū)動(dòng)程序加載到Java解釋器中;使用DriverManager類(lèi)的getConnection方法獲得Connection對(duì)象,從而建立與數(shù)據(jù)庫(kù)的連接;使用Connection對(duì)象的createStatement方法創(chuàng)建語(yǔ)句對(duì)象,以便執(zhí)行SQL語(yǔ)句;使用Statement對(duì)象的executeQuery或executeUpdate方法執(zhí)行SQL語(yǔ)句,并使用ResultSet對(duì)象來(lái)操作結(jié)果數(shù)據(jù);PreparedStatement接口允許創(chuàng)建預(yù)編譯的SQL語(yǔ)句,并使得在后續(xù)階段可以指定語(yǔ)句的參數(shù)。類(lèi)和對(duì)象(I)第三章Java中的數(shù)據(jù)類(lèi)型分為:原始數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型;在數(shù)據(jù)類(lèi)型轉(zhuǎn)換中,由低類(lèi)型轉(zhuǎn)至高類(lèi)型,將會(huì)自動(dòng)(隱式)類(lèi)型轉(zhuǎn)換,而從高類(lèi)型轉(zhuǎn)至低類(lèi)型,則必須強(qiáng)制(顯式)類(lèi)型轉(zhuǎn)換;Java中的數(shù)組是引用數(shù)據(jù)類(lèi)型,必須由new關(guān)鍵字在堆中分配內(nèi)存;Java虛擬機(jī)的垃圾回收機(jī)制將自動(dòng)釋放不再使用的內(nèi)存;使用命令行參數(shù)接收來(lái)自用戶(hù)的輸入。回顧本章相關(guān)詞匯(藍(lán)色為關(guān)鍵字)本章目標(biāo)了解什么是面向?qū)ο竺嫦驅(qū)ο蟮幕靖拍铑?lèi)對(duì)象封裝繼承多態(tài)如何定義類(lèi),如何創(chuàng)建對(duì)象成員運(yùn)算符訪問(wèn)控制權(quán)限:public和privateSP和OOP對(duì)比什么是面向?qū)ο螅縊bjectOriendtedProgramming對(duì)象以…為導(dǎo)向的程序設(shè)計(jì)面向?qū)ο缶褪鞘褂脤?duì)象進(jìn)行程序設(shè)計(jì),簡(jiǎn)寫(xiě)成OOP。面向?qū)ο蟮木幊趟枷隣OP旨在計(jì)算機(jī)程序中模擬現(xiàn)實(shí)世界中解決問(wèn)題的方式在計(jì)算機(jī)程序中用代碼和特有結(jié)構(gòu)模擬現(xiàn)實(shí)世界中的實(shí)體每個(gè)實(shí)體都專(zhuān)注和實(shí)現(xiàn)于特定的功能和價(jià)值實(shí)體之間的交互構(gòu)成解決問(wèn)題的方式面向?qū)ο蟮娜筇卣鱋OP
封裝
繼承多態(tài)姓名:布蘭尼職銜:收銀員年齡:35體重:60千克操作:收款打印帳單收銀員對(duì)象顧客姓名:朱麗葉年齡:28體重:52千克操作:購(gòu)買(mǎi)商品顧客對(duì)象狀態(tài)行為現(xiàn)實(shí)世界中的實(shí)體是實(shí)際存在的某種物體,用OOP的術(shù)語(yǔ)就稱(chēng)為對(duì)象在Java中我們通過(guò)對(duì)象對(duì)現(xiàn)實(shí)世界中的實(shí)體進(jìn)行一個(gè)模擬和映射對(duì)象是面向?qū)ο缶幊痰暮诵牟糠?,和現(xiàn)實(shí)世界一樣,需要具有明確定義的狀態(tài)和行為對(duì)象對(duì)象的特征——屬性屬性——對(duì)象具有的各種特征每個(gè)對(duì)象的每個(gè)屬性都擁有特定值例如:布蘭尼和朱麗葉的體重不一樣60kg
布蘭尼屬性35歲收銀員布蘭尼
對(duì)象的特征——方法方法——對(duì)象執(zhí)行的操作打單
收銀方法刷卡收銀員布蘭尼對(duì)象同時(shí)具有屬性和方法兩項(xiàng)特性對(duì)象的屬性和方法通常被封裝在一起,共同體現(xiàn)事物的特性,二者相輔相承,不能分割對(duì)象的屬性和方法屬性:
品牌:法拉利型號(hào):F360Spider顏色:黃色價(jià)格:380萬(wàn)元方法:
發(fā)動(dòng)停止加速屬性:
顏色:白色方法:
叫跑吃教室里的對(duì)象顏色:黑色品牌:BENQ投影類(lèi)型:白熾燈開(kāi)關(guān)變亮變暗材制:木質(zhì)支撐物品從對(duì)象抽象出“類(lèi)”
汽車(chē)顧客類(lèi)人們?yōu)榱烁玫卣J(rèn)識(shí)世界,將現(xiàn)實(shí)生活中的事物(對(duì)象)劃分成類(lèi);同一類(lèi)中的事物總是具有一些共性;類(lèi)以共同的特性和行為定義實(shí)體;類(lèi)是具有相同屬性和行為的一組對(duì)象的集合。類(lèi)和對(duì)象的區(qū)別類(lèi)是用來(lái)描述實(shí)體的“模板”或“原型”;對(duì)象是實(shí)際的實(shí)體,每一個(gè)對(duì)象都是類(lèi)的一個(gè)具體實(shí)例;類(lèi)用來(lái)定義對(duì)象所有的屬性和方法,同一類(lèi)的所有對(duì)象都擁有相同的特征和操作;可以將類(lèi)理解成生產(chǎn)產(chǎn)品的模具,而對(duì)象則是根據(jù)此模具生產(chǎn)的一個(gè)個(gè)產(chǎn)品。類(lèi)與結(jié)構(gòu)最簡(jiǎn)單的理解方式:類(lèi)結(jié)構(gòu)體結(jié)構(gòu)體變量對(duì)象CJava區(qū)別在于:結(jié)構(gòu)體一般只有數(shù)據(jù)(屬性)而沒(méi)有函數(shù)(方法)。在Java中定義類(lèi)/*定義學(xué)生類(lèi)*/classStudent{Stringname;//姓名
intage;//年齡
floatweight;//體重
/*吃飯的方法*/
voiddining(){System.out.println("吃飽了...");weight++;}
/*走路的方法*/
voidwalk(){System.out.println("走累了...");weight--;}}成員變量成員函數(shù)在Java中實(shí)現(xiàn)類(lèi)所有Java程序都以類(lèi)class為組織單元關(guān)鍵字class定義自定義的數(shù)據(jù)類(lèi)型class后面接類(lèi)型名,遵從標(biāo)識(shí)符規(guī)則,首字母必須大寫(xiě)且與java文件物理名字相同class單元使用{}定義邊界,{}里面只允許定義屬性和方法,不能執(zhí)行程序流程任何的程序流程都應(yīng)位某個(gè)方法中一般情況下,一個(gè).java文件中只允許定義一個(gè)class,并且必須修飾為公開(kāi)public創(chuàng)建對(duì)象的語(yǔ)法和數(shù)組相似,對(duì)象也是引用數(shù)據(jù)類(lèi)型,只能使用new運(yùn)算符從堆中分配內(nèi)存;創(chuàng)建對(duì)象的一般語(yǔ)法:
類(lèi)名引用名=new類(lèi)名();使用已經(jīng)定義好的類(lèi),創(chuàng)建該類(lèi)對(duì)象的過(guò)程稱(chēng)為“實(shí)例化”。注意:這里要有括號(hào)成員運(yùn)算符.在C語(yǔ)言中,必須要先聲明結(jié)構(gòu)體變量,才可以訪問(wèn)結(jié)構(gòu)體中的成員;同樣的,只有先實(shí)例化類(lèi)的對(duì)象,才可以訪問(wèn)到類(lèi)中的成員(屬性和方法);使用成員運(yùn)算符(.)來(lái)訪問(wèn)成員屬性或成員方法;一般語(yǔ)法是:
對(duì)象名.成員名如:std.age=18;//為成員屬性賦值 std.dining();//調(diào)用成員方法一個(gè)人類(lèi)的對(duì)象姓名:張三體重:50kg……密碼:******屬性走路吃飯……方法可以公開(kāi)無(wú)所謂不可以公開(kāi)訪問(wèn)權(quán)限:public和privateC語(yǔ)言中結(jié)構(gòu)體的成員可以從任何地方進(jìn)行訪問(wèn),這將給數(shù)據(jù)的安全留下極大的隱患;為了避免從類(lèi)外部直接訪問(wèn)類(lèi)成員而造成的數(shù)據(jù)損壞,Java對(duì)類(lèi)成員的訪問(wèn)制定了約束;關(guān)鍵字public和private是訪問(wèn)修飾符,用來(lái)說(shuō)明某個(gè)成員是否可以從類(lèi)外部進(jìn)行訪問(wèn);public修飾的成員可以在任何地方進(jìn)行訪問(wèn),不受任何約束;private修飾的成員只能夠被本類(lèi)中的其它成員訪問(wèn),而不能從類(lèi)的外部進(jìn)行訪問(wèn)。訪問(wèn)權(quán)限無(wú)法從類(lèi)的外部訪問(wèn)私有成員;其它類(lèi)的私有成員對(duì)于當(dāng)前類(lèi)也是隱藏的??梢詮念?lèi)外部訪問(wèn)類(lèi)屬性或方法私有屬性或方法公有不可從類(lèi)外部訪問(wèn)總結(jié)對(duì)象由狀態(tài)(屬性)和行為(方法)組成;類(lèi)是具有相同屬性和方法的對(duì)象的集合;必須先實(shí)例化類(lèi)的對(duì)象,才可以訪問(wèn)到其中的成員;成員運(yùn)算符用于訪問(wèn)對(duì)象的成員;封裝可以隱藏對(duì)象實(shí)現(xiàn)的具體細(xì)節(jié);成員可以定義為公有,也可以定義為私有;
類(lèi)和對(duì)象(II)第四章138對(duì)象由屬性(數(shù)據(jù))和方法(函數(shù))組成;類(lèi)是具有相同屬性和方法的對(duì)象的集合;封裝可以隱藏對(duì)象實(shí)現(xiàn)的細(xì)節(jié)部分;對(duì)象是引用數(shù)據(jù)類(lèi)型,使用new運(yùn)算符創(chuàng)建對(duì)象實(shí)例,使用成員運(yùn)算符訪問(wèn)對(duì)象中的成員;訪問(wèn)修飾符用來(lái)控制訪問(wèn)權(quán)限,可以有效地保證數(shù)據(jù)安全;回顧139本章相關(guān)詞匯(藍(lán)色為關(guān)鍵字)140本章目標(biāo)構(gòu)造方法方法重載構(gòu)造方法重載對(duì)象在內(nèi)存中的存放形式141對(duì)象初始化在上次課中,我們定義Student類(lèi)的一個(gè)引用std,只能逐個(gè)地為數(shù)據(jù)成員賦值,如果想在對(duì)象實(shí)例化的同時(shí)就初始化成員屬性,就使用到了構(gòu)造方法;構(gòu)造方法是特殊的成員方法,它與類(lèi)同名,在對(duì)象實(shí)例化時(shí)由虛擬機(jī)自動(dòng)調(diào)用;請(qǐng)注意:構(gòu)造方法沒(méi)有返回值類(lèi)型,也不能有返回值。142構(gòu)造方法示例/*定義ConstructorDemo類(lèi),對(duì)構(gòu)造方法進(jìn)行測(cè)試*/classConstructorDemo{
/*構(gòu)造方法,方法名與類(lèi)名完全一致無(wú)需指定返回值類(lèi)型,也不能有返回值*/
publicConstructorDemo(){System.out.println("這是構(gòu)造方法");}}/*Test類(lèi),用來(lái)容納main方法一般將包含有main方法的類(lèi)聲明為public*/public
classTest{
/*main方法,程序入口*/
public
static
voidmain(String[]args){
/*實(shí)例化ConstructorDemo類(lèi)的對(duì)象*/ConstructorDemocd=newConstructorDemo();}}143構(gòu)造方法正是由于在實(shí)例化對(duì)象的同時(shí)會(huì)自動(dòng)調(diào)用構(gòu)造方法,所以構(gòu)造方法一般用來(lái)給數(shù)據(jù)成員分配資源或初始化數(shù)據(jù)成員;構(gòu)造方法的一般形式:
訪問(wèn)權(quán)限類(lèi)名(形參列表){方法體}因?yàn)槭怯商摂M機(jī)來(lái)調(diào)用構(gòu)造方法,所以構(gòu)造方法一般應(yīng)定義成public。144為Student類(lèi)添加構(gòu)造方法classStudent{//定義學(xué)生類(lèi)
privateStringname;//姓名,私有
private
intage;//年齡,私有
private
floatweight;//體重,私有
//構(gòu)造方法,根據(jù)傳遞進(jìn)來(lái)的參數(shù),為數(shù)據(jù)成員賦值
publicStudent(Stringn,inta,floatw){
//分別為每個(gè)數(shù)據(jù)成員賦初始值name=n;age=a;weight=w;}
public
voidsetName(Stringn){……}//為姓名賦值的方法,公有,代碼略
public
voidsetAge(inta){……}//為年齡賦值的方法,公有,代碼略
public
voidsetWeight(floatw){……}//為體重賦值的方法,公有,代碼略
public
voiddisplay(){……}//將所有信息打印出來(lái)的方法,公有,代碼略
public
voiddining(){……}//吃飯的方法,公有,代碼略
public
voidwalk(){……}//走路的方法,公有,代碼略}public
classTest{
public
static
voidmain(String[]args){
//利用構(gòu)造方法,為數(shù)據(jù)成員指定初始值Studentstd=newStudent("張三",18,55);std.display();//將信息打印出來(lái)}}145構(gòu)造方法(續(xù))每個(gè)對(duì)象在生成時(shí)都必須執(zhí)行構(gòu)造方法,而且只能執(zhí)行一次;如果構(gòu)造方法調(diào)用失敗,那么對(duì)象也無(wú)法創(chuàng)建;不可以顯式地直接調(diào)用構(gòu)造方法;在沒(méi)有定義構(gòu)造方法的情況下,類(lèi)會(huì)自動(dòng)產(chǎn)生一個(gè)無(wú)參數(shù)的默認(rèn)構(gòu)造方法,這個(gè)默認(rèn)的構(gòu)造方法什么都不做;一旦顯式地定義了構(gòu)造方法,默認(rèn)構(gòu)造方法自動(dòng)消失。146回顧函數(shù)在Java中,函數(shù)無(wú)需C語(yǔ)言中的前向聲明,只要直接定義即可;Java中,函數(shù)被稱(chēng)為方法;定義一個(gè)方法的一般形式:
[訪問(wèn)權(quán)限]返回值類(lèi)型方法名稱(chēng)(形參列表){ 方法主體; }我們更關(guān)注的是方法原型,對(duì)于方法原型的三個(gè)主要組成部分應(yīng)當(dāng)明確區(qū)分:返回值類(lèi)型方法名稱(chēng)形式參數(shù)方法原型147在Java中定義方法/*Java中的方法示例代碼片段*//*定義求平方值的方法*/public
intsquare(intx){
return(x*x);}返回值類(lèi)型方法名稱(chēng)形式參數(shù)148案例/*編寫(xiě)求絕對(duì)值的方法來(lái)求整數(shù)的絕對(duì)值*//*AbsoluteValue類(lèi),其中包含求絕對(duì)值的方法Java中的任何方法都必須在類(lèi)中定義*/public
classAbsoluteValue{
/*求絕對(duì)值的方法*/
public
intabs(intx){
return((x>=0)?x:-x);}
/*main方法,程序入口*/
public
static
voidmain(String[]args){
//必須先實(shí)例化類(lèi)的對(duì)象,才可以調(diào)用到其中的成員方法AbsoluteValueobj=newAbsoluteValue();
inta=-8,b;b=obj.abs(a);//調(diào)用abs方法求a的絕對(duì)值System.out.println(a+"的絕對(duì)值是"+b);}}方法的定義方法的調(diào)用149案例分析在上面的案例中,我們已經(jīng)定義了求整數(shù)絕對(duì)值的方法;但有時(shí)候,我們可能還需要求浮點(diǎn)數(shù)的絕對(duì)值,請(qǐng)問(wèn):可以繼續(xù)使用這個(gè)方法嗎?事實(shí)上是行不通的,這個(gè)方法只能求出整數(shù)的絕對(duì)值,對(duì)于浮點(diǎn)數(shù),還需另外再定義求浮點(diǎn)數(shù)絕對(duì)值的方法。150修改案例public
classAbsoluteValue{
/*求整數(shù)絕對(duì)值的方法*/
public
intabsOfInt(intx){
return((x>=0)?x:-x);}
/*求浮點(diǎn)數(shù)絕對(duì)值的方法*/
public
floatabsOfFloat(floatx){
return((x>=0)?x:-x);}
public
static
voidmain(String[]args){AbsoluteValueobj=newAbsoluteValue();
inta=-8,b;b=obj.absOfInt(a);System.out.println(a+"的絕對(duì)值是"+b);
floatc=-3.14f,d;d=obj.absOfFloat(c);System.out.println(c+"的絕對(duì)值是"+d);}}如果還要求其它類(lèi)型的絕對(duì)值,就需要定義更多的方法,這對(duì)于調(diào)用者來(lái)說(shuō),將會(huì)是非常麻煩的事情。151方法重載用于定義一組方法,這些方法具有相同的名稱(chēng),并執(zhí)行類(lèi)似的操作,但是卻使用不同的參數(shù)列表;編譯器會(huì)根據(jù)調(diào)用時(shí)傳遞的實(shí)際參數(shù)自動(dòng)判斷具體調(diào)用的是哪個(gè)重載方法,如:/*abs方法的重載*/intabs(intx){……}floatabs(floatx){……}doubleabs(doublex){……}longabs(longx){……}152方法重載的三大原則方法名相同參數(shù)不同(可以有三方面的不同)數(shù)量不同類(lèi)型不同順序不同同一作用域溫馨提示:方法重載跟方法的返回值類(lèi)型沒(méi)有任何關(guān)系。也就是說(shuō),只有返回值不同的方法不能構(gòu)成重載。/*錯(cuò)誤的方法重載*/voidfun(intx){……};intfun(intx){……};153方法重載示例public
classAbsoluteValue{
public
intabs(intx){//重載方式1,求整數(shù)的絕對(duì)值
return((x>=0)?x:-x);}
public
floatabs(floatx){//重載方式2,求浮點(diǎn)數(shù)的絕對(duì)值
return((x>=0)?x:-x);}
public
doubleabs(doublex){//重載方式3,求雙精度數(shù)的絕對(duì)值
return((x>=0)?x:-x);}
public
longabs(longx){//重載方式4,求長(zhǎng)整型數(shù)的絕對(duì)值
return((x>=0)?x:-x);}
public
static
voidmain(String[]args){AbsoluteValueobj=newAbsoluteValue();
inta=-8,b;b=obj.abs(a);System.out.println(a+"的絕對(duì)值是"+b);
floatc=-3.14f,d;d=obj.abs(c);System.out.println(c+"的絕對(duì)值是"+d);}}154方法重載的兩種方式之一利用不同數(shù)據(jù)類(lèi)型的參數(shù)重載;對(duì)于帶有相同數(shù)量參數(shù)但參數(shù)類(lèi)型不同的重載方法,編譯器可以區(qū)分它們,如:只要所有參數(shù)式樣都是唯一的,就可以使用多個(gè)重載;很多編程語(yǔ)言已經(jīng)重載了輸出方法,以便您可以用相同的函數(shù)名稱(chēng)輸出任何類(lèi)型的數(shù)據(jù)。intsquare(intx){……}floatsquare(floatx){……}doublesquare(doublex){……}155方法重載的兩種方式之二利用不同數(shù)量的參數(shù)重載,如:將調(diào)用與參數(shù)最匹配的方法,如果沒(méi)有方法得出最佳匹配,那么編譯器將報(bào)錯(cuò);編譯器解決重載的方式與方法定義的順序無(wú)關(guān);重載不考慮方法的返回值類(lèi)型。/*函數(shù)定義*/intfun(intn1){……}intfun(intn1,intn2,intn3){……}/*函數(shù)調(diào)用*/fun(a);fun(x,y,z);156方法重載的作用域規(guī)則只有屬于同一作用域范圍內(nèi)的方法才能構(gòu)成重載。classFirst{……public
voidshow(){……}……}classSecond{……public
voidshow(intx){……}……}不構(gòu)成重載157課堂練習(xí)1在Java中,對(duì)于成員方法
floatadd(floatf1,floatf2){……} 下面選項(xiàng)()是對(duì)該成員方法的重載。intadd(intn1,intn2){……}floatadd(floatf){……}floatadd(floatf2,floatf1){……}voidadd(floatf1,floatf2){……}voidadd(floatf1,floatf2,floatx){……}158課堂練習(xí)2在Java中,下列方法()不能與
intfun(intx){……} 構(gòu)成方法重載。intfun(intx,inty){……}floatfun(intx){……}intfun(floatx){……}intfun(intx,inty,intz){……}159關(guān)于方法重載的重要提示請(qǐng)勿將功能完全不一樣的方法進(jìn)行重載!160重載構(gòu)造方法方法重載的一個(gè)重要應(yīng)用就是重載構(gòu)造方法;可以定義一組構(gòu)造方法,使其構(gòu)成重載關(guān)系,從而方便使用者能夠靈活機(jī)動(dòng)地以各種不同的方式來(lái)實(shí)例化對(duì)象。161重載構(gòu)造方法示例classMyTime{//定義時(shí)間類(lèi)
private
intmHour,mMinute,mSecond;//三個(gè)成員變量,時(shí)、分、秒
publicMyTime(){//構(gòu)造方法重載1mHour=0;mMinute=0;mSecond=0;}
publicMyTime(inthour){//構(gòu)造方法重載2mHour=hour;mMinute=0;mSecond=0;}
publicMyTime(inthour,intminute){//構(gòu)造方法重載3mHour=hour;mMinute=minute;mSecond=0;}
publicMyTime(inthour,intminute,intsecond){//構(gòu)造方法重載4mHour=hour;mMinute=minute;mSecond=second;}
public
voiddisplay(){//顯示時(shí)間信息的方法System.out.println(mHour+":"+mMinute+":"+mSecond);}}162重載構(gòu)造方法示例(續(xù))/*測(cè)試時(shí)間類(lèi)*/public
classTest{
/*main方法,程序入口*/
public
static
voidmain(String[]args){
//分別調(diào)用不同的構(gòu)造方法來(lái)初始化時(shí)間對(duì)象My
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度鋁合金戶(hù)外廣告牌設(shè)計(jì)制作安裝合同3篇
- 二零二五年度環(huán)保技術(shù)轉(zhuǎn)移與轉(zhuǎn)化合同3篇
- 二零二五版人工智能倫理研究合作項(xiàng)目合同書(shū)3篇
- 2025年度智能養(yǎng)老社區(qū)房屋購(gòu)置合同協(xié)議書(shū)3篇
- 二零二五年度貓咪寵物食品研發(fā)與銷(xiāo)售合同4篇
- 2025年度戶(hù)外廣告場(chǎng)地租賃合同8篇
- 2025年度智能穿戴設(shè)備產(chǎn)品區(qū)域代理合作協(xié)議4篇
- 2025年度煤炭采礦權(quán)抵押融資擔(dān)保合同范本3篇
- 2025年度網(wǎng)約車(chē)安全運(yùn)營(yíng)協(xié)議書(shū)范文
- 二零二四年個(gè)人戶(hù)外探險(xiǎn)借款合同書(shū)3篇
- GB/T 6913-2008鍋爐用水和冷卻水分析方法磷酸鹽的測(cè)定
- GB/T 18717.2-2002用于機(jī)械安全的人類(lèi)工效學(xué)設(shè)計(jì)第2部分:人體局部進(jìn)入機(jī)械的開(kāi)口尺寸確定原則
- 教案:第三章 公共管理職能(《公共管理學(xué)》課程)
- 中國(guó)文化概論(第三版)全套課件
- 117-鋼結(jié)構(gòu)工程質(zhì)量常見(jiàn)問(wèn)題與管控措施
- SHS5230三星指紋鎖中文說(shuō)明書(shū)
- 諾和關(guān)懷俱樂(lè)部對(duì)外介紹
- 保定市縣級(jí)地圖PPT可編輯矢量行政區(qū)劃(河北省)
- 新蘇教版科學(xué)六年級(jí)下冊(cè)全冊(cè)教案(含反思)
- 供方注冊(cè)指南-ZTE
- 真心英雄合唱歌詞
評(píng)論
0/150
提交評(píng)論