《Java就業(yè)培訓(xùn)教程》.ppt_第1頁(yè)
《Java就業(yè)培訓(xùn)教程》.ppt_第2頁(yè)
《Java就業(yè)培訓(xùn)教程》.ppt_第3頁(yè)
《Java就業(yè)培訓(xùn)教程》.ppt_第4頁(yè)
《Java就業(yè)培訓(xùn)教程》.ppt_第5頁(yè)
已閱讀5頁(yè),還剩108頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、張孝祥IT課堂Java就業(yè)培訓(xùn)教程,主講老師:,第一講,Java的特點(diǎn) Java程序開(kāi)發(fā)的基本過(guò)程 學(xué)習(xí)Java的前提知識(shí),“一次編譯,到處運(yùn)行”的原理,“一次編譯,到處運(yùn)行”的原理,JVM虛擬機(jī)類(lèi)似Windows操作系統(tǒng) Java虛擬機(jī)可以是硬件 ,也可以是軟件 Java跨平臺(tái)的原因 Java兼顧解釋性與編譯性語(yǔ)言的特點(diǎn),Java具有三個(gè)方面的內(nèi)涵,是一種編程語(yǔ)言 是一套開(kāi)發(fā)工具 是一個(gè)運(yùn)行環(huán)境,學(xué)Java編程首先要掌握開(kāi)發(fā)工具和運(yùn)行環(huán)境的搭建與使用。詳細(xì)介紹開(kāi)發(fā)工具和運(yùn)行環(huán)境,才能讓初學(xué)者在學(xué)習(xí)時(shí)迅速上手。,Java的開(kāi)發(fā)環(huán)境的搭建(1),什么是JDK(Java Development K

2、it) 開(kāi)發(fā)工具,Javac及基礎(chǔ)核心類(lèi) 運(yùn)行環(huán)境, java及基礎(chǔ)核心類(lèi) 按Java的應(yīng)用環(huán)境劃分 J2EE(Java2PlatformEnterpriseEdition) J2SE(Java2PlatformStandEdition) J2ME(Java2PlatformMicroEdition) 下載網(wǎng)址 ,Java的開(kāi)發(fā)環(huán)境的搭建(2),JDK的安裝及目錄結(jié)構(gòu) 使用Javac與java中碰到的路徑問(wèn)題 直接運(yùn)行Java進(jìn)行檢查 運(yùn)行Java verbose進(jìn)行檢查,環(huán)境變量的介紹,什么是環(huán)境變量 查看環(huán)境變量的兩種方式 如何設(shè)置系統(tǒng)環(huán)境變量 path環(huán)境變量的作用 %path% 的意義

3、 如何解決使用java命令中的問(wèn)題,體驗(yàn)Java編程的過(guò)程,編輯工具的簡(jiǎn)要介紹 Test.java源文件的解釋 用Javac編譯源文件(可能碰到的問(wèn)題) 用Java 運(yùn)行編譯后的字節(jié)碼文件,Classpath的設(shè)置,實(shí)際操作講解classpath的作用 Java解釋器是如何處理當(dāng)前目錄的 如何解決當(dāng)前目錄的問(wèn)題 配置classpath的幾個(gè)注意事項(xiàng),JVM(虛擬機(jī))的運(yùn)行過(guò)程,代碼的裝入 代碼的校驗(yàn) 代碼的執(zhí)行,JVM(虛擬機(jī))的運(yùn)行過(guò)程,反編譯工具,JAD FrontEnd,張孝祥IT課堂Java就業(yè)培訓(xùn)教程,主講老師:,第二講,java 編程基礎(chǔ),Java的基本語(yǔ)法(1),java代碼的位

4、置 java是嚴(yán)格區(qū)分大小寫(xiě)的 java是一種自由格式的語(yǔ)言 代碼分為結(jié)構(gòu)定義語(yǔ)句和功能執(zhí)行語(yǔ)句 功能執(zhí)行語(yǔ)句的最后必須用分號(hào)結(jié)束 java程序有三種注釋方式,java中的標(biāo)識(shí)符 java中的包、類(lèi)、方法、參數(shù)和變量的名字,可由任意順序的大小寫(xiě)字母、數(shù)字、下劃線(_)和美元符號(hào)($)組成,但標(biāo)識(shí)符不能以數(shù)字開(kāi)頭,不能是關(guān)鍵字。,合法的標(biāo)識(shí)符: indentifier username user_name _userName $username,非法的標(biāo)識(shí)符: class 98.3 Hello World,Java的基本語(yǔ)法(2),java的關(guān)鍵字,注:java 無(wú)sizeof ,goto, c

5、onst 關(guān)鍵字,但不能用goto const作為變量名,java中的常量(1),整型常量 十進(jìn)制(12) ,十六進(jìn)制 (0 x12),八進(jìn)制(012) 長(zhǎng)整型常量 13L 單精度浮點(diǎn)數(shù) 5.1f,.4f ,2e3f ,0f 雙精度浮點(diǎn)數(shù) 5.1,.4,2e-3,0d 布爾常量 true和false,java中的常量(2),字符常量 a , 8, u0027 r表示接受鍵盤(pán)輸入,相當(dāng)于按下了回車(chē)鍵; n是換行; t是制表符,相當(dāng)于table鍵; b是退格鍵,相當(dāng)于Back Space; 是單引號(hào),而“是雙引號(hào); 是一個(gè)斜杠“”。 字符串常量 “Hello World“,”123”, Welco

6、me nXXX null常量 null常量只有一個(gè)值,用null表示,表示對(duì)象的引用為空,變量的概念與作用,變量就是系統(tǒng)為程序分配的一塊內(nèi)存單元,用來(lái)存儲(chǔ)各種類(lèi)型的數(shù)據(jù)。根據(jù)所存儲(chǔ)的數(shù)據(jù)類(lèi)型的不同,有各種不同類(lèi)型的變量。變量名代表這塊內(nèi)存中的數(shù)據(jù) 。 int x=0,y; y=x+3; 執(zhí)行這兩條語(yǔ)句的過(guò)程中,內(nèi)存分配及變化情況。X在被取值前必須被初始化。,java的變量類(lèi)型,數(shù)據(jù)類(lèi)型,基本數(shù)據(jù)類(lèi)型,引用數(shù)據(jù)類(lèi)型,數(shù)值型,字符型(char),布爾型(boolean),整數(shù)類(lèi)型(byte, short, int, long),浮點(diǎn)類(lèi)型(float, double),類(lèi)(class),接口(int

7、erface),數(shù)組,變量字節(jié)大小及有效取值范圍,byte占用一個(gè)字節(jié),數(shù)字大小為-2727-1 short占用兩個(gè)字節(jié),數(shù)字大小為-215215-1 int占用四個(gè)字節(jié),數(shù)字大小為-231231-1 long占用八個(gè)字節(jié),數(shù)字大小為-263263-1 float占用四個(gè)字節(jié),數(shù)字大小為1.4E-453.4E+38 , -1.4E-45-3.4E+38 。用二進(jìn)制的指數(shù)形式表示一個(gè)浮點(diǎn)數(shù)的格式,如:101*22 , 101*2-3 double占用八個(gè)字節(jié),數(shù)字大小為4.9E-3241.7E+308, -4.9E-324-1.7E+308 。 char占兩個(gè)字節(jié),數(shù)字大小為0216-1,是un

8、icode編碼。字符的本來(lái)面目,我們?yōu)槭裁纯梢灾苯訉⒁粋€(gè)數(shù)字賦給字符變量。 Boolean占一個(gè)字節(jié),其取值只有兩個(gè),true和false。,浮點(diǎn)數(shù)在內(nèi)存中的表示方式,在JDK文檔中查找Float. intBitsToFloat的說(shuō)明 打印出最大數(shù)和最小數(shù)及它們的二進(jìn)制格式 打印出無(wú)窮大與NaN及它們的二進(jìn)制格式 分析0 x50000000所對(duì)應(yīng)的浮點(diǎn)數(shù),類(lèi)型轉(zhuǎn)化,自動(dòng)類(lèi)型轉(zhuǎn)換(也叫隱式類(lèi)型轉(zhuǎn)換) 強(qiáng)制類(lèi)型轉(zhuǎn)換(也叫顯式類(lèi)型轉(zhuǎn)換) 類(lèi)型轉(zhuǎn)換的原理 及什么時(shí)候要用 強(qiáng)制類(lèi)型轉(zhuǎn)換 表達(dá)式的數(shù)據(jù)類(lèi)型自動(dòng)提升 所有的byte型、short型和char的值將被提升到int型。 如果一個(gè)操作數(shù)是long型

9、,計(jì)算結(jié)果就是long型; 如果一個(gè)操作數(shù)是float型,計(jì)算結(jié)果就是float型; 如果一個(gè)操作數(shù)是double型,計(jì)算結(jié)果就是double型。 分析 System.out.println(a+1)與 System.out.println(“”+a+1) 的區(qū)別。,變量的生命周期與作用域,變量要先定義,后使用,但也不是在變量定義后的語(yǔ)句一直都能使用前面定義的變量。我們可以用大括號(hào)將多個(gè)語(yǔ)句包起來(lái)形成一個(gè)復(fù)合語(yǔ)句,變量只能在定義它的復(fù)合語(yǔ)句中使用。 public class TestScope public static void main(String args) int x = 12; i

10、nt q = 96; / x和q都可用 int x = 3;/錯(cuò)誤的定義,Java中不允許有這種嵌套定義 System.out.println(x is +x); System.out.println(q is +q); q = x; /* 錯(cuò)誤的行,只有x可用, q 超出了作用域范圍 */ System.out.println(x is +x); ,函數(shù),函數(shù)(子程序)的概念與作用。 定義一個(gè)函數(shù)的格式 編寫(xiě)打印三個(gè)矩形的程序(用流水帳的方式與用函數(shù)的方式進(jìn)行對(duì)比分析)。 返回值類(lèi)型 函數(shù)名(參數(shù)類(lèi)型 形式參數(shù)1,參數(shù)類(lèi)型 形式參數(shù)2,.) 程序代碼 return 返回值; 其中: 形式參數(shù)

11、:在方法被調(diào)用時(shí)用于接收外部傳入的數(shù)據(jù)的變量。 參數(shù)類(lèi)型:就是該形式參數(shù)的數(shù)據(jù)類(lèi)型。 返回值:方法在執(zhí)行完畢后返還給調(diào)用它的程序的數(shù)據(jù)。 返回值類(lèi)型:函數(shù)要返回的結(jié)果的數(shù)據(jù)類(lèi)型。 實(shí)參:調(diào)用函數(shù)時(shí)實(shí)際傳給函數(shù)形式參數(shù)的數(shù)據(jù)。 如何理解函數(shù)返回值類(lèi)型為void的情況,函數(shù)的調(diào)用,函數(shù)調(diào)用的格式 在函數(shù)中使用return提前返回 函數(shù)調(diào)用的過(guò)程分析,函數(shù)的重載,函數(shù)的重載就是在同一個(gè)類(lèi)中允許同時(shí)存在一個(gè)以上的同名函數(shù),只要它們的參數(shù)個(gè)數(shù)或類(lèi)型不同即可。 如: public class Test public static void main(String args) int isum; doubl

12、e fsum; isum=add(3,5); isum=add(3,5,6); fsum=add(3.2,6.5); public static int add(int x,int y) reutrn x+y; public static int add(int x,int y,int z) return x+y+z; public static double add(double x,double y) return x+y; ,java中的運(yùn)算符,運(yùn)算符是一種特殊符號(hào),用以表示數(shù)據(jù)的運(yùn)算、賦值和比較,一般由一至三個(gè)字符組成 。運(yùn)算符共分以下幾種: 算術(shù)運(yùn)算符 賦值運(yùn)算符 比較運(yùn)算符 邏輯運(yùn)

13、算符 移位運(yùn)算符,算術(shù)運(yùn)算符,算術(shù)運(yùn)算符的注意問(wèn)題,“+”除字符串相加功能外,還能把非字符串轉(zhuǎn)換成字符串 ,如: “x”+123;的結(jié)果是“x123” 。 如果對(duì)負(fù)數(shù)取模,可以把模數(shù)負(fù)號(hào)忽略不記,如:5%-2=1。但被模數(shù)是負(fù)數(shù)就另當(dāng)別論了。 對(duì)于除號(hào)“/”,它的整數(shù)除和小數(shù)除是有區(qū)別的:整數(shù)之間做除法時(shí),只保留整數(shù)部分而舍棄小數(shù)部分。 int x=3510;x=x/1000*1000;實(shí)際運(yùn)行結(jié)果是3000 ,想想為什么?,算術(shù)運(yùn)算符的應(yīng)用技巧,思考題1:某個(gè)培訓(xùn)中心要為新到的學(xué)員安排房間,假設(shè)共有x個(gè)學(xué)員,每個(gè)房間可以住6人,讓你用一個(gè)公式來(lái)計(jì)算他們要住的房間數(shù)? 答案:(x+5)/6。這

14、種算法還可用在查看留言板的分頁(yè)顯示上: 其中x是總共的留言數(shù),6是每頁(yè)顯示的留言數(shù),結(jié)果就是總共有多少頁(yè)。 思考題2:假設(shè)你要讓x的值在0至9之間循環(huán)變化,請(qǐng)寫(xiě)出相應(yīng)的程序代碼。 答案: int x=0; while(true) x = (x+1)%10; ,賦值運(yùn)算符,注1:在JAVA里可以把賦值語(yǔ)句連在一起,如: x = y = z = 5 ; 在這個(gè)語(yǔ)句中,所有三個(gè)變量都得到同樣的值5。 注2 :x += 3等效于x = x + 3,等于*= ,-=,/=依此類(lèi)推。,比較運(yùn)算符,注1:比較運(yùn)算符的結(jié)果都是boolean型,也就是要么是true,要么是false。 注2:比較運(yùn)算符“=”不

15、能誤寫(xiě)成“=” ,切記!切記!,邏輯運(yùn)算符,注1:邏輯運(yùn)算符用于對(duì)boolean型結(jié)果的表達(dá)式進(jìn)行運(yùn)算,運(yùn)算的結(jié)果都是boolean型 。 注2:“ int y=3; if(x!=0 上面例子中,由于while語(yǔ)句的判斷條件中的第一個(gè)布爾表達(dá)式是不成立的,程序就不會(huì)判斷第二個(gè)布爾表達(dá)式的值,這就是“短路”。如果兩個(gè)表達(dá)式之間用“ int y=0 x80000000; x=x1; y=y1; System.out.println(“0 x800000001 = ” + Integer.toHexString(x); System.out.println(“0 x800000001 = ” + I

16、nteger.toHexString(y); 運(yùn)行結(jié)果如下: 0 x800000001 = c0000000 0 x800000001 = 40000000 十六進(jìn)制與二進(jìn)的對(duì)比 0 x8000000016 =1000,0000, 0000, 0000, 0000, 0000, 0000, 00002 0 xc000000016=1100,0000, 0000, 0000, 0000, 0000, 0000, 00002 0 x4000000016 =0100,0000, 0000, 0000, 0000, 0000, 0000, 00002,移位運(yùn)算的注意事項(xiàng)及小技巧,移位運(yùn)算符適用類(lèi)型有b

17、yte、short、char、int、long 對(duì)低于int型的操作數(shù)將先自動(dòng)轉(zhuǎn)換為int型再移位。 對(duì)于int型整數(shù)移位ab,系統(tǒng)先將b對(duì)32取模,得到的結(jié)果才是真正移位的位數(shù)。例如:a33和a1結(jié)果是一樣的,a32的結(jié)果還是a原來(lái)的數(shù)字。 對(duì)于long型整數(shù)移位時(shí)ab ,則是先將移位位數(shù)b對(duì)64取模。 移位不會(huì)改變變量本身的值。如a1;在一行語(yǔ)句中單獨(dú)存在,毫無(wú)意義 。 x1的結(jié)果和x/2的結(jié)果是一樣的,x2和x*4的結(jié)果也是一樣的??傊粋€(gè)數(shù)左移n位,就是等于這個(gè)數(shù)乘以2的n次方,一個(gè)數(shù)右移n位,就是等于這個(gè)數(shù)除以2的n次方。請(qǐng)思考:如何用程序?qū)崿F(xiàn)求2的x次方。答案:y = 1 x;,

18、運(yùn)算符的優(yōu)先級(jí),我們可以使用括號(hào)改變運(yùn)算賦的優(yōu)先級(jí),分析int a =2;int b = a + 3*a;語(yǔ)句的執(zhí)行過(guò)程 與int a =2;int b =( a + 3)*a;語(yǔ)句的執(zhí)行過(guò)程的區(qū)別 。,如何避免多個(gè)運(yùn)算符帶來(lái)的問(wèn)題,對(duì)于int a =2; int b= a + 3 * a+;這樣的語(yǔ)句,b最終等于多少呢? 作者試驗(yàn)得到的結(jié)果是8。 對(duì)于int a =2; int b= (a +)+ 3 * a;這樣的語(yǔ)句,b最終等于多少呢? 作者試驗(yàn)得到的結(jié)果是11。,如何避免多個(gè)運(yùn)算符帶來(lái)的問(wèn)題,與其去思考其中的原因,我們還不如將上面的第二句改為幾條語(yǔ)句來(lái)實(shí)現(xiàn)我們想要的結(jié)果。 不要在一行中

19、編寫(xiě)太復(fù)雜的表達(dá)式,也就是不要在一行中進(jìn)行太多的運(yùn)算 在一行中進(jìn)行太多的運(yùn)算并不能為你帶來(lái)什么好處,相反只能帶來(lái)壞處,它并不比改成幾條語(yǔ)句的運(yùn)行速度快,它除可讀行差外,還極容易出錯(cuò)。 對(duì)于優(yōu)先級(jí)順序,讀者不用刻意去記,有個(gè)印象就行如果你實(shí)在弄不清這些運(yùn)算先后關(guān)系的話,就用括號(hào)或是分成多條語(yǔ)句來(lái)完成你想要的功能,因?yàn)槔ㄌ?hào)的優(yōu)先級(jí)是最高的, 這也是軟件編碼規(guī)范的一個(gè)要求。,程序的流程控制,順序結(jié)構(gòu) 選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu) 顧名思義,順序結(jié)構(gòu)就是程序從上到下一行一行執(zhí)行的結(jié)構(gòu),中間沒(méi)有判斷和跳轉(zhuǎn),直到程序結(jié)束。,if語(yǔ)句的選擇結(jié)構(gòu),if (表達(dá)式) 語(yǔ)句; if (表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2;

20、 if (表達(dá)式1) 語(yǔ)句1; else if (表達(dá)式2) 語(yǔ)句2; else if (表達(dá)式2) 語(yǔ)句3; else 語(yǔ)句n; 每個(gè)語(yǔ)句可以是使用 組成的復(fù)合語(yǔ)句 變量 布爾表達(dá)式?語(yǔ)句1:語(yǔ)句2; If語(yǔ)句還可以嵌套使用 if (表達(dá)式1) if (表達(dá)式2) 語(yǔ)句1; else語(yǔ)句2; esle if (表達(dá)式2) 語(yǔ)句3; else語(yǔ)句4; 嵌套時(shí)最好使用確定層次界限,舉例說(shuō)明,switch語(yǔ)句的選擇結(jié)構(gòu),Switch (表達(dá)式) case 常量表達(dá)式1:語(yǔ)句1; case 常量表達(dá)式2:語(yǔ)句2; case 常量表達(dá)式n:語(yǔ)句n; default: 語(yǔ)句n; default語(yǔ)句是可選

21、的,它接受除上面接受值的其他值,通俗的講,就是誰(shuí)也不要的都?xì)w它。 case后面可以跟多個(gè)語(yǔ)句,這些語(yǔ)句可以不用大括號(hào)括起來(lái) 。 switch語(yǔ)句判斷條件可接受int, byte, char, short型,不可以接受其他類(lèi)型 一旦碰到第一次case匹配,就會(huì)開(kāi)始順序執(zhí)行以后所有的程序代碼,而不管后面的case條件是否匹配,后面case條件下的代碼都會(huì)被執(zhí)行,直到碰到break語(yǔ)句為止。我們可以利用這個(gè)特點(diǎn)來(lái)用同一段語(yǔ)句處理多個(gè)case條件,while循環(huán)語(yǔ)句,While (表達(dá)式) 語(yǔ)句; int x=1; while(x3) System.out.println(x=+x); x+; ,腳下

22、留心:while表達(dá)式的括號(hào)后面一定不要加“;”,do-while循環(huán)語(yǔ)句,do 語(yǔ)句 while (表達(dá)式); public class TestDo public static void main(String args) int x=3; while(x=0) System.out.println(ok1); x+; int y=3; do System.out.println(ok2); y+; while(y=0); ,do-while循環(huán)語(yǔ)句,編寫(xiě)一個(gè)程序,這個(gè)程序不斷地讀取從鍵盤(pán)上輸入的字符,直到讀到字符q時(shí),程序結(jié)束。 提示:調(diào)用System.in.read();可以讀取到一個(gè)

23、從鍵盤(pán)上輸入字符對(duì)應(yīng)的整數(shù)。通過(guò)這個(gè)程序,你一定能體會(huì)到在什么樣的情況下,用do-while循環(huán)語(yǔ)句比while循環(huán)語(yǔ)句方便。,for循環(huán)語(yǔ)句,for(表達(dá)式1;表達(dá)式2 ;表達(dá)式3) 語(yǔ)句 for(int x=1;x= 10) break; System.out.println(x=+x); x+; ,break語(yǔ)句,break語(yǔ)句可以中止循環(huán)中的子語(yǔ)句和switch語(yǔ)句。一個(gè)無(wú)標(biāo)號(hào)的break語(yǔ)句會(huì)把控制傳給當(dāng)前(最內(nèi))循環(huán)(while,dofor或Switch)的下一條語(yǔ)句。如果有標(biāo)號(hào),控制會(huì)被傳遞給當(dāng)前方法中的帶有這一標(biāo)號(hào)的語(yǔ)句。如: st:while(true) while(true

24、) break st; ,continue語(yǔ)句,continue語(yǔ)句只能出現(xiàn)在循環(huán)語(yǔ)句(while,do,for)的子語(yǔ)句塊中,無(wú)標(biāo)號(hào)的continue語(yǔ)句的作用是跳過(guò)當(dāng)前循環(huán)的剩余語(yǔ)句塊,接著執(zhí)行下一次循環(huán)。 用continue語(yǔ)句的打印出 0到10之間的所有奇數(shù)的程序例子。 for(int i=0;i10;i+) if(i%2=0) continue; System.out.println(i); ,數(shù)組,為什么有數(shù)組? 堆內(nèi)存和棧內(nèi)存 int x; x = new int100; x=null; 的內(nèi)存狀態(tài)變化情況,數(shù)組,靜態(tài)數(shù)組 int ia =1,2,3,4; int ia=new

25、int3,4,5; int a5;/聲明數(shù)組時(shí),不能指定其長(zhǎng)度,編譯時(shí)將出錯(cuò) 使用數(shù)組時(shí)要注意的問(wèn)題 空指針異常 如何得到數(shù)組長(zhǎng)度 數(shù)組越界異常,多維數(shù)組,如何理解多維數(shù)組,類(lèi)似我們的棋盤(pán)。 java 中并沒(méi)有真正的多維數(shù)組,只有數(shù)組的數(shù)組, Java中多維數(shù)組不一定是規(guī)則矩陣形式。 定義一個(gè)多維數(shù)組 int xx; xx=new int3; xx0=new int3; xx1=new int2;,多維數(shù)組,多維數(shù)組中元素的引用方式,如:x12。 規(guī)則矩陣數(shù)組可以在一條語(yǔ)句中產(chǎn)生,如:int xx=new int23; 多維數(shù)組的靜態(tài)初始化 ,如: int xx=3,2,7,1,5,6;,與數(shù)

26、組操作相關(guān)的函數(shù),使用System.arraycopy()函數(shù)拷貝數(shù)組 用Arrays.sort 來(lái)排序數(shù)組,張孝祥IT課堂Java就業(yè)培訓(xùn)教程,主講老師:,第三講,面向?qū)ο螅ㄉ希?理解面向?qū)ο蟮母拍?面向過(guò)程 在一個(gè)結(jié)構(gòu)體中定義窗口的大小,位置,顏色,背景等屬性,對(duì)窗口操作的函數(shù)與窗口本身的定義沒(méi)有任何關(guān)系,如HideWindow,MoveWindow,MinimizeWindow,這些函數(shù)都需要接受一個(gè)代表要被操作的窗口參數(shù) ,是一種謂語(yǔ)與賓語(yǔ)的關(guān)系 。 面向?qū)ο?定義窗口時(shí),除了要指定在面向過(guò)程中規(guī)定的那些屬性,如大小,位置,顏色,背景等外,還要指定該窗口可能具有的動(dòng)作 ,如隱藏,移動(dòng),

27、最小化等。這些函數(shù)被調(diào)用時(shí),都是以某個(gè)窗口要隱藏,某個(gè)窗口要移動(dòng)的語(yǔ)法格式來(lái)使用的 ,這是一種主語(yǔ)與謂語(yǔ)的關(guān)系。 面向?qū)ο蟮娜筇卣?封裝 (Encapsulation) 繼承 (Inheritance) 多態(tài) (Polymorphism),類(lèi)與對(duì)象,類(lèi)是對(duì)某一類(lèi)事物的描述,是抽象的、概念上的定義;對(duì)象是實(shí)際存在的該類(lèi)事物的每個(gè)個(gè)體,因而也稱(chēng)實(shí)例(instance)。,如果將對(duì)象比作汽車(chē),那么類(lèi)就是汽車(chē)的設(shè)計(jì)圖紙。所以面向?qū)ο蟪绦蛟O(shè)計(jì)的重點(diǎn)是類(lèi)的設(shè)計(jì),而不是對(duì)象的設(shè)計(jì)。,類(lèi)的定義,class Person int age; void shout() System.out.println(“oh

28、,my god! I am “ + age); age是類(lèi)的屬性 ,也叫類(lèi)成員變量 。 shout是方法也叫類(lèi)的成員函數(shù)。 shout方法可以直接訪問(wèn)同一個(gè)類(lèi)中的age變量 ,如果一個(gè)方法中有與成員變量同名的局部變量,該方法中對(duì)這個(gè)變量名的訪問(wèn)是局部變量,而不再是成員變量。,對(duì)象的產(chǎn)生,Person p1 = new Person();執(zhí)行完后的內(nèi)存狀態(tài),對(duì)象的產(chǎn)生,當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),會(huì)對(duì)其中各種類(lèi)型的成員變量自動(dòng)進(jìn)行初始化賦值。除了基本數(shù)據(jù)類(lèi)型之外的都是變量類(lèi)型都是引用類(lèi)型,如上面的Person及前面講過(guò)的數(shù)組。,對(duì)象的使用,創(chuàng)建新的對(duì)象之后,我們就可以使用“ 對(duì)象名.對(duì)象成員 ”的格式,

29、來(lái)訪問(wèn)對(duì)象的成員(包括屬性和方法) class TestPerson public static void main(String args) Person p1 = new Person(); Person p2 =new Person(); p1.age = -30; p1.shout(); p2.shout(); 上面程序運(yùn)行的內(nèi)存布局如下圖,對(duì)象的生命周期,對(duì)象的比較,“=”運(yùn)算符與equals()方法的區(qū)別 怎樣比較兩個(gè)數(shù)組對(duì)象的內(nèi)容是否相等,匿名對(duì)象,我們也可以不定義對(duì)象的句柄,而直接調(diào)用這個(gè)對(duì)象的方法。這樣的對(duì)象叫做匿名對(duì)象, 如:new Person().shout(); 如果

30、對(duì)一個(gè)對(duì)象只需要進(jìn)行一次方法調(diào)用,那么就可以使用匿名對(duì)象。 我們經(jīng)常將匿名對(duì)象作為實(shí)參傳遞給一個(gè)函數(shù)調(diào)用。,實(shí)現(xiàn)類(lèi)的封裝性,如果外面的程序可以隨意修改一個(gè)類(lèi)的成員變量,會(huì)造成不可預(yù)料的程序錯(cuò)誤,就象一個(gè)人的身高,不能被外部隨意修改,只能通過(guò)各種攝取營(yíng)養(yǎng)的方法去修改這個(gè)屬性。 在定義一個(gè)類(lèi)的成員(包括變量和方法)時(shí),使用private關(guān)鍵字說(shuō)明這個(gè)成員的訪問(wèn)權(quán)限,這個(gè)成員成了類(lèi)的私有成員,只能被這個(gè)類(lèi)的其他成員方法調(diào)用,而不能被其他的類(lèi)中的方法所調(diào)用。,實(shí)現(xiàn)類(lèi)的封裝性,為了實(shí)現(xiàn)良好的封裝性,我們通常將類(lèi)的成員變量聲明為private,再通過(guò)public的方法來(lái)對(duì)這個(gè)變量進(jìn)行訪問(wèn)。對(duì)一個(gè)變量的操作

31、,一般都有讀取和賦值操作,我們分別定義兩個(gè)方法來(lái)實(shí)現(xiàn)這兩種操作,一個(gè)是getXxx()(Xxx表示要訪問(wèn)的成員變量的名字),用來(lái)讀取這個(gè)成員變量操作,另外一個(gè)是setXxx()用來(lái)對(duì)這個(gè)成員變量賦值。 一個(gè)類(lèi)通常就是一個(gè)小的模塊,我們應(yīng)該讓模塊僅僅公開(kāi)必須要讓外界知道的內(nèi)容,而隱藏其它一切內(nèi)容。我們?cè)谶M(jìn)行程序的詳細(xì)設(shè)計(jì)時(shí),應(yīng)盡量避免一個(gè)模塊直接修改或操作另一個(gè)模塊的數(shù)據(jù),模塊設(shè)計(jì)追求強(qiáng)內(nèi)聚(許多功能盡量在類(lèi)的內(nèi)部獨(dú)立完成,不讓外面干預(yù)),弱耦合(提供給外部盡量少的方法調(diào)用)。用總統(tǒng)指揮一支軍隊(duì)的例子來(lái)說(shuō)明這種效果。,類(lèi)的封裝所帶來(lái)的優(yōu)點(diǎn),隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié); 讓使用者只能通過(guò)事先定制好的方法來(lái)訪

32、問(wèn)數(shù)據(jù),可以方便地加入控制邏輯,限制對(duì)屬性的不合理操作; 便于修改,增強(qiáng)代碼的可維護(hù)性;,編程試驗(yàn):我們?cè)谝粋€(gè)類(lèi)中定義了一個(gè)private類(lèi)型的成員變量,接著產(chǎn)生了這個(gè)類(lèi)的兩個(gè)實(shí)例對(duì)象,請(qǐng)問(wèn)第一個(gè)對(duì)象的方法中,能否以“第二個(gè)對(duì)象.成員”的格式訪問(wèn)第二個(gè)對(duì)象中的那個(gè)private成員變量?,構(gòu)造函數(shù)的定義與作用,構(gòu)造方法的特征 它具有與類(lèi)相同的名稱(chēng); 它不含返回值; 它不能在方法中用return語(yǔ)句返回一個(gè)值 注意:在構(gòu)造方法里不含返回值的概念是不同于“void”的,在定義構(gòu)造方法時(shí)加了“void”,結(jié)果這個(gè)方法就不再被自動(dòng)調(diào)用了。 構(gòu)造方法的作用:當(dāng)一個(gè)類(lèi)的實(shí)例對(duì)象剛產(chǎn)生時(shí),這個(gè)類(lèi)的構(gòu)造方法就

33、會(huì)被自動(dòng)調(diào)用,我們可以在這個(gè)方法中加入要完成初始化工作的代碼。這就好像我們規(guī)定每個(gè)“人”一出生就必須先洗澡,我們就可以在“人”的構(gòu)造方法中加入完成“洗澡”的程序代碼,于是每個(gè)“人”一出生就會(huì)自動(dòng)完成“洗澡”,程序就不必再在每個(gè)人剛出生時(shí)一個(gè)一個(gè)地告訴他們要“洗澡”了。,構(gòu)造方法的重載,和一般的方法重載一樣,重載的構(gòu)造方法具有不同個(gè)數(shù)或不同類(lèi)型的參數(shù),編譯器就可以根據(jù)這一點(diǎn)判斷出用new 關(guān)鍵字產(chǎn)生對(duì)象時(shí),該調(diào)用哪個(gè)構(gòu)造方法了。產(chǎn)生對(duì)象的格式是:new 類(lèi)名(參數(shù)列表) ; 重載構(gòu)造方法可以完成不同初始化的操作, 如:p3=new Person(“Tom”,18);語(yǔ)句,會(huì)做這樣幾件事:創(chuàng)建指定

34、類(lèi)的新實(shí)例對(duì)象,在堆內(nèi)存中為實(shí)例對(duì)象分配內(nèi)存空間,并調(diào)用指定類(lèi)的構(gòu)造方法,最后將實(shí)例對(duì)象的首地址賦值給引用變量p3。,p3=new Person(“Tom”,18) 的內(nèi)存狀態(tài)變化過(guò)程分析,構(gòu)造方法的一些細(xì)節(jié),在java每個(gè)類(lèi)里都至少有一個(gè)構(gòu)造方法,如果程序員沒(méi)有在一個(gè)類(lèi)里定義構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)為這個(gè)類(lèi)產(chǎn)生一個(gè)默認(rèn)的構(gòu)造方法,這個(gè)默認(rèn)構(gòu)造方法沒(méi)有參數(shù),在其方法體中也沒(méi)有任何代碼,即什么也不做。 由于系統(tǒng)提供的默認(rèn)構(gòu)造方法往往不能滿足編程者的需求,我們可以自己定義類(lèi)的構(gòu)造方法,來(lái)滿足我們的需要,一旦編程者為該類(lèi)定義了構(gòu)造方法,系統(tǒng)就不再提供默認(rèn)的構(gòu)造方法了。 聲明構(gòu)造方法,如無(wú)特殊需要,應(yīng)使用

35、public關(guān)鍵字,在我們前面例子中,可以使用private訪問(wèn)修飾符嗎?,this是什么?,如果func2方法被調(diào)用 ,一定是事先已經(jīng)有了一個(gè)存在的對(duì)象,func2被作為那個(gè)對(duì)象的方法被使用。 在func2內(nèi)部能引用別的對(duì)象 ,同樣也能引用func2所屬的那個(gè)對(duì)象。 在func2中,自己所屬的那個(gè)對(duì)象的引用名稱(chēng)是什么呢? this關(guān)鍵字在java程序里的作用和它的詞義很接近,它在函數(shù)內(nèi)部就是這個(gè)函數(shù)所屬的對(duì)象的引用變量。,this引用句柄的存放位置,每個(gè)成員方法內(nèi)部,都有一個(gè)this引用變量,指向調(diào)用這個(gè)方法的對(duì)象,類(lèi)中的成員方法與this之間的關(guān)系如圖,this引用句柄的應(yīng)用,一個(gè)類(lèi)中的成

36、員方法可以直接調(diào)用同類(lèi)中的其他成員,其實(shí)我們?cè)谝粋€(gè)方法內(nèi)部使用“this.其他成員”的引用方式和直接使用“其他成員”的效果是一樣的,那this還有多大的作用呢?在有些情況下,我們還是非得用this關(guān)鍵字不可的 : 讓類(lèi)的成員變量名和對(duì)其進(jìn)行賦值的成員方法的形參變量同名是必要的,這樣的代碼誰(shuí)看了都能明白這兩個(gè)變量是彼此相關(guān)的,老手看到函數(shù)的定義,就能揣摩出函數(shù)中的代碼,大大節(jié)省了別人和自己日后閱讀程序的時(shí)間。 假設(shè)我們有一個(gè)容器類(lèi)和一個(gè)部件類(lèi),在容器類(lèi)的某個(gè)方法中要?jiǎng)?chuàng)建部件類(lèi)的實(shí)例對(duì)象,而部件類(lèi)的構(gòu)造方法要接收一個(gè)代表其所在容器的參數(shù)。 構(gòu)造方法是在產(chǎn)生對(duì)象時(shí)被java系統(tǒng)自動(dòng)調(diào)用的,我們不能在

37、程序中象調(diào)用其他方法一樣去調(diào)用構(gòu)造方法。但我們可以在一個(gè)構(gòu)造方法里調(diào)用其他重載的構(gòu)造方法,不是用構(gòu)造方法名,而是用this(參數(shù)列表)的形式,根據(jù)其中的參數(shù)列表,選擇相應(yīng)的構(gòu)造方法。,垃圾回收過(guò)程分析,c+中的析構(gòu)方法 java中的finalize()方法 System.gc的作用,函數(shù)的參數(shù)傳遞基本數(shù)據(jù)類(lèi)型的參數(shù)傳遞,函數(shù)的參數(shù)傳遞引用數(shù)據(jù)類(lèi)型的參數(shù)傳遞,函數(shù)的參數(shù)傳遞引用參數(shù)傳遞的一個(gè)問(wèn)題分析,static靜態(tài)變量,當(dāng)我們編寫(xiě)一個(gè)類(lèi)時(shí),其實(shí)就是在描述其對(duì)象的屬性和行為,而并沒(méi)有產(chǎn)生實(shí)質(zhì)上的對(duì)象,只有通過(guò)new關(guān)鍵字才會(huì)產(chǎn)生出對(duì)象,這時(shí)系統(tǒng)才會(huì)分配內(nèi)存空間給對(duì)象,其方法才可以供外部調(diào)用。我們

38、有時(shí)候希望無(wú)論是否產(chǎn)生了對(duì)象或無(wú)論產(chǎn)生了多少對(duì)象的情況下,某些特定的數(shù)據(jù)在內(nèi)存空間里只有一份,例如所有的中國(guó)人都有個(gè)國(guó)家名稱(chēng),每一個(gè)中國(guó)人都共享這個(gè)國(guó)家名稱(chēng),不必在每一個(gè)中國(guó)人的實(shí)例對(duì)象中都單獨(dú)分配一個(gè)用于代表國(guó)家名稱(chēng)的變量。 編寫(xiě)使用靜態(tài)變量統(tǒng)計(jì)一個(gè)類(lèi)產(chǎn)生的實(shí)例對(duì)象的個(gè)數(shù)的程序,static靜態(tài)方法,在靜態(tài)方法里只能直接調(diào)用同類(lèi)中其它的靜態(tài)成員(包括變量和方法),而不能直接訪問(wèn)類(lèi)中的非靜態(tài)成員。這是因?yàn)?,?duì)于非靜態(tài)的方法和變量,需要先創(chuàng)建類(lèi)的實(shí)例對(duì)象后才可使用,而靜態(tài)方法在使用前不用創(chuàng)建任何對(duì)象。 靜態(tài)方法不能以任何方式引用this和super關(guān)鍵字(super關(guān)鍵字在下一章講解)。與上面的

39、道理一樣,因?yàn)殪o態(tài)方法在使用前不用創(chuàng)建任何實(shí)例對(duì)象,當(dāng)靜態(tài)方法被調(diào)用時(shí),this所引用的對(duì)象根本就沒(méi)有產(chǎn)生。 main() 方法是靜態(tài)的,因此JVM在執(zhí)行main方法時(shí)不創(chuàng)建main方法所在的類(lèi)的實(shí)例對(duì)象,因而在main()方法中,我們不能直接訪問(wèn)該類(lèi)中的非靜態(tài)成員,必須創(chuàng)建該類(lèi)的一個(gè)實(shí)例對(duì)象后,才能通過(guò)這個(gè)對(duì)象去訪問(wèn)類(lèi)中的非靜態(tài)成員,這種情況,我們?cè)谝院蟮睦又袝?huì)多次碰到。,靜態(tài)代碼塊,一個(gè)類(lèi)中可以使用不包含在任何方法體中的靜態(tài)代碼塊(static block ),當(dāng)類(lèi)被載入時(shí),靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次,靜態(tài)塊經(jīng)常用來(lái)進(jìn)行類(lèi)屬性的初始化。 類(lèi)中的靜態(tài)代碼塊被自動(dòng)執(zhí)行,盡管我們產(chǎn)生了類(lèi)

40、的多個(gè)實(shí)例對(duì)象,但其中的靜態(tài)代碼塊只被執(zhí)行了一次。當(dāng)一個(gè)程序中用到了其他的類(lèi),類(lèi)是在第一次被使用的時(shí)候才被裝載,而不是在程序啟動(dòng)時(shí)就裝載程序中所有可能要用到的類(lèi)。,單態(tài)設(shè)計(jì)模式,設(shè)計(jì)模式是在大量的實(shí)踐中總結(jié)和理論化之后優(yōu)選的代碼結(jié)構(gòu)、編程風(fēng)格、以及解決問(wèn)題的思考方式。設(shè)計(jì)模式就想是經(jīng)典的棋譜,不同的棋局,我們用不同的棋譜,免得我們自己再去思考和摸索。失敗為成功之母,但是要以大量的時(shí)間和精力為代價(jià),如果有成功經(jīng)驗(yàn)可借鑒,沒(méi)有人再愿意去甘冒失敗的風(fēng)險(xiǎn),我們沒(méi)有理由不去了解和掌握設(shè)計(jì)模式,這也是Java開(kāi)發(fā)者提高自身素質(zhì)的一個(gè)很好選擇。使用設(shè)計(jì)模式也許會(huì)制約你去創(chuàng)新,不過(guò)真正有意義的創(chuàng)新只能出自少數(shù)

41、天才,即使你就是那個(gè)天才,雖不必因循守舊,但也不可能完全不去了解和借鑒前人的成功經(jīng)驗(yàn)。,單態(tài)設(shè)計(jì)模式,所謂類(lèi)的單態(tài)設(shè)計(jì)模式,就是采取一定的方法保證在整個(gè)的軟件系統(tǒng)中,對(duì)某個(gè)類(lèi)只能存在一個(gè)對(duì)象實(shí)例,并且該類(lèi)只提供一個(gè)取得其對(duì)象實(shí)例的方法。如果我們要讓類(lèi)在一個(gè)虛擬機(jī)中只能產(chǎn)生一個(gè)對(duì)象,我們首先必須將類(lèi)的構(gòu)造方法的訪問(wèn)權(quán)限設(shè)置為private,這樣,就不能用new 操作符在類(lèi)的外部產(chǎn)生類(lèi)的對(duì)象了,但在類(lèi)內(nèi)部仍可以產(chǎn)生該類(lèi)的對(duì)象。因?yàn)樵陬?lèi)的外部開(kāi)始還無(wú)法得到類(lèi)的對(duì)象,只能調(diào)用該類(lèi)的某個(gè)靜態(tài)方法以返回類(lèi)內(nèi)部創(chuàng)建的對(duì)象,靜態(tài)方法只能訪問(wèn)類(lèi)中的靜態(tài)成員變量,所以,指向類(lèi)內(nèi)部產(chǎn)生的該類(lèi)對(duì)象的變量也必須定義成靜

42、態(tài)的。,理解main方法的語(yǔ)法,由于java虛擬機(jī)需要調(diào)用類(lèi)的main()方法,所以該方法的訪問(wèn)權(quán)限必須是public,又因?yàn)閖ava虛擬機(jī)在執(zhí)行main()方法時(shí)不必創(chuàng)建對(duì)象,所以該方法必須是static的,該方法接收一個(gè)String類(lèi)型的數(shù)組參數(shù),該數(shù)組中保存執(zhí)行java命令時(shí)傳遞給所運(yùn)行的類(lèi)的參數(shù)。,內(nèi)部類(lèi)在類(lèi)中直接定義的內(nèi)部類(lèi),嵌套類(lèi)可以直接訪問(wèn)嵌套它的類(lèi)的成員,包括private成員,但是嵌套類(lèi)的成員卻不能被嵌套它的類(lèi)直接訪問(wèn)。 在內(nèi)部類(lèi)對(duì)象保存了一個(gè)對(duì)外部類(lèi)對(duì)象的引用,當(dāng)內(nèi)部類(lèi)的成員方法中訪問(wèn)某一變量時(shí),如果在該方法和內(nèi)部類(lèi)中都沒(méi)有定義過(guò)這個(gè)變量,內(nèi)部類(lèi)中對(duì)this的引用會(huì)被傳遞給

43、那個(gè)外部類(lèi)對(duì)象的引用。,內(nèi)部類(lèi)在類(lèi)中直接定義的內(nèi)部類(lèi),如果用static修飾一個(gè)內(nèi)部類(lèi),這個(gè)類(lèi)就相當(dāng)于是一個(gè)外部定義的類(lèi),所以static的內(nèi)部類(lèi)中可聲明static成員,但是,非static的內(nèi)部類(lèi)中的成員是不能聲明為static的。static的內(nèi)部類(lèi)不能再使用外層封裝類(lèi)的非static的成員變量,這個(gè)道理不難想象!所以static嵌套類(lèi)很少使用。,內(nèi)部類(lèi) 在類(lèi)中直接定義的內(nèi)部類(lèi),如果函數(shù)的局部變量(函數(shù)的形參也是局部變量),內(nèi)部類(lèi)的成員變量,外部類(lèi)的成員變量重名,我們應(yīng)該按下面的程序代碼所使用的方式來(lái)明確指定我們真正要訪問(wèn)的變量。 public class Outer private i

44、nt size; public class Inner private int size; public void doStuff( int size) size+; / 引用的是doStuff函數(shù)的形參 this.size+; /引用的是Inner類(lèi)中的成員變量 Outer.this.size+; / 引用的Outer類(lèi)中的成員變量 ,內(nèi)部類(lèi)如何被外部引用,class Outer private int size=10; public class Inner public void doStuff() System.out.println(+size); public class TestI

45、nner public static void main( String args) Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); inner.doStuff(); ,內(nèi)部類(lèi)在方法中定義的內(nèi)部類(lèi),嵌套類(lèi)并非只能在類(lèi)里定義,也可以在幾個(gè)程序塊的范圍之內(nèi)定義內(nèi)部類(lèi)。例如,在方法中,或甚至在for循環(huán)體內(nèi)部,都可以定義嵌套類(lèi) 。 在方法中定義的內(nèi)部類(lèi)只能訪問(wèn)方法中的final類(lèi)型的局部變量,用final定義的局部變量相當(dāng)于是一個(gè)常量,它的生命周期超出方法運(yùn)行的生命周期。,使用Java的文檔注釋,import jav

46、a.io.*; /* * Title: engineer類(lèi) * Description: 通過(guò)engineer類(lèi)來(lái)說(shuō)明java中的文檔注釋 * Copyright: (c) 2003 * Company: 銳智科技咨詢(xún)中心 * author 張孝祥 * version 1.00 */ public class engineer public String Engineer_name; /* * 這是engineer對(duì)象的構(gòu)造函數(shù) * param name engineer的名字 */ public engineer(String name) /* * 這是repairing方法的說(shuō)明 * pa

47、ram sum 需要修理的機(jī)器總數(shù) * param alltime 需要修理的總時(shí)間 * return Repairing的數(shù)量 */ public int repairing(int sum,int alltime) ,使用Java的文檔注釋,文檔注釋以“/*”開(kāi)始,以“*/”標(biāo)志結(jié)束,相應(yīng)的信息和批注所對(duì)應(yīng)的位置很重要! 類(lèi)的說(shuō)明應(yīng)在類(lèi)定義之前,方法的說(shuō)明應(yīng)在方法的定義之前。 批注參數(shù)來(lái)標(biāo)記一些特殊的屬性及其相應(yīng)的說(shuō)明 。 author version param return,張孝祥IT課堂Java就業(yè)培訓(xùn)教程,主講老師:,第四講,面向?qū)ο螅ㄏ拢?類(lèi)的繼承,通過(guò)繼承可以簡(jiǎn)化類(lèi)的定義 。

48、Java只支持單繼承,不允許多重繼承。 可以有多層繼承,即一個(gè)類(lèi)可以繼承某一個(gè)類(lèi)的子類(lèi),如類(lèi)B繼承了類(lèi)A,類(lèi)C又可以繼承類(lèi)B,那么類(lèi)C也間接繼承了類(lèi)A。 子類(lèi)繼承父類(lèi)所有的成員變量和成員方法,但不繼承父類(lèi)的構(gòu)造方法。在子類(lèi)的構(gòu)造方法中可使用語(yǔ)句super(參數(shù)列表) 調(diào)用父類(lèi)的構(gòu)造方法。 如果子類(lèi)的構(gòu)造方法中沒(méi)有顯式地調(diào)用父類(lèi)構(gòu)造方法,也沒(méi)有使用this關(guān)鍵字調(diào)用重載的其它構(gòu)造方法,則在產(chǎn)生子類(lèi)的實(shí)例對(duì)象時(shí),系統(tǒng)默認(rèn)調(diào)用父類(lèi)無(wú)參數(shù)的構(gòu)造方法。,子類(lèi)對(duì)象的實(shí)例化過(guò)程,分配成員變量的存儲(chǔ)空間并進(jìn)行默認(rèn)的初始化,就是用new關(guān)鍵字產(chǎn)生對(duì)象后,對(duì)類(lèi)中的成員變量按第三章的表3.1中的對(duì)應(yīng)關(guān)系對(duì)對(duì)象中的成

49、員變量進(jìn)行初始化賦值。 綁定構(gòu)造方法參數(shù),就是new Person(實(shí)際參數(shù)列表)中所傳遞進(jìn)的參數(shù)賦值給構(gòu)造方法中的形式參數(shù)變量。 如有this()調(diào)用,則調(diào)用相應(yīng)的重載構(gòu)造方法(被調(diào)用的重載構(gòu)造方法又從步驟2開(kāi)始執(zhí)行這些流程),被調(diào)用的重載構(gòu)造方法的執(zhí)行流程結(jié)束后,回到當(dāng)前構(gòu)造方法,當(dāng)前構(gòu)造方法直接跳轉(zhuǎn)到步驟6執(zhí)行 顯式或隱式追溯調(diào)用父類(lèi)的構(gòu)造方法(一直到Object類(lèi)為止,Object是所有Java類(lèi)的最頂層父類(lèi),在本章后面部分有詳細(xì)講解),父類(lèi)的構(gòu)造方法又從步驟2開(kāi)始對(duì)父類(lèi)執(zhí)行這些流程,父類(lèi)的構(gòu)造方法的執(zhí)行流程結(jié)束后,回到當(dāng)前構(gòu)造方法,當(dāng)前構(gòu)造方法繼續(xù)往下執(zhí)行。 進(jìn)行實(shí)例變量的顯式初始化

50、操作,也就是執(zhí)行在定義成員變量時(shí)就對(duì)其進(jìn)行賦值的語(yǔ)句,如: 執(zhí)行當(dāng)前構(gòu)造方法的方法體中的程序代碼,子類(lèi)對(duì)象的實(shí)例化過(guò)程,思考:1).為什么super()和this()調(diào)用語(yǔ)句不能同時(shí)在一個(gè)構(gòu)造函數(shù)中出現(xiàn)? 2).為什么super()或this()調(diào)用語(yǔ)句只能作為構(gòu)造函數(shù)中的第一句出現(xiàn)?,覆蓋父類(lèi)的方法,覆蓋方法必須和被覆蓋方法具有相同的方法名稱(chēng)、參數(shù)列表和返回值類(lèi)型。 如果在子類(lèi)中想調(diào)用父類(lèi)中的那個(gè)被覆蓋的方法,我們可以用super.方法的格式 。 覆蓋方法時(shí),不能使用比父類(lèi)中被覆蓋的方法更嚴(yán)格的訪問(wèn)權(quán)限 。,final關(guān)鍵字,在Java中聲明類(lèi)、屬性和方法時(shí),可使用關(guān)鍵字final來(lái)修飾。

51、final標(biāo)記的類(lèi)不能被繼承。 final標(biāo)記的方法不能被子類(lèi)重寫(xiě)。 final標(biāo)記的變量(成員變量或局部變量)即成為常量,只能賦值一次。 方法中定義的內(nèi)置類(lèi)只能訪問(wèn)該方法內(nèi)的final類(lèi)型的局部變量,用final定義的局部變量相當(dāng)于是一個(gè)常量,它的生命周期超出方法運(yùn)行的生命周期,將一個(gè)形參定義成final也是可以的,這就限定了我們?cè)诜椒ㄖ行薷男问絽?shù)的值。 public static final共同標(biāo)記常量時(shí),這個(gè)常量就成了全局的常量。,抽象類(lèi),java中可以定義一些不含方法體的方法,它的方法體的實(shí)現(xiàn)交給該類(lèi)的子類(lèi)根據(jù)自己的情況去實(shí)現(xiàn),這樣的方法就是抽象方法,包含抽象方法的類(lèi)就叫抽象類(lèi)。 抽

52、象類(lèi)必須用abstract關(guān)鍵字來(lái)修飾;抽象方法也必須用abstract來(lái)修飾。 抽象類(lèi)不能被實(shí)例化,也就是不能用new關(guān)鍵字去產(chǎn)生對(duì)象。 抽象方法只需聲明,而不需實(shí)現(xiàn)。 含有抽象方法的類(lèi)必須被聲明為抽象類(lèi),抽象類(lèi)的子類(lèi)必須覆蓋所有的抽象方法后才能被實(shí)例化,否則這個(gè)子類(lèi)還是個(gè)抽象類(lèi)。,接口(interface),如果一個(gè)抽象類(lèi)中的所有方法都是抽象的,我們就可以將這個(gè)類(lèi)用另外一種方式來(lái)定義,也就是接口定義。接口是抽象方法和常量值的定義的集合,從本質(zhì)上講,接口是一種特殊的抽象類(lèi),這種抽象類(lèi)中只包含常量和方法的定義,而沒(méi)有變量和方法的實(shí)現(xiàn)。 接口中的成員都是public訪問(wèn)類(lèi)型的。接口里的變量默認(rèn)是用public static final標(biāo)識(shí)的 。 我們可以定義一個(gè)新的接口用ext

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論