版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一、Java的歷史、現(xiàn)狀1.Java歷史在上世紀(jì)90年代初,sun公司有一個(gè)叫做Green的項(xiàng)目,目的是為家用消費(fèi)電子產(chǎn)品開發(fā)一個(gè)分布式代碼系統(tǒng),這樣就可以對(duì)家用電器進(jìn)行控制,和它們進(jìn)行信息交流。詹姆斯·高斯林(JamesGosling)等人基于C+開發(fā)一種新的語言O(shè)ak(Java的前身)。Oak是一種用于網(wǎng)絡(luò)的精巧而安全的語言。Sun公司曾依此投標(biāo)一個(gè)交互式電視項(xiàng)目,但結(jié)果是被SGI打敗,Sun打算拋棄Oak。隨著互聯(lián)網(wǎng)的發(fā)展,Sun看到了Oak在計(jì)算機(jī)網(wǎng)絡(luò)上的廣闊應(yīng)用前景,于是改造Oak,在1995年5月以“Java”的名稱正式發(fā)布,從此Java走上繁榮之路。當(dāng)然提到Java歷史
2、,不得不提的一個(gè)故事就是Java的命名。開始“Oak”的命名是以項(xiàng)目小組辦公室外的樹而得名,但是Oak商標(biāo)被其他公司注冊(cè)了,必須另外取一個(gè)名字,傳說有一天,幾位Java成員組的會(huì)員正在討論給這個(gè)新的語言取什么名字,當(dāng)時(shí)他們正在咖啡館喝著Java(爪哇)咖啡,有一個(gè)人靈機(jī)一動(dòng)說就叫Java怎樣,得到了其他人的贊同,于是,Java這個(gè)名字就這樣傳開了。當(dāng)然對(duì)于傳說,了解一下就好了,不必過于認(rèn)真。2.Java作為學(xué)習(xí)Java的人士,對(duì)Java歷史上發(fā)生的大事件有一個(gè)了解是應(yīng)該的。JDK(JavaSoftwareDevelopKit):Java軟件開發(fā)工具包。JDK是Java的核心,包括了Java運(yùn)行
3、環(huán)境,一系列Java開發(fā)工具和Java基礎(chǔ)的類庫。目前主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開發(fā)了自己的JDK,例如IBM公司開發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開發(fā)的JDK等等。3.Java特點(diǎn)簡單地說,Java具有如下特點(diǎn):簡單的、面向?qū)ο蟆⑵脚_(tái)無關(guān)、多線程、分布式、安全、高性能、可靠的、解釋型、自動(dòng)垃圾回收等特點(diǎn)。這里只解釋一下平臺(tái)無關(guān)和分布式,其余的在后面會(huì)逐步接觸到。3.1平臺(tái)無關(guān)所謂平臺(tái)無關(guān)指的是:用Java寫的程序不用修改就可在不同的軟硬件平臺(tái)上運(yùn)行。這樣就能實(shí)現(xiàn)同樣的程序既可以在Windows下運(yùn)行,到了Unix或者Lin
4、ux環(huán)境不用修改就直接可以運(yùn)行了。Java主要靠Java虛擬機(jī)(JVM)實(shí)現(xiàn)平臺(tái)無關(guān)性。平臺(tái)無關(guān)性就是一次編寫,到處運(yùn)行:Write Once, Run Anywhere3.2分布式分布式指的是:軟件由很多個(gè)可以獨(dú)立執(zhí)行的模塊組成,這些模塊被分布在多臺(tái)計(jì)算機(jī)上,可以同時(shí)運(yùn)行,對(duì)外看起來還是一個(gè)整體。也就是說,分布式能夠把多臺(tái)計(jì)算機(jī)集合起來就像一臺(tái)計(jì)算機(jī)一樣,從而提供更好的性能。4.Java標(biāo)準(zhǔn)組織JCPJCP(Java Community Process) 是一個(gè)開放的國際組織,成立于 1995 年,主要職能是發(fā)展和更新 Java 技術(shù)規(guī)范、參考實(shí)現(xiàn)(RI) 、技術(shù)兼容包(TCK) 。Java
5、 技術(shù)和 JCP 兩者的原創(chuàng)者都是 SUN 計(jì)算機(jī)公司。組織成員可以提交 JSR(Java Specification Requests) ,通過討論、認(rèn)可、審核以后,將進(jìn)入到下一版本的規(guī)范里面。也就是說 JCP 是目前 Java 技術(shù)發(fā)展事實(shí)上的控制者和領(lǐng)領(lǐng)導(dǎo)者。二、Java從代碼到運(yùn)行用一個(gè)圖來描述這個(gè)過程會(huì)比較容易理解:1.編寫代碼首先把我們想要計(jì)算機(jī)做的事情,通過 Java 表達(dá)出來,寫成 Java 文件,這個(gè)過程就是編寫代碼的過程。如上圖所示的 Hello.java 文件。2.編譯寫完 Java 代碼后,機(jī)器并不認(rèn)識(shí)我們寫的 Java 代碼,需要進(jìn)行編譯成為字節(jié)碼,編譯后的文件叫做
6、class 文件。如上圖所示的 Hello.class 文件。3.類裝載ClassLoader類裝載的功能是為執(zhí)行程序?qū)ふ液脱b載所需要的類。ClassLoader能夠加強(qiáng)代碼的安全性,主要方式是:把本機(jī)上的類和網(wǎng)絡(luò)資源類相分離, 在調(diào)入類的時(shí)候進(jìn)行檢查,因而可以限制任何“特洛伊木馬”的應(yīng)用。4.字節(jié)碼(byte-code)校驗(yàn)功能是對(duì) class 文件的代碼進(jìn)行校驗(yàn),保證代碼的安全性。Java 軟件代碼在實(shí)際運(yùn)行之前要經(jīng)過幾次測(cè)試。JVM 將代碼輸入一個(gè)字節(jié)碼校驗(yàn)器以測(cè)試代碼段格式并進(jìn)行規(guī)則檢查-檢查偽造指針、 違反對(duì)象訪問權(quán)限或試圖改變對(duì)象類型的非法代碼。注意-所有源于網(wǎng)絡(luò)的類文件都要經(jīng)過字
7、節(jié)碼校驗(yàn)器字節(jié)碼校驗(yàn)器對(duì)程序代碼進(jìn)行四遍校驗(yàn), 這可以保證代碼符合JVM 規(guī)范并且不破壞系統(tǒng)的完整性。如果校驗(yàn)器在完成四遍校驗(yàn)后未返回出錯(cuò)信息,則下列各點(diǎn)可被保證:- 類符合JVM規(guī)范的類文件格式- 無訪問限制異常- 代碼未引起操作數(shù)棧上溢或下溢- 所有操作代碼的參數(shù)類型將總是正確的- 無非法數(shù)據(jù)轉(zhuǎn)換發(fā)生,如將整數(shù)轉(zhuǎn)換為對(duì)象引用- 對(duì)象域訪問是合法的5.解釋(Interpreter)可是機(jī)器也不能認(rèn)識(shí) class 文件,還需要被解釋器進(jìn)行解釋,機(jī)器才能最終理解我們所要表達(dá)的東西。6.運(yùn)行最后由運(yùn)行環(huán)境中的 Runtime 對(duì)代碼進(jìn)行運(yùn)行,真正實(shí)現(xiàn)我們想要機(jī)器完成的工作。7.說明由上面的講述,大
8、家看到,Java通過一個(gè)編譯階段和一個(gè)運(yùn)行階段,來讓機(jī)器最終理解我們想要它完成的工作,并按照我們的要求進(jìn)行運(yùn)行。在這兩個(gè)階段中,需要我們?nèi)ネ瓿傻木褪蔷幾g階段的工作,也就是說:我們需要把我們想要機(jī)器完成的工作用 Java 語言表達(dá)出來,寫成 Java 源文件,然后把源文件進(jìn)行編譯,形成 class 文件, 最后就可以在 Java 運(yùn)行環(huán)境中運(yùn)行了。 運(yùn)行階段的工作由 Java 平臺(tái)自身提供,我們不需要做什么工作。三、Java程序設(shè)計(jì)基礎(chǔ)1.Java編程概況現(xiàn)在你可以復(fù)習(xí)一下Java語言的背景材料,它的基本結(jié)構(gòu)象C/C+,但任何用面向過程語言編寫過程序的人都可以了解Java語言的大部分結(jié)構(gòu).1.1
9、程序結(jié)構(gòu)Java語言的源程序代碼由一個(gè)或多個(gè)編譯單元(compilationunit)組成,每個(gè)編譯單元只能包含下列內(nèi)容(空格和注釋除外):*一個(gè)程序包語句(packagestatement)*入口語句(importstatements)*類的聲明(classdeclarations)*界面聲明(interfacedeclarations)每個(gè)Java的編譯單元可包含多個(gè)類或界面,但是每個(gè)編譯單元最多只能有一個(gè)類或者界面是公共的。Java的源程序代碼被編譯后,便產(chǎn)生了Java字節(jié)代碼。Java的運(yùn)行系統(tǒng)工作起來如同一臺(tái)虛擬機(jī)。在當(dāng)前的Java實(shí)現(xiàn)中,每個(gè)編譯單元就是一個(gè)以.java為后綴的文件
10、。每個(gè)編譯單元有若干個(gè)類,編譯后,每個(gè)類生成一個(gè).class文件。.class文件是Java虛擬機(jī)能夠識(shí)別的代碼。1.2注釋三種類型如下:/注釋一行/*一行或多行注釋*/*文檔注釋*/文檔注釋一般放在一個(gè)變量或函數(shù)定義前,指示在任何自動(dòng)生成文檔系統(tǒng)中調(diào)入。1.3標(biāo)識(shí)符變量,函數(shù),類和對(duì)象的名稱都是標(biāo)識(shí)符,程序員需要標(biāo)識(shí)和使用的東西都需要標(biāo)識(shí)符。在Java語言里,標(biāo)識(shí)符以字符或_,$開頭,后面可以包含數(shù)字,標(biāo)識(shí)符是大小寫有區(qū)別的,沒有長度限制。有效的標(biāo)識(shí)符mynameict_networkHello_sys_path$bill例子:inta_number;char_onechar;float$b
11、ill;1.4數(shù)據(jù)類型Java使用五種基本類型:integer(整數(shù)),floating(浮點(diǎn)數(shù)),point(指針),Boolean(布爾變量),CharacterorString(字符或字符串)。integer整數(shù)下邊給出的數(shù)據(jù)表示都是整數(shù)的例子:4,15,089,0xAD00整數(shù)長度數(shù)據(jù)類型表示8bitsbyte16bitsshort32bitsint64bitslongfloating浮點(diǎn)數(shù)下邊給出的數(shù)據(jù)表示都是浮點(diǎn)數(shù)的例子:6.37,3.7E15,3e8浮點(diǎn)數(shù)長度數(shù)據(jù)類型表示32bitsfloat64bitsdoubleBoolean布爾變量下邊是布爾變量的兩種可能取值:truefa
12、lseCharacter字符下邊給出的都是字符的例子:at(tab)u?(unicode)String字符串下邊給出的都是字符串的例子:"Thisisastringliteral""中國科學(xué)院計(jì)算所"數(shù)組你可以定義任意類型的數(shù)組.chars;這是字符型數(shù)組;intarray;這是整型數(shù)組;你還可以定義數(shù)組的數(shù)組.intblock=newint23;數(shù)組邊界在運(yùn)行時(shí)被檢測(cè),避免堆棧溢出和內(nèi)存崩潰.在Java里,數(shù)組實(shí)際上是一個(gè)對(duì)象,數(shù)組有一個(gè)成員變量:length。你可以用這個(gè)成員函數(shù)來查看任意數(shù)組的長度.inta=newint103a.length/*1
13、0*/a0.length/*3*/創(chuàng)建數(shù)組在Java里創(chuàng)建數(shù)組,你可使用兩種基本方法:創(chuàng)建一個(gè)空數(shù)組:intlist=newint50;或你可以用初始數(shù)值填充數(shù)組.Stringnames="Chenji","Yuan","Chun","Yang"相當(dāng)于下面功能:Stringnames;names=newString4;names0=newString("Chenji");names1=newString("Yuan");names2=newString("Chun&
14、quot;);names3=newString("Yang");在編譯時(shí)你不能象下例那樣創(chuàng)建靜態(tài)數(shù)組。intname50;/將產(chǎn)生一個(gè)編譯錯(cuò)誤你也不能用new操作去填充一個(gè)沒定義大小的數(shù)組。intname;for(inti=0;i1.5表達(dá)式Java語言的表達(dá)式和C語言非常類似。運(yùn)算符運(yùn)算符(operator)優(yōu)先級(jí)從高到底排列如下:.()+-!instanceof*/%+-=!=&&&|?:=op=,整數(shù)運(yùn)算符在整數(shù)運(yùn)算時(shí),如果操作數(shù)是long類型,則運(yùn)算結(jié)果是long類型,否則為int類型,絕不會(huì)是byte,short或char型。這樣,如果變量
15、i被聲明為short或byte,i+1的結(jié)果會(huì)是int。如果結(jié)果超過該類型的取值范圍,則按該類型的最大值取模。單目整數(shù)運(yùn)算符是:運(yùn)算符操作-單目非位補(bǔ)碼+加1-減1+運(yùn)算符用于表示直接加1操作。增量操作也可以用加運(yùn)算符和賦值操作間接完成。+lvalue(表示lvalue+=1,+lvalue也表示lvalue=lvalue+1(只要lvalue沒有副作用)。-運(yùn)算符用于表示減1操作。+和-運(yùn)算符既可以作為前綴運(yùn)算符,也可以做為后綴運(yùn)算符。雙目整數(shù)運(yùn)算符是:運(yùn)算符操作*+加-減*乘/除%取模&位與|位或位異或=,=和!=產(chǎn)生boolean類型的數(shù)據(jù)。布爾運(yùn)算符布爾(boolean)變量或
16、表達(dá)式的組合運(yùn)算可以產(chǎn)生新的boolean值。單目運(yùn)算符!是布爾非。雙目運(yùn)算符&,|和是邏輯AND,OR和XOR運(yùn)算符,它們強(qiáng)制兩個(gè)操作數(shù)求布爾值。為避免右側(cè)操作數(shù)冗余求值,用戶可以使用短路求值運(yùn)算符&&和|。用戶可以使用=和!=,賦值運(yùn)算符也可以用&=、|=、=。三元條件操作符?:和C語言中的一樣。浮點(diǎn)運(yùn)算符浮點(diǎn)運(yùn)算符可以使用常規(guī)運(yùn)算符的組合:如單目運(yùn)算符+、-,雙目運(yùn)算符+、-、*和/,以及賦值運(yùn)算符+=,-=,*=,和/=。此外,還有取模運(yùn)算:%和%=也可以作用于浮點(diǎn)數(shù),例如:a%b和a-(int)(a/b)*b)的語義相同。這表示a%b的結(jié)果是除完后剩下
17、的浮點(diǎn)數(shù)部分。只有單精度操作數(shù)的浮點(diǎn)表達(dá)式按照單精度運(yùn)算求值,產(chǎn)生單精度結(jié)果。如果浮點(diǎn)表達(dá)式中含有一個(gè)或一個(gè)以上的雙精度操作數(shù),則按雙精度運(yùn)算,結(jié)果是雙精度浮點(diǎn)數(shù)。數(shù)組運(yùn)算符數(shù)組運(yùn)算符形式如下:可給出數(shù)組中某個(gè)元素的值。合法的取值范圍是從0到數(shù)組的長度減1。取值范圍的檢查只在運(yùn)行時(shí)刻實(shí)。運(yùn)算符以String對(duì)象實(shí)現(xiàn)。運(yùn)算符"+"完成并操作,如果必要?jiǎng)t自動(dòng)把操作數(shù)轉(zhuǎn)換為String型。如果操作數(shù)是一個(gè)對(duì)象,它可定義一個(gè)方法toString()返回該對(duì)象的String方式,例如floata=1.0print("Thevalueofais"+a+"n
18、");+運(yùn)算符用到例子Strings="a="+a;+=運(yùn)算符也可以用于String。注意,左邊(下例中的s1)僅求值一次。s1+=a;/s1=s1+a/若a非String型,自動(dòng)轉(zhuǎn)換為String型。對(duì)象運(yùn)算符雙目運(yùn)算符instanceof測(cè)試某個(gè)對(duì)象是否是指定類或其子類的實(shí)例。例如:if(myObjectinstanceofMyClass)MyClassanothermyObject=(MyClass)myObject;是判定myObject是否是MyClass的實(shí)例或是其子類的實(shí)例。強(qiáng)制和轉(zhuǎn)換Java語言和解釋器限制使用強(qiáng)制和轉(zhuǎn)換,以防止出錯(cuò)導(dǎo)致系統(tǒng)崩潰。整
19、數(shù)和浮點(diǎn)數(shù)之間可以來回強(qiáng)制轉(zhuǎn)換,但整數(shù)不能強(qiáng)制轉(zhuǎn)換成數(shù)組或?qū)ο蟆?duì)象不能被強(qiáng)制為基本類型。1.6Java流控制下面幾個(gè)控制結(jié)構(gòu)是從C語言借鑒的。分支結(jié)構(gòu)if/else分支結(jié)構(gòu)if(Boolean)statemanets;elsestatements;switch分支結(jié)構(gòu)switch(expr1)caseexpr2:statements;break;caseexpr3:statements;break;default:statements;break;循環(huán)結(jié)構(gòu)for循環(huán)結(jié)構(gòu)for(initexpr1;testexpr2;incrementexpr3)statements;While循環(huán)結(jié)構(gòu)Whi
20、le(Boolean)statements;Do循環(huán)結(jié)構(gòu)dostatements;while(Boolean);一般順序控制breaklabelcontinuelabelreutrnexpr;label:statement;for循環(huán)例子下面是一個(gè)程序例子,畫幾條線,分別用紅,綠,藍(lán)顏色,這段程序可能是Java函數(shù)的一部分:intcount;for(count=1;count2.Java變量和函數(shù)的實(shí)例Java的類包含變量和函數(shù)。數(shù)據(jù)變量可以是一些原始的類型,如int,char等。成員函數(shù)是一些可執(zhí)行的過程。例如,下面程序里:publicclassClassOneinti;publicClas
21、sOne()i=10;publicvoidAdd_i(intj)i=i+j;ClassOne包含一個(gè)變量i和兩個(gè)成員函數(shù),ClassOne(intfirst)和Add_i(intj)。成員函數(shù)成員函數(shù)是一些可被其它類或自己類調(diào)用的處理子程序。一個(gè)特殊的成員函數(shù)叫構(gòu)造函數(shù),這個(gè)函數(shù)名稱一般與本類名程相同。它沒有返回值。構(gòu)造函數(shù)和成員函數(shù)當(dāng)你在Java里定義一個(gè)類時(shí),你可定義一個(gè)或多個(gè)可選的構(gòu)造函數(shù),當(dāng)創(chuàng)建本類的一個(gè)對(duì)象時(shí)用某一個(gè)構(gòu)造函數(shù)來初始化本對(duì)象。用前面的程序例子來說明,當(dāng)ClassOne類創(chuàng)建一個(gè)新實(shí)例時(shí),所有成員函數(shù)和變量被創(chuàng)建(創(chuàng)建實(shí)例)。構(gòu)造函數(shù)被調(diào)用。ClassOnemc:mc=n
22、ewClassOne();關(guān)鍵詞new用來創(chuàng)建一個(gè)類的實(shí)例,一個(gè)類用new初始化前并不占用內(nèi)存,它只是一個(gè)類型定義,當(dāng)mc對(duì)象初始化后,mc對(duì)象里的i變量等于10。你可以通過對(duì)象名來引用變量i。(有時(shí)稱為實(shí)例變量)mc.i+;/mc實(shí)例變量加1因?yàn)閙c有ClassOne類的所有變量和成員函數(shù),我們可以使用同樣的語法來調(diào)用成員函數(shù)Add_i:Add_i(10);現(xiàn)在mc.i變量等于21.結(jié)束函數(shù)Java并不支持析構(gòu)函數(shù)(C+里的定義),因?yàn)閖ava本身提供對(duì)象無用時(shí)自動(dòng)清除的功能,同時(shí)它也提供了一個(gè)自動(dòng)拉圾箱的成員函數(shù),在清除對(duì)象時(shí)被調(diào)用:Protectedvoidfinalize()close
23、();3.對(duì)象有效范圍和廢物自動(dòng)回收對(duì)象有一定的生命期并在它的生命期間使用資源,當(dāng)一個(gè)對(duì)象不再被使用時(shí),它應(yīng)釋放內(nèi)存,避免內(nèi)存溢出。在Java里,收集和釋放內(nèi)存是一個(gè)叫自動(dòng)廢品回收站的線程的責(zé)任。這個(gè)線程監(jiān)視對(duì)象有效范圍并給一個(gè)走出有效范圍的對(duì)象作上標(biāo)識(shí)。例如:Strings;/沒有分配內(nèi)存s=newString("oldstring");/分配內(nèi)存s="newstring"/重新分配內(nèi)存(創(chuàng)建新對(duì)象)我們將在以后訪問String類時(shí)將更加明白它的工作過程,但它的快速工作過程是這樣的:1.創(chuàng)建一個(gè)新的String類對(duì)象并填充以"oldstrin
24、g"2.創(chuàng)建另一個(gè)String對(duì)象并填充以"newstring"注意我們創(chuàng)建了兩個(gè)對(duì)象。Stirng對(duì)象"oldstring"Stirng對(duì)象"newstring"在第三條語句里,第一個(gè)包括"oldstring"的叫做s的對(duì)象已走出了有效范圍,沒有任何方法可以再訪問他,我們現(xiàn)在有一個(gè)新的對(duì)象也叫s,包含"newstring"。在下一個(gè)廢品回收線程,前一個(gè)對(duì)象將被標(biāo)識(shí)并清除。4.子類子類是利用存在的對(duì)象創(chuàng)建一個(gè)新對(duì)象的機(jī)制,比如,如果你有一個(gè)Horse類,你可以創(chuàng)建一個(gè)Zebra子類,Z
25、ebra是Horse的一種。classZebraextendsHorseintnumber_OF_stripes:關(guān)鍵詞extends來定義對(duì)象有的子類.Zebra是Horse的子類。Horse類里的所有特征都將拷貝到Zebra類里,而Zebra類里可以定義自己的成員函數(shù)和實(shí)例變量。Zebra稱為Horse的派生類或繼承。另外,你也許還想覆蓋基類的成員函數(shù)。用ClassOne說明,下面是一個(gè)派生類覆蓋Add_i功能的例子.importClassOne;publicclassNewClassextendsClassOnepublicvoidAdd_i(intj)i=i+(j/2);當(dāng)NewCla
26、ss類的實(shí)例創(chuàng)建時(shí),變量i初始化值為10,但調(diào)用Add_i產(chǎn)生不同的結(jié)果。NewClassmnc;mnc=newNewClass();mnc.Add_i(10);訪問控制Java里當(dāng)你創(chuàng)建一個(gè)新類時(shí),你可以標(biāo)明變量和成員函數(shù)的訪問層次。publicpublicvoidAnyOneCanAccess()public實(shí)例變量和成員函數(shù)可以任意其它類調(diào)用。protectedprotectedvoidOnlySubClasses()protected實(shí)例變量和成員函數(shù)只能被其子類調(diào)用.privateprivateStringCreditCardNumber;private實(shí)例變量和成員函數(shù)只能在本類里
27、調(diào)用.friendlyvoidMyPackageMethod()缺省的,如果沒有定義任何防火控制,實(shí)例變量或函數(shù)缺省定義成friendly,意味著可以被本包里的任意對(duì)象訪問,但其它包里的對(duì)象不可訪問。所有這個(gè)類的對(duì)象都只有實(shí)例變量的同一個(gè)拷貝,這種方法的關(guān)鍵詞是static,例如:classBlockstaticintnumber=50;所有從Block類創(chuàng)建的對(duì)象的number變量值都是相同的。無任在哪個(gè)對(duì)象里改變了number的值,所有對(duì)象的number都跟著改變。同樣的,你可以定義static成員函數(shù),但這個(gè)成員函數(shù)不能訪問非static函數(shù)和變量。classBlockstaticint
28、number=50;intlocalvalue;staticvoidadd_local()localvalue+;/沒有運(yùn)行staticvoidadd_static()number+;/運(yùn)行5.this和super訪問一個(gè)類的實(shí)例變量時(shí),this關(guān)鍵詞是指向這個(gè)類本身的指針,在前面ClassOne例子中,我們可以增加構(gòu)造函數(shù)如下:publicclassClassOneinti;publicClassOne()i=10;publicClassOne(intvalue)this.i=value;publicvoidAdd_i(intj)i=i+j;這里,this指向ClassOne類的指針。如果在
29、一個(gè)子類里覆蓋了父類的某個(gè)成員函數(shù),但又想調(diào)用父類的成員函數(shù),你可以用super關(guān)鍵詞指向父類的成員函數(shù)。importClassOne;publicclassNewClassextendsClassOnepublicvoidAdd_i(intj)i=i+(j/2);super.Add_i(j);下面程序里,i變量被構(gòu)造函數(shù)設(shè)成10,然后15,最后被父類(ClassOne)設(shè)成25。NewClassmnc;mnc=newNewClass();mnc.Add_i(10);6.類的類型至今為止,我用在類前面只用了一個(gè)public關(guān)鍵詞,其實(shí)它有下面4種選擇:abstract一個(gè)abstract類必須
30、至少有一個(gè)虛擬函數(shù),一個(gè)abstract類不能直接創(chuàng)建對(duì)象,必須繼承子類后才能。final一個(gè)final類聲明了子類鏈的結(jié)尾,用final聲明的類不能再派生子類。publicpublic類能被其它的類訪問。在其它包里,如果想使用這個(gè)類必須先import,則它只能在它定義的package里使用。7.抽象類面向?qū)ο蟮囊粋€(gè)最大優(yōu)點(diǎn)就是能夠定義怎樣使用這個(gè)類而不必真正定義好成員函數(shù)。如果程序由不同的用戶實(shí)現(xiàn)時(shí)是很有用的,這不需用戶使用相同的成員函數(shù)名。在java里Graphics類里一個(gè)abstract類的例子如下:publicabstractclassGraphicspublicabstractvo
31、iddrawLine(intx1,inty1,intx2,inty2);publicabstractvoiddrawOval(intx,inty,intwidth,intheight);publicabstractvoiddrawRect(intx,inty,intwidth,intheight);.在Graphics類里聲明了幾個(gè)成員函數(shù),但成員函數(shù)的實(shí)際代碼是在另外一處地方實(shí)現(xiàn)的。publicclassMyClassextendsGraphicspublicvoiddrawLine(intx1,inty1,intx2,inty2)當(dāng)一個(gè)類包含一個(gè)abstract成員函數(shù),這個(gè)類必須定義為a
32、bstract類。然而并不是abstract類的所有的成員函數(shù)都是abstract的。Abstract類不能有私有成員函數(shù)(它們不能被實(shí)現(xiàn)),也不能有靜態(tài)成員函數(shù)。8.包(Packages)包(Package)由一組類(class)和界面(interface)組成。它是管理大型名字空間,避免名字沖突的工具。每一個(gè)類和界面的名字都包含在某個(gè)包中。按照一般的習(xí)慣,它的名字是由"."號(hào)分隔的單詞構(gòu)成,第一個(gè)單詞通常是開發(fā)這個(gè)包的組織的名稱。定義一個(gè)編譯單元的包編譯單元的包由package語句定義。如果使用package語句,編譯單元的第一行必須無空格,也無注釋。其格式如下:pac
33、kagepackageName;若編譯單元無package語句,則該單元被置于一個(gè)缺省的無名的包中。使用其它包中的類和界面在Java語言里提供;一個(gè)包可以使用另一個(gè)包中類和界面的定義和實(shí)現(xiàn)的機(jī)制。用import關(guān)鍵詞來標(biāo)明來自其它包中的類。一個(gè)編譯單元可以自動(dòng)把指定的類和界面輸入到它自己的包中。在一個(gè)包中的代碼可以有兩種方式來定義來自其它包中的類和界面:*在每個(gè)引用的類和界面前面給出它們所在的包的名字;/前綴包名法ject.FooBarobj=ject.FooBar();*使用import語句,引入一個(gè)類或一個(gè)界面,或包含它們的包。引入的類和界面的名字在當(dāng)
34、前的名字空間可用。引入一個(gè)包時(shí),則該包所有的公有類和界面均可用。其形式如下:/從ject引入所有類ject.*;這個(gè)語句表示ject中所有的公有類被引入當(dāng)前包。以下語句從ject包中進(jìn)入一個(gè)類Employec_List。/從ject而引入Employee_Lject.Employee_list;Employee_Listobj=newEmployee_List();在使用一個(gè)外部類或界面時(shí),必須要聲明該類或界面所在的包,否則會(huì)產(chǎn)生編譯錯(cuò)誤。import(引用)類包(cl
35、asspackage)用import關(guān)鍵詞調(diào)入,指定package名字如路徑和類名,用*匹配符可以調(diào)入多于一個(gè)類名。importjava.Date;importjava.awt.*;如果java源文件不包含package,它放在缺省的無名package。這與源文件同目錄,類可以這樣引入:importMyClass。Java系統(tǒng)包:Java語言提供了一個(gè)包含窗口工具箱,實(shí)用程序,一般I/O,工具和網(wǎng)絡(luò)功能的包。java.applet這個(gè)包包含量了設(shè)計(jì)applet的類,用一個(gè)類Applet和三個(gè)接口.AppletContext;AppletStub;和AudioClip.java.awt另一個(gè)窗口
36、工具箱包.awt,包含了產(chǎn)生裝飾物和GUI成員的類。這個(gè)package包括:Button,Checkbox,Choice,Component,Graphics,Menu,Pane1,TextArea和TextField。java.ioI/Opackage包含文件輸入/輸出類,F(xiàn)ileInputStream和FileOutputStream.java.lang這個(gè)包包含Java語言類,包含:對(duì)象,線程,異常出口,系統(tǒng),整數(shù),原點(diǎn),數(shù)學(xué),字符等。這個(gè)類支持TCP/IP網(wǎng)絡(luò)協(xié)議,并包含Socket類,URL和URL相聯(lián)系的類。java.util這個(gè)類包含程序的同步類,它包含Date,Dictiona
37、ry類等。四、Java程序編寫象其它編程語言一樣,Java 編程語言也被用來創(chuàng)建應(yīng)用程序。一個(gè)共同的應(yīng)用程序范例是在屏幕上顯示字串“Hello World!” 。下列代碼給出了這個(gè) Java 應(yīng)用程序。雖然很多你可能都不明白,沒有關(guān)系,主要是來體會(huì)一下 Java 程序是什么樣子,你可以先看看,有個(gè)印象,然后可以先模仿著做。1.HelloWorldApp1./2./ HelloWorld 應(yīng)用示例3./4.public class HelloWorldApp5. public static void main (String args) 6. System.out.println ("
38、Hello World!");7. 8.以上程序行是在你的屏幕上打印“Hello World!”所需的最少代碼。2.描述HelloWorldApp第 1-3 行程序中的 1-3 行是注釋行1 /2 / HelloWorld 應(yīng)用示例3 /第 4 行第 4 行聲明類名為 HelloWorldApp。類名(Classname)是在源文件中指明的,它可在與源代碼相同的目錄上創(chuàng)建一個(gè) classname · class 文件。在本例題中,編譯器創(chuàng)建了一個(gè)稱為HelloWorldApp.class的文件, 它包含了公共類HelloWorldApp的編譯代碼。4 public clas
39、s HelloWorldApp第 5 行第 5 行是程序執(zhí)行的起始點(diǎn)。Java 解釋器必須發(fā)現(xiàn)這一嚴(yán)格定義的點(diǎn),否則將拒絕運(yùn)行程序。其它程序語言(特別是 C 和 C+)也采用 main ()聲明作為程序執(zhí)行的起始點(diǎn)。此聲明的不同部分將在本課程的后幾部分介紹。如果在程序的命令行中給出了任何自變量(命令行參數(shù)) ,它們將被傳遞給 main()方法中被稱作 args 的 String 數(shù)組。在本例題中,未使用自變量。public static void main (String args) public-方法 main()可被任何程序訪問,包括 Java 解釋器。static- 是一個(gè)告知編譯器 m
40、ain()是用于類 HelloWorldApp 中的方法的關(guān)鍵字。為使 main()在程序做其它事之前就開始運(yùn)行,這一關(guān)鍵字是必要的。void- 表明 main()不返回任何信息。這一點(diǎn)是重要的,因?yàn)?Java 編程語言要進(jìn)行謹(jǐn)慎的類型檢查,包括檢查調(diào)用的方法確實(shí)返回了這些方法所聲明的類型。String args - 是一個(gè) String 數(shù)組的聲明, 它將包含位于類名之后的命令行中的自變量。java HelloWorldApp args0 args1· · · ·第 6 行第 6 行聲明如何使用類名、對(duì)象名和方法調(diào)用。它使用由 System 類的 ou
41、t 成員引用的 PrintStream 對(duì)象的 println()方法,將字串“Hello World!”打印到標(biāo)準(zhǔn)輸出上。6 System.out.println(“Hello World!”);在這個(gè)例子中,println()方法被輸入了一個(gè)字串自變量并將其寫在了標(biāo)準(zhǔn)輸出流上。第 7-8 行本程序的 7-8 行分別是方法 main()和類 HelloWorldApp 的下括號(hào)。7 8 3.編譯并運(yùn)行HelloWorldApp編譯當(dāng)你創(chuàng)建了 HelloWorldApp.java 源文件后,用下列程序行進(jìn)行編譯:javac HelloWorldApp.java如果編譯器未返回任何提示信息, 新
42、文件 HelloWorldApp.class 則被存儲(chǔ)在與源文件相同的目錄中,除非另有指定。如果在編譯中遇到問題,請(qǐng)參閱本模塊的查錯(cuò)提示信息部分。運(yùn)行為運(yùn)行你的 HelloWorldApp 應(yīng)用程序,需使用 Java 解釋器和位于 bin 目錄下的 java程序:java HelloWorldAppHello World!4.編譯查錯(cuò)編譯時(shí)的錯(cuò)誤,以下是編譯時(shí)的常見錯(cuò)誤:javac:Command not foundPATH 變量未正確設(shè)置以包括 javac 編譯器。javac 編譯器位于 JDK 目錄下的 bin 目錄。HelloWorldApp.java:6: Method printl(
43、java.lang.String)not found in class java.io.PrintStream.System.out.printl ("Hello World!");方法名 println 出現(xiàn)打印錯(cuò)誤。In class HelloWorldApp:main must be public or static該錯(cuò)誤的出現(xiàn)是因?yàn)樵~ static 或 public 被放在了包含 main 方法的行之外。運(yùn)行時(shí)的錯(cuò)誤 cant find class HelloWorldApp(這個(gè)錯(cuò)誤是在打印 java HelloWorldApp時(shí)產(chǎn)生的) , 通常, 它表示在命令
44、行中所指定的類名的拼寫與 filename.class 文件的拼寫不同。Java 編程語言是一種大小寫區(qū)別對(duì)待的語言。例如: public class HelloWorldapp 創(chuàng)建了一個(gè) HellloWorldapp.class ,它不是編譯器所預(yù)期的類名(HelloWorldApp.class)。4.1.命名如果 java 文件包括一個(gè)公共類,那么它必須使用與那個(gè)公共類相同的文件名。例如在前例中的類的定義是public class HelloWorldapp源文件名則必須是 HelloWorldapp.java4.2.類計(jì)數(shù)在源文件中每次只能定義一個(gè)公共類。4.3.源文件布局一個(gè) Jav
45、a 源文件可包含三個(gè)“頂級(jí)”要素:(1)一個(gè)包(package)聲明(可選)(2)任意數(shù)量的導(dǎo)入(import)語句(3)類(class)聲明該三要素必須以上述順序出現(xiàn)。即,任何導(dǎo)入語句出現(xiàn)在所有類定義之前;如果使用包聲明,則包聲明必須出現(xiàn)在類和導(dǎo)入語句之前。五、關(guān)鍵字1.什么是關(guān)鍵字Java 語言保留的,Java 的開發(fā)和運(yùn)行平臺(tái)認(rèn)識(shí),并能正確處理的一些單詞。其實(shí)就是個(gè)約定,就好比我們約定好,我畫個(gè)勾勾表示去吃飯。那好了,只要我畫個(gè)勾勾,大家就知道是什么意思,并能夠正確執(zhí)行了。關(guān)鍵字這個(gè)約定在 Java 語言和 Java 的開發(fā)和運(yùn)行平臺(tái)之間,我們只要按照這個(gè)約定使用了某個(gè)關(guān)鍵字,Java
46、的開發(fā)和運(yùn)行平臺(tái)就能夠認(rèn)識(shí)它,并正確地處理。2.Java中有哪些關(guān)鍵字abstract do implements private throwboolean double import protected throwsbreak else instanceof public transientbyte extends int return truecase false interface short trycatch final long static voidchar finally native super volatileclass float new switch whileconti
47、nue for null synchronized enumdefault if package this assert3.Java中關(guān)鍵字的基本含義 abstract:表明類或類中的方法是抽象的; boolean:基本數(shù)據(jù)類型之一,布爾類型; break:提前跳出一個(gè)塊; byte:基本數(shù)據(jù)類型之一,字節(jié)類型; case:在 switch 語句中,表明其中的一個(gè)分支; catch:用于處理例外情況,用來捕捉異常; char:基本數(shù)據(jù)類型之一,字符類型; class:類; continue:回到一個(gè)塊的開始處; default:用在 switch 語句中,表明一個(gè)默認(rèn)的分支; do:用在&qu
48、ot;do while"循環(huán)結(jié)構(gòu)中; double:基本數(shù)據(jù)類型之一,雙精度浮點(diǎn)數(shù)類型; else:在條件語句中,表明當(dāng)條件不成立時(shí)的分支; extends:用來表明一個(gè)類是另一個(gè)類的子類; final:用來表明一個(gè)類不能派生出子類,或類中的方法不能被覆蓋,或聲明一個(gè)變量是常量; finally:用于處理異常情況,用來聲明一個(gè)肯定會(huì)被執(zhí)行到的塊; float:基本數(shù)據(jù)類型之一,單精度浮點(diǎn)數(shù)類型; for:一種循環(huán)結(jié)構(gòu)的引導(dǎo)詞; if:條件語句的引導(dǎo)詞; implements:表明一個(gè)類實(shí)現(xiàn)了給定的接口; import:表明要訪問指定的類或包; instanceof:用來測(cè)試一個(gè)對(duì)象是
49、否是一個(gè)指定類的實(shí)例; int:基本數(shù)據(jù)類型之一,整數(shù)類型; interface:接口; long:基本數(shù)據(jù)類型之一,長整數(shù)類型; native:用來聲明一個(gè)方法是由與機(jī)器相關(guān)的語言(如 C/C+/FORTRAN 語言)實(shí)現(xiàn)的; new:用來申請(qǐng)新對(duì)象; package:包; private:一種訪問方式:私有模式; protected:一種訪問方式:保護(hù)模式; public:一種訪問方式:公共模式; return:從方法中返回值; short:基本數(shù)據(jù)類型之一,短整數(shù)類型; static:表明域或方法是靜態(tài)的,即該域或方法是屬于類的; strictfp:用來聲明 FP-strict(雙精度或
50、單精度浮點(diǎn)數(shù))表達(dá)式,參見 IEEE 754 算術(shù)規(guī)范; super:當(dāng)前對(duì)象的父類對(duì)象的引用; switch:分支結(jié)構(gòu)的引導(dǎo)詞; synchronized:表明一段代碼的執(zhí)行需要同步; this:當(dāng)前對(duì)象的引用; throw:拋出一個(gè)異常; throws:聲明方法中拋出的所有異常; transient:聲明不用序列化的域; try:嘗試一個(gè)可能拋出異常的程序塊 void:表明方法不返回值; volatile:表明兩個(gè)或多個(gè)變量必須同步地發(fā)生變化; while:用在循環(huán)結(jié)構(gòu)中; assert:聲明斷言; enum:聲明枚舉類型;4.解釋幾點(diǎn)(1):這些關(guān)鍵字的具體含義和使用方法,會(huì)在后面用到的
51、地方講述(2):Java 的關(guān)鍵字也是隨新的版本發(fā)布在不斷變動(dòng)中的,不是一成不變的(3):所有關(guān)鍵字都是小寫的(4):goto 和 const 不是 Java 編程語言中使用的關(guān)鍵字,但是是 Java 的保留字,也就是說 Java 保留了它們,但是沒有使用它們。true 和 false 不是關(guān)鍵字,而是 boolean 類型直接量(5):表示類的關(guān)鍵字是 class六、數(shù)據(jù)類型1.什么叫數(shù)據(jù)類型數(shù)據(jù)類型簡單的說就是對(duì)數(shù)據(jù)的分類, 對(duì)數(shù)據(jù)各自的特點(diǎn)進(jìn)行類別的劃分, 劃分的每種數(shù)據(jù)類型都具有區(qū)別于其它類型的特征, 每一類數(shù)據(jù)都有相應(yīng)的特點(diǎn)和操作功能。 例如數(shù)字類型的就能夠進(jìn)行加減乘除的操作。在現(xiàn)實(shí)
52、生活中, 我們通常會(huì)對(duì)信息進(jìn)行分類, 從而使得我們能很容易的判斷某個(gè)數(shù)據(jù)是表示一個(gè)百分?jǐn)?shù)還是一個(gè)日期,我們通常是通過判斷數(shù)字是否帶”%”,或者是否是一個(gè)我們熟悉的”日期格式”。類似的在程序中, 計(jì)算機(jī)也需要某種方式來判斷某個(gè)數(shù)字是什么類型的。 這通常是需要程序員顯示來聲明某個(gè)數(shù)據(jù)是什么類型的,Java 就是這樣的。Java 是一種強(qiáng)類型的語言,凡是使用到的變量,在編譯之前一定要被顯示的聲明。2.Java數(shù)據(jù)類型的分類Java 里面的數(shù)據(jù)類型從大的方面分為兩類,一是基本數(shù)據(jù)類型,一是引用類型,基本 的 Java 數(shù)據(jù)類型層次圖如下:3.Java中的基本數(shù)據(jù)類型Java 中的基本數(shù)據(jù)類型分為八個(gè)原
53、始數(shù)據(jù)類型,原始類型可分為四種:(1)整數(shù)型:byte、short、int、long(2)浮點(diǎn)型:float、double(3)字符型:char(4)邏輯型:boolean3.1.整數(shù)型:byte、short、int、longbyte:字節(jié)型short:短整型int: 整型long:長整型在 Java 中,整數(shù)型的值都是帶符號(hào)的數(shù)字,可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制來表示。所謂多少進(jìn)制, 就是滿多少就進(jìn)位的意思, 如十進(jìn)制表示逢十進(jìn)位, 八進(jìn)制就表示逢八進(jìn)位。示例:15:十進(jìn)制的 15015:八進(jìn)制的 15 ,相當(dāng)于十進(jìn)制的 13,計(jì)算公式:1*8 +5 = 130x15:十六進(jìn)制的 15,相當(dāng)
54、于十進(jìn)制的 21,計(jì)算公式:1*16+5=213.1.1.在Java中的定義示例示例 1.byte abc = 5;表示在 Java 中定義一個(gè)變量 abc,類型是 byte 類型,值是 5同理可以定義其它的類型:比如:short abc1 = 5;int abc2 = 5;long abc3 = 5;這些都是可以的,如果要明確表示是long型的值,可以在后面直接跟一個(gè)字母“L”。L表示一個(gè)long值。也就是寫成:long abc4 = 5L;請(qǐng)注意,在 Java 編程語言中使用大寫或小寫 L 同樣都是有效的,但由于小寫 l 與數(shù)字 1 容易混淆,因而,盡量不要使用小寫。注意:整數(shù)型的值,如果
55、沒有特別指明,默認(rèn)是是int型3.1.2取值范圍和默認(rèn)值取值范圍的表示是按 Java 編程語言規(guī)范定義的且不依賴于平臺(tái)3.2.浮點(diǎn)型:float、doubleJava 用浮點(diǎn)型來表示實(shí)數(shù),簡單地說就是帶小數(shù)的數(shù)據(jù)。用 float 或 double 來定義浮點(diǎn)類型,如果一個(gè)數(shù)字包括小數(shù)點(diǎn)或指數(shù)部分,或者在數(shù)字后帶有字母 F 或 f(float) 、D 或 d(double) ,則該數(shù)字文字為浮點(diǎn)型的。示例:12.3 /簡單的浮點(diǎn)型數(shù)據(jù)12.3E10 /數(shù)據(jù)很大的一個(gè)浮點(diǎn)數(shù)據(jù)3.2.1.在在Java中的定義示例如下定義都是可以的:float abc = 5.6F;float abc = 5.6f;
56、double abc = 5.6;double abc = 5.6D;double abc = 5.6d;3.2.2.提示(1)浮點(diǎn)型的值,如果沒有特別指明,默認(rèn)是是double型的(2)定義float型的時(shí)候,一定要指明是float型的,可以通過在數(shù)字后面添加”F”或者”f”來表示。(3)定義double型的時(shí)候,可以不用指明,默認(rèn)就是double型的,也可以通過在數(shù)字后面添加”D”或者”d”來表示。3.2.3 取值范圍 和 默認(rèn)值Java 技術(shù)規(guī)范的浮點(diǎn)數(shù)的格式是由電力電子工程師學(xué)會(huì)(IEEE)754 定義的,是獨(dú)立于平臺(tái)的。 可以通過 Float.MAX_VALUE 和 Float.MI
57、N_VALUE 取得 Float 的最大最小值; 可以通過 Double.MAX_VALUE 和 Double.MIN_VALUE 來取得 Double 的最大最小值。3.3.字符型:charchar類型用來表示單個(gè)字符。一個(gè)char代表一個(gè)16-bit無符號(hào)的(不分正負(fù)的)Unicode字符,一個(gè)char字符必須包含在單引號(hào)內(nèi)。示例:a/表示簡單的字符1/用數(shù)字也可以表示字符下面就錯(cuò)了,只能使用單個(gè)字符ab/錯(cuò)誤12/錯(cuò)誤3.3.1.什么是Unicode編碼Unicode 編碼又叫統(tǒng)一碼、萬國碼或單一碼,是一種在計(jì)算機(jī)上使用的字符編碼。它為每種語言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼, 以滿足跨語言、 跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、 處理的要求。 1990 年開始研發(fā), 1994 年正式公布。 隨著計(jì)算機(jī)工作能力的增強(qiáng), Unicode也在面世以來的十多年里得到普及。unicode 的表達(dá)如下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)大學(xué)應(yīng)用概率與統(tǒng)計(jì)課件
- 機(jī)械制圖模擬題+答案
- 介紹河南的英文課件演講
- 養(yǎng)老院老人生活照顧標(biāo)準(zhǔn)制度
- 養(yǎng)老院老人健康監(jiān)測(cè)人員福利待遇制度
- 托管中心個(gè)體工商戶勞務(wù)合同范本(2篇)
- 拆除施工承包協(xié)議書(2篇)
- 《藥膳常用的中藥》課件
- 對(duì)數(shù)的運(yùn)算性質(zhì)及其應(yīng)用課件
- 2024年會(huì)議室場地出租協(xié)議3篇
- 血管活性藥物靜脈輸注護(hù)理團(tuán)體解讀
- 電力增容工程投標(biāo)方案(技術(shù)標(biāo))
- 國內(nèi)外建筑節(jié)能現(xiàn)狀及發(fā)展
- 一級(jí)綜合醫(yī)院設(shè)置要求規(guī)范
- 《消費(fèi)心理學(xué)》課程標(biāo)準(zhǔn)
- DB5117-T 76-2023 磷石膏基植生材料生態(tài)修復(fù)應(yīng)用技術(shù)規(guī)范
- 國開電大本科《人文英語4》機(jī)考真題(第十九套)
- 新產(chǎn)品試產(chǎn)管理流程
- 煤礦全員安全教育培訓(xùn)考試試卷+答案
- 麗江地區(qū)古城區(qū)2023-2024學(xué)年數(shù)學(xué)四年級(jí)第一學(xué)期期末統(tǒng)考模擬試題含答案
- 新中國史2023年春季學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
評(píng)論
0/150
提交評(píng)論