版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、l.summary程序二算法+數(shù)據(jù)+程序設(shè)計(jì)方法+計(jì)算機(jī)語言工具環(huán)境程序員面向過程和面相對(duì)像的理解:可以拿生活中的實(shí)例來理解面向過程少面向?qū)ο?,例如五子棋,面向過程的設(shè)計(jì)思路就是首 先分析問題的步驟:1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白 子,6、繪制畫面,7、判斷輸贏,8、返回步驟2, 9、輸出最后結(jié)果。把上面每個(gè)步驟用分 別的函數(shù)來實(shí)現(xiàn)??梢詫⒚嫦蜻^程中實(shí)現(xiàn)的五了棋,用下而的流程圖表示。圖1面向過程編程如果是面向?qū)ο蟮脑O(shè)計(jì)思想來解決問題。面向?qū)ο蟮脑O(shè)計(jì)則是從另外的思、路來解決問題。整 個(gè)五子棋可以分為1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統(tǒng),負(fù)責(zé)繪制
2、畫 面,3、規(guī)則系統(tǒng),負(fù)責(zé)判定諸如犯規(guī)、輸贏等。第一類對(duì)象(玩家對(duì)象)負(fù)責(zé)接受用戶輸入,并告知第二類對(duì)彖(棋盤對(duì)象)棋子布局的變化,棋盤對(duì)彖接收到了棋子的變化就要負(fù) 責(zé)在屏幕上面顯示出這種變化,同時(shí)利用第三類対象(規(guī)則系統(tǒng))來對(duì)棋局進(jìn)行判定??梢悦黠@地看出,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是步驟。同樣是繪制棋局,這樣的行 為在而向過程的設(shè)計(jì)中分散在了多個(gè)步驟中,很可能出現(xiàn)不同的繪制版本,因?yàn)橥ǔTO(shè)計(jì)人 員會(huì)考慮到實(shí)際情況進(jìn)行各種各樣的簡化。而面向?qū)ο蟮脑O(shè)計(jì)中,繪圖只可能在棋盤對(duì)象中 出現(xiàn),從而保證了繪圖的統(tǒng)一。什么是java語言:java是一種通過解釋方式來執(zhí)行的語言,其語法規(guī)則和c+類似。同
3、時(shí),java也是一種跨 平臺(tái)的程序設(shè)計(jì)語言。java語言編寫的程序既是編譯型的,乂是解釋型的。程序代碼經(jīng)過編譯z后轉(zhuǎn)換為一種稱為 java字節(jié)碼的屮間語w,java虛擬機(jī)jvm將對(duì)字節(jié)碼進(jìn)行解釋和運(yùn)行。編譯只進(jìn)行一次, 而解釋在每次運(yùn)行程序時(shí)都會(huì)進(jìn)行。編譯后的字節(jié)碼采用一種針對(duì)jvm優(yōu)化過的機(jī)器碼形 式保存,虛擬機(jī)將字節(jié)碼解釋為機(jī)器碼,然后在計(jì)算機(jī)上運(yùn)行。java語言程序代碼的編譯和 運(yùn)行過程如圖1所示。程序源代碼 編譯器 a寧節(jié)碼計(jì)算機(jī)機(jī)器碼 v010010丁vh.虛擬機(jī)圖1 java程序的編譯和運(yùn)行過程java語言的可移植性表現(xiàn)在哪里?.java (源程序文件)文件經(jīng)編譯器編譯為針對(duì)jav
4、a虛擬機(jī)(jvm)的.class (字節(jié)碼文件)文 件,.class文件被java虛擬機(jī)(jvm)解釋成計(jì)算機(jī)能識(shí)別的機(jī)器碼。不同的操作系統(tǒng)調(diào)川 不同的jvm,只耍jvm的解釋方式不變,就決定了源程序不需要修改,實(shí)現(xiàn)了跨平臺(tái)。java®擬機(jī)(java virtual machine) (臺(tái)計(jì)機(jī)if瑕什或處件棋擬的汁并機(jī)java礎(chǔ)擬機(jī)(jvm)讀訛片處 川,r? ulpiclass <flo java編洋器什対java竝擬機(jī)產(chǎn)tclass文件.因此是獨(dú)也j半臺(tái)的 java解籽器負(fù)說將javaife擬機(jī)的代碼倔定的t仟i:運(yùn)行swc.cl計(jì)算機(jī)語言發(fā)展史及java的歷史地位第一代語
5、言打孔機(jī)一純機(jī)器語言第二代語言匯編第三代語言 c、pascak fortran面向過程的語言 c+面向過程/面向?qū)ο?java跨平臺(tái)的純面向?qū)ο蟮恼Z言.net跨語言的平臺(tái)java程序運(yùn)行機(jī)制及運(yùn)行過程 java兩種種核心機(jī)制: java 虛擬機(jī)(java virtual machine )垃圾收集機(jī)制(garbage collection )操作系統(tǒng)平臺(tái)unixjvm for otherother platform java語言有三種注釋方式:/用于單行注釋用于多行注釋7”用于多行注釋,且可以被doc工具解析72a va keywords:intpublicthisfinallyboolea
6、nabstractcon tinuefloatlongshortthrowthrowsreturnbreakforstaticnewinterfaceifgotodefaultbytedocasestrictfppackagesupervoidtryswitchelsecatchimplementsprivatefinalclassextendsvolatilewhilesynchronizedinstan ceofcharprotecteimportdtransie ntimplementsdafauledouble自動(dòng)遞增、遞減運(yùn)算符的操作元只能為變量,不能為字面常數(shù)和表達(dá)式,且該變 量類
7、型必須為整型、浮點(diǎn)型或java包裝類型1. 全部小寫2. 有專門含義的單詞3. 用于定義數(shù)據(jù)類型:class, int, long;用于定義數(shù)據(jù)類型值:true, false, null; 流程控制:if, else, for;權(quán)限修飾:public, private, protected。標(biāo)示符1. 包名稱:多單詞全部小寫xxxyyy2. 類名接口名:多單詞鏈接,首字母大寫xxxyyy3. 變量和函數(shù)名:多單詞組成時(shí),首單詞小寫,后而每個(gè)單詞的首字母大寫xxxyyy4. 常量名:全部字母大寫,多單詞z間下劃線鏈接xxx_yyy變量1. 內(nèi)存中的一個(gè)存儲(chǔ)區(qū)域2. 有自己的名稱和類型(類型決定了
8、內(nèi)存的大?。?. 通過變量名來訪問該內(nèi)存塊內(nèi)容4. 成員變量(靜態(tài)變最,實(shí)例變量),局部變最5. 基本數(shù)據(jù)類型,引用數(shù)據(jù)類型6. 基本數(shù)據(jù)類型存放在棧內(nèi)存內(nèi),引用數(shù)據(jù)類型棧內(nèi)存中放的為首地址,內(nèi)容放在堆內(nèi)存 內(nèi)7. java中默認(rèn)的整形為int型,long型應(yīng)定義為long xx = 123l (i);8. java中默認(rèn)的浮點(diǎn)型為double型,float型應(yīng)在后加f或f;9. char類型對(duì)應(yīng)的是unicode, java支持char定義轉(zhuǎn)義7符10. 不同于c, java 'i1 boolean只能是true或false,不能是數(shù)值。11自動(dòng)類型轉(zhuǎn)換12. 強(qiáng)制類型轉(zhuǎn)換,bool
9、ean不能轉(zhuǎn)為其他類型,字符申不能直接轉(zhuǎn)化成基本類型13.數(shù)侑型整形:by te(l), short (2) t int(4), long (8) 淳點(diǎn)型:fl oat (4), doubl e (8)char (1)基本數(shù)據(jù)刪字符型bool 型類引用數(shù)據(jù)類型接口classinterfaceboolean(l)數(shù)據(jù)類世數(shù)組aint a = 12;string str = “abf” ;基木數(shù)據(jù)類型的值直接放在棧內(nèi)存內(nèi)引用數(shù)據(jù)類型的值放在堆內(nèi)存內(nèi),棧內(nèi)存里而放的是首地址viast.a bl -類成員的初始默認(rèn)值:類成員是基木類型但是未初始化時(shí),java會(huì)默認(rèn)初始化為:基本類型默認(rèn)值boolean
10、falsechar'u0000z (null)byte(byte)oshort(short)oint0longolfloato.ofdoubleo.od只針對(duì)于類成員,如方法中出現(xiàn)的耒初始化的基本類型則不會(huì)默認(rèn)初始化。3.operator邏輯運(yùn)算符順序:運(yùn)算符含義冃法結(jié)合方向&&、&邏輯與opl&&op2左到右ii邏輯或opl|op2左到右1邏輯非! op右到左位運(yùn)算符:位運(yùn)算符川于處理整形和字符型的操作數(shù)。位運(yùn)算是完全針對(duì)二進(jìn)制位(bit)單位的操作運(yùn)算符用法含義運(yùn)算分類非-opl對(duì)opl操作數(shù)按位取反按位運(yùn)算&與opl & o
11、p2opl和op2按位相與1或opl | op2opl和op2按位相或八異或opl人 op2opl和op2按位異或«左移位opl « op2opl按位左移op2次移位運(yùn)算符»右移位opl » op2op2按位右移op2次»>無符號(hào)右移 位opl »> op2op2不帶符號(hào)按位右移op2 次注意和邏輯運(yùn)算符&m| i的區(qū)別,&和&&都nj以是邏輯打。邏輯操作吋,操作數(shù)為boolean 只為0或1,但是位操作時(shí),操作數(shù)為整形,h會(huì)被轉(zhuǎn)化為二進(jìn)制表示,按位逐個(gè)操作,然 后給出結(jié)果。左移就是將左邊的
12、操作數(shù)在內(nèi)存中的二進(jìn)制數(shù)據(jù)左移右邊操作數(shù)指定的位數(shù),左邊移空的部 分補(bǔ)0。右移則復(fù)雜一些。當(dāng)使用“>>”符號(hào)時(shí),如果最高位是0,左移空的位就填入0; 如果最高位是1,右移空的位就填入1 0注意:移位運(yùn)算符適用的數(shù)據(jù)類型有byte、short> char int、long。技巧:移位能讓我們實(shí)現(xiàn)整數(shù)除以或乘以2的n次方的效果,如:y«2 丁 y*4的結(jié)果相同; y»l的結(jié)果于y/2的結(jié)果相同??傊?,一個(gè)數(shù)左移n位,就是將這個(gè)數(shù)乘以2的n次方, 一個(gè)數(shù)右移n位,就是將這個(gè)數(shù)除以2的n次方。運(yùn)算符優(yōu)先級(jí): 增量和減量運(yùn)算 算術(shù)運(yùn)算 比較運(yùn)算 邏輯運(yùn)算 賦值運(yùn)算優(yōu)
13、先級(jí)描述運(yùn)算符高括號(hào)()9正員號(hào)+ .一元運(yùn)算符+ !乘除* / %加減+ -移位運(yùn)算« » »>比較大小<>>=<=比較是否相等=!=按位與運(yùn)算&按位異或運(yùn)算a按位或運(yùn)算1邏輯與運(yùn)算&&1邏輯或運(yùn)算ii三元運(yùn)算符?:低賦值運(yùn)算符=+= *= /= %=進(jìn)制1. 二進(jìn)制,八進(jìn)制,十進(jìn)制,十六進(jìn)制2. 計(jì)算機(jī)存儲(chǔ)方式:計(jì)算機(jī)以數(shù)據(jù)的二進(jìn)制補(bǔ)碼形式存儲(chǔ)a. 正數(shù):補(bǔ)碼等于原碼b. 負(fù)數(shù):補(bǔ)碼等于反碼末尾加1c. 反碼:最高位不變,其余位取反d. int型為4字節(jié),32位,默認(rèn)笫32位為符號(hào)位e. long型8字節(jié),
14、64位,默認(rèn)第64位為符號(hào)位byte類型原碼補(bǔ)碼原碼補(bǔ)碼4 需要記憶的常用類string class兩種初始化的比較public class stringclasspublic static void main(string arg)string strl = new string(,'hellowordh); / 構(gòu)造函數(shù)初始化方法 1string str2 = “helloword”;直接初始化方法 2string str3 = “helloword”;直接初始化方法 2string str4 = new string(,hellowordn); / 構(gòu)造函數(shù)初始化方法 1棧內(nèi)存堆
15、內(nèi)存ctrl才"helloword |str2string str2 = nhenoyrdn;string str3 = l,hgllqwqr>,;string strl = new sbb世qp");string str4 = new stjldgf'beuq蟻qld”);垃圾垃圾用構(gòu)造方法初始化時(shí),會(huì)形成垃圾,每次構(gòu)造,即使字符串相同,也會(huì)分配 不同的堆內(nèi)存,而字符串直接初始化則利用了變量池,利用string類的方法public boolean equals (string str)比較堆內(nèi)存的內(nèi)容system.out.print(strl.equals(
16、str3);/truesystem.out.print(strl.equals(str4);/truesystem.out.print(str2.equals(str3);/truesystem.out.print(strl.equals(str4);/true利用“h”比較堆內(nèi)存的地址system.out.print(strl=str3);/falsesystem.out.print(strl=str4);/falsesystem.out.print(str2=str3);/truesystem.out.print(strl=str4);/false注意字符串常量被默認(rèn)為匿名string類,
17、用方法2初始化string變量時(shí),會(huì) 使用共享設(shè)計(jì),字符串匿名對(duì)象會(huì)被jvm放入變量池屮記錄下來當(dāng)z后再次用到該匿名字符串時(shí),它會(huì)被直接使用,堆內(nèi)存地址不變. 構(gòu)造兩數(shù)初始化時(shí),不會(huì)自動(dòng)入池,需要使用intern ()手工入池。如2 手工入池string str5 = new string(" helloword").intren();string str6 = "helloword"system.out.print(str5=str6);/truesystem.out.print(str5.equals(str6);/true由于字符串常量是匿名str
18、ing類,故其可以向string類一樣使用,如下:system.out.print(,helloword,.equals(str6); /truesystem.out.print(str6.equals(,>helloword>>); /true/ 但是 system.out.print(str6.equals("helloword");存在可能跑出nullpointerexception界常的悄況,如下所示string str7 = null;system.out.printjstrj.equalsc'helloword");/;?拋出
19、異??梢詫烧呋Q來避免界常'拋出system.out.print(llhellowordiv.equals(str7);string 和 stringbuffer 的問題public class stringclasspublic static void main(string arg)string strl = "abc"strl+=ndef;利用加號(hào)連接兩個(gè)字符串for(int i = 0; i<10; i+)strl+=mem;/產(chǎn)生較多垃圾system.out.println(strl);堆內(nèi)存垃圾垃圾這種形式的編程應(yīng)該使用stringbuffers
20、tring 的 constructorstringqinitializes a newly created string object so that it represents an empty character sequenee.string (byte bytes)constructs a new string by decoding the specified array of bytes using the platform,s default charset.string(byte bytes, int offset, int length)constructs a new st
21、ring by decoding the specified subarray of bytes using the platform's default charset.string (char value)allocates a new string so that it represents the sequence of characters currently contained in the character array argument.string (char value, int offset, int count)allocates a new string th
22、at contains characters from a subarray of the character array argument.string(string original)initializes a newly created string object so that it represents the same sequenee of characters as the argument; in other words, the newly created string is a copy of the argument string.string (sttingbuffc
23、r buffer)allocates a new string that contains the sequence of characters currently contained in the string buffer argument.string (stringbu訂dcr builder)allocates a new string that contains the sequence of characters currently contained in the string builder argument.待續(xù)string 的 methodcharat (int inde
24、x) return charreturns the char value at the specified index.codepointat(int index)return unicode codereturns the character (unicode code point) at the specified index.codepointbefore(int index) return unicode codereturns the character (unicode code point) before the specified index. codepointcount(i
25、nt beginlndex, int endindex)returns the number of unicode code points in the speci f ied text range of this sporcto(string onothcrstring) return int compares two strings lexicographically.note: (anotherstringlarger than negative, equal zero, less than positive) comparetotgnorecase(string st
26、r)return intcompares two strings lexicographically, ignoring case differences. note: ( anotherstring larger than negative, equal zero, less than positive)concat (string str) return stringconcatenates the specified string to the end of this string.valucof(char data) return stringreturns the string re
27、presentation of the char array argument.copyvalueof(chart data) return string equivalent to valueof (char)>copyvalueof (char data, int offset, int count)return string equivalent to valueof (char, int, int) cndswith(string suffix) return booleantests if this string ends with the specified suffix.e
28、quals(object anobject) return boolean compares this string to the specified object.string類的正則表達(dá)式格式輸出介紹null總結(jié)看下面的代碼:package fanxingnuotable;class nodeprivate string data; public node()public string getdata() returnthis.data;publicstaticvoid main(string arg) node n = new node();node nl = null;system.o
29、ut println(n);sys tem.out:. print ln(n .get data();system.out.printin(n1);system.out.println(nlgetdata(); 輸出結(jié)果如下:fanxingnuo.tablenode659e0bfdnullnullexception in thread "mairt javalang.nullpointerexceptionat fanxingnuotabletablemain(table.java:335)對(duì)象被構(gòu)造后,用new分配了空間,此吋其有地址,屬性在地址內(nèi)為null;當(dāng)直 接把對(duì)象初始化為
30、null吋,表示該對(duì)象不存在(真的為空),是個(gè)空指針,它的 屈性不存在,當(dāng)訪問屈性時(shí)會(huì)出錯(cuò)。scanner特點(diǎn):final 類來白包方法:math class特點(diǎn):該類為final類,無法繼承 來自包方法:static方法可用類名直接調(diào)用:publicstaticdouble sin(doublea)publicstaticdouble cos(doublea) publicstaticdoubletan(doublea) publicstaticdoubleasin(doublea) publicstaticdoubleacos(doublea) publicstaticdoubleatan
31、(doublea) publicstaticdouble toradians(doubleangdeg)角度變弧度publicstaticdouble todegrees(doubleangrad)弧度變角度 publicstaticdouble exp(doublea) publicstaticdouble ceil(doublea)向上取整 publicstaticdouble floor(doublea)向下取整publicstaticdoublelog(doublea)publicstaticdouble publicstaticdouble publicstaticdoublelog
32、lo(doublea) sqrt(doublea)平方根 cbrt(doublea)立方根public static double/float/int/long abs(double a)絕對(duì)值publicstatic long/int addexact(long x, iongy)計(jì)算和常量:靜態(tài)常量:publicstaticfinaldoublef = 2.7182818284590452354; publicstaticfinaldoublepi = 3.14159265358979323846;5 算法介紹遞歸遞歸結(jié)構(gòu)的主要內(nèi)容包括兩個(gè)部分:(1) 定義遞歸頭。如果遞歸結(jié)構(gòu)只是一味地自
33、己調(diào)用自己將構(gòu)成無限循壞,所以任 何一個(gè)遞歸方法都必須有一個(gè)“遞歸頭”,即當(dāng)同性質(zhì)的問題被簡化得足夠簡單時(shí),將可 以宜接獲得問題的答案,而不必再調(diào)用自身。例如當(dāng)求n!的問題被簡化成求i!的問題 時(shí),可以直接獲得1!的答案為1,這就是遞歸頭°(2) 定義如何從同性質(zhì)的簡化問題求得當(dāng)前問題“ 一個(gè)問題的解答將依賴于一個(gè)同 性質(zhì)問題的解答,而解答這個(gè)同性質(zhì)問題實(shí)際就是用不同的參數(shù)(體現(xiàn)范圍縮小)來調(diào) 用遞歸方法自身。例如求n!這個(gè)問題被劃分為求(nl)!和把(nl)!與n相乘兩個(gè)步驟,通 過這樣的劃分,求n!的問題被簡化成求(n-1)!的問題.同理,求(ml)!的問題被簡化成 求(n-2)
34、!的問題,依次類推o執(zhí)行遞歸方法時(shí),首先逐級(jí)遞歸調(diào)用展開,如從調(diào)用factorial(n)到調(diào)用factorial(n- 1).再到調(diào)用factorial(n-2),,當(dāng)達(dá)到遞歸頭時(shí)再逐級(jí)返回,依次求得factorial(l), factorial(2)» ,factorial(n-l),直到最后得到 factorial(n)的結(jié)果。下面寫個(gè)完整的求階乘的程序。在該程序中,用main()方法來調(diào)用factorial()方法。簡單的程序是遞歸結(jié)構(gòu)的優(yōu)點(diǎn)之一。但是遞歸調(diào)用會(huì)占用大量的系統(tǒng)堆棧,內(nèi)存耗 用多,在遞歸調(diào)用層次較多時(shí),運(yùn)算速度較之循環(huán)結(jié)構(gòu)要慢得多。所以,在使用時(shí)要慎 重考慮。6
35、參數(shù)傳遞基本數(shù)據(jù)類型和應(yīng)用數(shù)據(jù)類型的參數(shù)傳遞package fanxingnuo; public class test private int j=0;private string str = "hello"public int get3() return j;public voidj) this.j = j;public string getstr() return str;public void setstr(string str) this.str = str; public static void main(string args) /實(shí)例化一個(gè)test類,并設(shè)置值
36、test test = new test();testsetj(100);test.setstr("hello");/初始化一個(gè)數(shù)值int numl = 111;/將引用數(shù)據(jù)class傳入函數(shù),經(jīng)過函數(shù)后,class成員變化system.outprintin("function result of class num is:"+change(test)j);system.out.printin("class num is:"+testj);systemout.printin("function result of class
37、 str is:"+change(test)str);system.outprintin("class str is:”+teststr);將基本數(shù)據(jù)傳入函數(shù),經(jīng)過函數(shù)后,數(shù)值不變化system.out.printinunction result is of int number:"+change(numl);system.out.printin(”int number is:"+numl);/重載函數(shù)change public static test change(test temp)temp.setj(200);temp. setstr (,word
38、h);return temp;public static int change(int num)return num=222;輸出結(jié)果為:function result of class num is:200 class num is:200function result of class str is:word class str is:wordfunction result is of int number:222 int number is:lll結(jié)果分析:對(duì)于數(shù)值numl的內(nèi)存分析如下:numl=lllnum=numl=lllnuml=lllnum=222對(duì)于change引用內(nèi)存分析如
39、k:棧內(nèi)存看下面這段代碼分析結(jié)果:package fanxingnuo;public class test public static void main(string args) string str = “hello”;system.out.printin(”function result of class stris:"+change(str);system.out.printin(”str is:"+str);public static string change(string temp)t emp=,word,'return temp;結(jié)果如下:funct
40、ion result of class str is:wordstr is:hello棧內(nèi)存new堆內(nèi)存test"hello"temp"word"7內(nèi)容講解繼承1. 繼承使用extends關(guān)鍵字,子類將繼承父類的非private屬性和方法,不繼承構(gòu)造方法, 但是必須調(diào)用構(gòu)造方法。2. 子類雖然不能直接訪問private屬性但是可以通過public的方法間接方位private屬性3. 子類可以另外定義屬性和方法4. 了類方位繼承的屬性和方法的方式與父類相同5. 子類使用構(gòu)造函數(shù)創(chuàng)建實(shí)例時(shí),對(duì)于父類繼承部分是調(diào)用無參數(shù)的構(gòu)造函數(shù)6. 了類的方法重寫:將從父類
41、繼承的方法升級(jí)改造以適m了類的使用。方法名稱,參數(shù)列 表,返回值應(yīng)該完全相同。訪問權(quán)限不能比父類更嚴(yán)格。7. 對(duì)于子類的方法重寫,通過類名調(diào)用不同的方法實(shí)現(xiàn)不同的功能。8. super在了類中使用,用于引用父類的屬性和方法,與this相對(duì)應(yīng)。默認(rèn)情況下,了類 通過super關(guān)鍵字調(diào)川父類無參數(shù)構(gòu)造器。若父類無不含參數(shù)的構(gòu)造器,則子類要通過 super (參數(shù))來調(diào)用父類帶參數(shù)構(gòu)造方法。渣程2mi1產(chǎn)生對(duì)累并對(duì)成 員受量飮認(rèn)初紿化父類養(yǎng)程susi方式 mimtkis 對(duì)- 應(yīng)的構(gòu)it方法3構(gòu)it方法中是電 qth遷語句調(diào)甩3構(gòu)it方法中是電 smthi語句謂用3構(gòu)it方法中是2 gth茫語句調(diào)甩
42、&渣程1方式燮銭8用山讓對(duì)應(yīng)的構(gòu)逢方法4. super®句調(diào)用或隨式玄適程1方式:調(diào)用父亦汕方法-sig« 至:obj.c談為生“對(duì)當(dāng)11類中的成員吏量莫總加化4 super語句調(diào)用或魁式週用父真諭tg法4 ,upr語句週式 il用父劇血凍5對(duì)當(dāng)窮類中的成 員竇.旻式瞬化至objx談為止2對(duì)構(gòu)it方法中 的形式多數(shù)賦值j 6執(zhí)行當(dāng)前構(gòu)itl方法中的代同思考1)為什么super()和this()調(diào)用語句不能同時(shí)在一個(gè)構(gòu)造函數(shù)中出現(xiàn)?2).為什么super(.)s£this(.)i用語句只能作為構(gòu)造函數(shù)中的第一句出現(xiàn)?關(guān)鍵字super在java類中使super
43、來引用父類的成分-super可用于訪問父類中定義的屬性-super可用于調(diào)用父類中定義的成員方法-super可用于在子類構(gòu)造方法中調(diào)用父類的構(gòu)造方法-super的追溯不僅限于直接父類繼承有純繼承和擴(kuò)展繼承,純繼承的導(dǎo)岀類屮不包含新的方法和屬性;擴(kuò)展繼承則包含 新方法或?qū)傩浴<兝^承usefulvoid k) void g() assume this represents a big interface extendingthe interfacemoreuseful void f() void g() void u() void v() void w()擴(kuò)展繼承擴(kuò)展繼承增加的接口基類不能訪問,向
44、上轉(zhuǎn)型后這些接口將被裁減掉 向下轉(zhuǎn)型的說明:class af();class b extends af();go;h();a atype = new a(), new b();atypeo.f(); okatypel.f(); okatype0.g(); erroratypel.g(); error(b)atype0.g(); error(b)atypel.g(); ok基類可以用導(dǎo)出類初始化,此時(shí)可以通過強(qiáng)制向下轉(zhuǎn)型,繼承擴(kuò)展接口 但是基類用基類初始化時(shí)不能像導(dǎo)出類強(qiáng)制轉(zhuǎn)型。抽象類的定義:將基類定義為抽象類abstract關(guān)鍵字此時(shí)該基類將不能創(chuàng)建對(duì)象可以下class前加abstract也可
45、以在幾個(gè)方法或?qū)傩郧凹雨P(guān)鍵字訪問權(quán)限關(guān)鍵字類內(nèi)子類包內(nèi)包外整體privateokprotectedokokokokpublicokokokokok組合與繼承面向?qū)ο蟮木幊躺珊褪褂贸绦虼a最可能采用的方法是直接將數(shù)據(jù)和方法包裝到一 個(gè)類 中,并使用該類的對(duì)像。可以用組合開發(fā)新類也可以通過繼承開發(fā)子類。但是一般繼承使用 不多,只冇在需要向上轉(zhuǎn)型的悄況下才使用。在選擇繼承時(shí)應(yīng)該考慮是否需要向上轉(zhuǎn)型。final關(guān)鍵字final nj*以修飾數(shù)據(jù),方法和類。修飾數(shù)據(jù)(基礎(chǔ)數(shù)據(jù)類型)時(shí)指該數(shù)據(jù)是不能修改的,是常量。定義時(shí)必須賦值,常量減輕 了運(yùn)行是的負(fù)擔(dān)。一個(gè)經(jīng)過static和final修飾的數(shù)據(jù)占有一
46、個(gè)無法改變的內(nèi)存空間。如來類中一個(gè)數(shù)據(jù)是final 修飾額,在每次創(chuàng)建對(duì)象時(shí)該數(shù)據(jù)都會(huì)被初始化一次,但是static和final修飾的數(shù)據(jù)在裝 載時(shí)被初始化,每次創(chuàng)建對(duì)象時(shí)地址和數(shù)值都不變,不會(huì)被再次初始化。final int i = 100;static final i = 100;當(dāng)final修飾引用數(shù)據(jù)類型時(shí) (對(duì)象引用),final使引用恒定不變,一旦應(yīng)用被初始化為一個(gè)對(duì)彖,該對(duì)彖就無法對(duì)改變指向另外一個(gè)對(duì)彖。然而對(duì)彖自身是可以修改的。這一 效果同樣適用于數(shù)組。final string str = new string();stri ng stri = new stri ng();st
47、ri ng str2 = new stri ng();str2 = stri; okstr2 = str; okstri = str2; okstr = strl/str2; error空白final允許在聲明變量為final時(shí)不初始化該值,可以編譯通過,編譯器保持該空final,但是在使 用它之前必須初始化。該方法提高了 final使用的靈活性。class odometerfinalint num;odometer(int num)system.out pri ntlnodometer");this, num = num;system.out.pri ntln (this, num
48、);odometer() num = 0;class test odometer odel = new odometer(120); odometer ode2 = new odometer(12);final還可以修飾力法的參數(shù)final方法final方法能夠防止改變方法的意義,禁止繼承類的重寫。繼承了類中不能重寫該方法, final方法還涉及到效率問題,final方法告訴編譯器將所final方法的調(diào)用轉(zhuǎn)為內(nèi)嵌調(diào)用。private修飾的方法在繼承類中也無法重寫,與該方法名和參數(shù)相同的方法將是一個(gè)新方法, 而不是重寫的方法。此時(shí)多態(tài)方式的類無法繼承該方法?!爸剌d”只有在某方法是基類的接口的一部
49、分時(shí)才會(huì)出現(xiàn)。即,你必須能將一個(gè)對(duì)彖向上轉(zhuǎn) 型為它的基本類型并調(diào)用相同的方法(這一點(diǎn)在下一章將得以闡明)。如果某方法為private, 它就不是基類的接口的一部分。它僅是一些隱藏丁類中的程序代碼,不過具有相同的名稱而 lio但你如果在導(dǎo)出類中以相同的名稱生成一個(gè)public, protected或包訪問權(quán)限(package access)方法的話,該方法就不會(huì)產(chǎn)生在基類中出現(xiàn)的“僅具有相同名稱”的情況。此時(shí)你 并沒有重載方法,你僅是生成了一個(gè)新的方法。由t private方法無法觸及又不能有效隱藏, 所以僅僅是因?yàn)榭紤]到定義它的類的程序代碼組織,它們才有存在的總義,除此z外,其他 任何事物都不
50、需要把它納入考慮的范疇。final 類一個(gè)final類是不能被繼承的,該類無法創(chuàng)建子類cfinal類中數(shù)據(jù)和方法都暗含是final型的。static關(guān)鍵字static屬性class astatic int num;xxxxxx;a al = new a();a a2 = new a();a a3 = new a();num將被存儲(chǔ)于全局?jǐn)?shù)據(jù)區(qū),al, a2, 的num共享一個(gè)數(shù)據(jù)區(qū),修改一個(gè)將修改其它的 兩個(gè)。同時(shí)static性質(zhì)的屈性不依賴于實(shí)例化對(duì)象,利川類名.num就可以調(diào)用和修改即:a.num可見static屬性不受堆,棧內(nèi)存的限制,而是存在于全局?jǐn)?shù)據(jù)區(qū)棧內(nèi)存:保存基木數(shù)據(jù)類型和堆內(nèi)存
51、的訪問地址堆內(nèi)存:保存引用數(shù)據(jù)類型的屬性全局?jǐn)?shù)據(jù)區(qū):保存所有的全局?jǐn)?shù)據(jù),如static屬性全局代碼區(qū):保存所有的操作方法static方法與static屬性一樣,static方法獨(dú)立于類的實(shí)例,可以通過類名.方法名調(diào)用 非static方法:只能通過實(shí)例化調(diào)用,可以調(diào)用static屬性和方法,也可以調(diào)用非static 屬性和方法 static方法:可以通過類名稱和實(shí)例化調(diào)用,可以調(diào)用static屬性和方法,不可以調(diào)用 非static屬性和方法原因:static方法不依賴于實(shí)例化,而非static則依賴于實(shí)例化,因?yàn)樗麄冃枰褍?nèi)存的分 配。static的應(yīng)用主要有兩點(diǎn): static屬性用于公共變最
52、的保存 使用static方法用于取得類的實(shí)例化操作,或者一些不希望有類的實(shí)例化的應(yīng)用單例設(shè)計(jì)當(dāng)構(gòu)造方法私冇化時(shí),該類將無法通過構(gòu)造方法被實(shí)例化,此時(shí)只能在該類的內(nèi)部實(shí)例化, 然示通過該實(shí)例化來實(shí)例化其他對(duì)象。由于此時(shí)該類無法實(shí)例化,則要將類內(nèi)部的實(shí)例化送 出去,應(yīng)該使用static關(guān)鍵字。如下代碼:class testprivate int num;private string name;private test()system.out.println("構(gòu)造 test class");this.num = 100; = "null"p
53、ublic static test test = new test();public void setnum(int num)this, num = num;public void setname(string name) = n ame;public void print()system.out.println("name is:"++" num is: "+this.num);public class demopublic static void main(string arg)test testl = test.
54、test;test test2 = test.test;testl.print(); /null 100test2.print(); /null 100testl.setname("tree");testl.print(); /tree 100test2.print(); /tree 100說明,此時(shí)test被static修飾說明他是全局變量,是類屬性,地址只有一個(gè),所以通過它實(shí) 例化的對(duì)象均指向同一個(gè)地址。也就是單例。單例設(shè)計(jì)的完整代碼如下:由于test也是屬性,它應(yīng)該隱藏成private,同時(shí)為了表示是單例設(shè)計(jì),還要加± final關(guān)鍵 字:class testprivate int num;private string name;private test()system.out.println("構(gòu)造 test class");this.num = 100; = "null"private static final test test = new test();public static test gettest()return test;publi
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶機(jī)電職業(yè)技術(shù)大學(xué)《傳感器及其應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025會(huì)所租賃合同范本
- 中國戲曲學(xué)院《創(chuàng)業(yè)管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州鐵路職業(yè)技術(shù)學(xué)院《局域網(wǎng)及組網(wǎng)技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 工業(yè)生產(chǎn)中實(shí)驗(yàn)室環(huán)境的監(jiān)測與維護(hù)
- 薦六一兒童節(jié)開幕詞
- 競選班干部的發(fā)言稿(集合15篇)
- 2025年統(tǒng)編版必修3物理上冊(cè)階段測試試卷
- 浙江警官職業(yè)學(xué)院《城市史與鄉(xiāng)村史》2023-2024學(xué)年第一學(xué)期期末試卷
- 提升學(xué)校信息管理的綜合效益
- 江蘇省南京市聯(lián)合體2024-2025學(xué)年九年級(jí)上學(xué)期期中學(xué)情分析化學(xué)試卷(無答案)
- 保安員考試模擬800題及答案
- 2024年衛(wèi)生院中層干部行政管理考核細(xì)則范本(三篇)
- 獸藥經(jīng)營管理制度
- 第一單元 史前時(shí)期 原始社會(huì)與中華文明的起源 單元檢測試題 2024-2025學(xué)年統(tǒng)編版七年級(jí)歷史上冊(cè)
- 2024年勞務(wù)工資管理制度范例(三篇)
- 計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 廣西南寧市(2024年-2025年小學(xué)四年級(jí)語文)部編版期末考試(上學(xué)期)試卷及答案
- 紅歌大家唱1鋼琴·電子琴彈唱36首簡譜版-12734313
- 2024中國華電集團(tuán)限公司校園招聘高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 買賣山地合同模板
評(píng)論
0/150
提交評(píng)論