07-面向?qū)ο?-Linux學(xué)習(xí)資料_第1頁(yè)
07-面向?qū)ο?-Linux學(xué)習(xí)資料_第2頁(yè)
07-面向?qū)ο?-Linux學(xué)習(xí)資料_第3頁(yè)
07-面向?qū)ο?-Linux學(xué)習(xí)資料_第4頁(yè)
07-面向?qū)ο?-Linux學(xué)習(xí)資料_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7天面向?qū)ο?今日任務(wù)理解封裝的思想,會(huì)使用private關(guān)鍵字隱藏類的屬性和行為;理解并掌握構(gòu)造函數(shù)的用法;理解并掌握this關(guān)鍵字的用法理解掌握static關(guān)鍵字的用法面向?qū)ο笥腥齻€(gè)基本特征:封裝、繼承、多態(tài)!封裝封裝的概念封裝就是包裝的意思,就是會(huì)隱藏里面的細(xì)節(jié);好處:安全;保證私密性;使用方便;封裝的好處組裝電腦;臺(tái)式機(jī):電源,CPU,主板,硬盤,內(nèi)存條,顯卡,風(fēng)扇,機(jī)箱,顯示器,……主機(jī)中的東西都要組裝在主板上;需要使用機(jī)箱把里面的所有東西都包裝起來,目的是:保證安全性以及易用性;Java代碼中的封裝:函數(shù):包裝類一段功能代碼;類:包裝類一些成員變量和函數(shù);使用它們可以提高程序的復(fù)用性;所以總結(jié):封裝的好處:提高安全性和易用性;提高程序復(fù)用性;封裝的實(shí)現(xiàn)需求:描述學(xué)生的信息;實(shí)現(xiàn)代碼:/* 需求:描述學(xué)生的信息; 找對(duì)象:學(xué)生; 描述對(duì)象: 學(xué)生{ 屬性:姓名;學(xué)號(hào);年齡…… 行為: 學(xué)習(xí)(){} 吃飯(){} 睡覺(){} } 使用Java代碼描述: Java中使用類描述一類事物,在類中使用成員變量描述事物的屬性, 使用函數(shù)描述事物的行為;*/classStudent{ /* 使用成員變量描述屬性 */ Stringname;//姓名,是一個(gè)字符串 intnum;//學(xué)號(hào),是一個(gè)整數(shù) intage;//年齡,也是一個(gè)整數(shù) /* 使用函數(shù)描述行為 */ //吃飯 voideat(){ System.out.println(name+"吃水餃!"); } //睡覺 voidsleep(){ System.out.println(name+"zzZZZ"); } //學(xué)習(xí) voidstudy(){ System.out.println(name+"在敲代碼……"); }}//測(cè)試類classTest{ //測(cè)試學(xué)生對(duì)象的屬性和功能 publicstaticvoidtestStudent(Studentstu){ System.out.println("姓名:"++";學(xué)號(hào):"+stu.num+";年齡:"+stu.age); stu.sleep(); stu.eat(); stu.study(); } publicstaticvoidmain(String[]args) { //創(chuàng)建一個(gè)學(xué)生對(duì)象 Studentstu=newStudent(); //將對(duì)象stu的名字屬性賦值為小明 ="小明"; stu.num=100; stu.age=18; //調(diào)用函數(shù)測(cè)試學(xué)生對(duì)象的屬性和功能 testStudent(stu); }}問題:直接操作對(duì)象的屬性值,容易出現(xiàn)錯(cuò)誤的數(shù)據(jù),造成程序的不安全;為了提高數(shù)據(jù)的安全性,必須避免可以直接操作對(duì)象的成員變量;要想外界不能直接操作類的某一個(gè)成員,需要使用關(guān)鍵字private修飾;private:訪問權(quán)限修飾符,可以修飾函數(shù)和成員變量,表示被修飾的內(nèi)容是私有的,只能在定義這個(gè)成員的類里面使用;public:訪問權(quán)限修飾符,可以修飾函數(shù)和成員變量、類,表示被修飾的內(nèi)容是公共的,公開的,在所有地方都可以訪問這些成員;注意:如果使用public修飾一個(gè)類,類名必須和Java的文件名相同;private關(guān)鍵字的使演示:因?yàn)槌蓡T變量私有化了,外界不能直接訪問,但是正確的操作還需要改變或獲取這些數(shù)據(jù),就需要這個(gè)類自己提供公開的更改和獲取成員變量的方法:一般有一個(gè)規(guī)范:假如要操作的成員變量是:intage;公開的獲取方法:publicintgetAge();公開的設(shè)置方法:publicvoidsetAge(inta);這兩個(gè)方法一般又叫做getter和setter方法;classStudent{ /* 使用成員變量描述屬性 */ Stringname;//姓名,是一個(gè)字符串 intnum;//學(xué)號(hào),是一個(gè)整數(shù) /* 因?yàn)橹苯硬僮髂挲g屬性,容易出現(xiàn)錯(cuò)誤數(shù)據(jù),所以要把這個(gè)成員變量隱藏起來, 不讓別人直接操作 */ privateintage;//年齡,也是一個(gè)整數(shù) //公開的獲取方法 publicintgetAge(){ returnage; } //公開的設(shè)置方法 publicvoidsetAge(inta){ if(a>0&&a<150){ age=a; }else{ System.out.println("年齡"+a+"不合法,正確的范圍是0到150之間!"); //正確的做法,這里出現(xiàn)非法數(shù)據(jù)后不能讓程序繼續(xù)往下走,應(yīng)該結(jié)束程序 System.exit(0);//退出JVM } } /* 使用函數(shù)描述行為 */ //吃飯 voideat(){ System.out.println(name+"吃水餃!"); } //睡覺 voidsleep(){ System.out.println(name+"zzZZZ"); } //學(xué)習(xí) voidstudy(){ System.out.println(name+"在敲代碼……"); }}//測(cè)試類classTest{ //測(cè)試學(xué)生對(duì)象的屬性和功能 publicstaticvoidtestStudent(Studentstu){ System.out.println("姓名:"++";學(xué)號(hào):"+stu.num+";年齡:"+stu.getAge()); stu.sleep(); stu.eat(); stu.study(); } publicstaticvoidmain(String[]args) { //創(chuàng)建一個(gè)學(xué)生對(duì)象 Studentstu2=newStudent(); ="?;?; stu2.num=1;// stu2.age=168; stu2.setAge(168); //調(diào)用函數(shù)測(cè)試學(xué)生對(duì)象的屬性和功能 testStudent(stu2); }}結(jié)論:封裝可以隱藏事物的實(shí)現(xiàn)細(xì)節(jié),提高了程序的安全性;同時(shí)如果外界需要操作被隱藏的細(xì)節(jié),還需要提供公開的訪問方法;構(gòu)造函數(shù)構(gòu)造函數(shù)的引入在現(xiàn)實(shí)生活中,事物一般一旦創(chuàng)建,都具有各種屬性值,不需要也不應(yīng)該后期再賦值;Java程序是解決現(xiàn)實(shí)的問題的,也應(yīng)該模擬這種情況,就需要在創(chuàng)建對(duì)象的時(shí)候就給對(duì)象的成員變量賦各種值;概念構(gòu)造函數(shù),又叫做構(gòu)造器,就是在對(duì)象創(chuàng)建的時(shí)候由JVM自動(dòng)調(diào)用的函數(shù);作用構(gòu)造函數(shù)就是用來在創(chuàng)建對(duì)象的時(shí)候給對(duì)象的成員變量賦值用的;寫法修飾符:可以使用訪問權(quán)限修飾符修飾(public,private);注意:不能使用static修飾;返回值類型:沒有返回值類型(連void都不寫);函數(shù)名:必須和類名完全一致(每個(gè)字母包括大小寫都必須一模一樣);參數(shù)列表:構(gòu)造函數(shù)可以重載,參數(shù)列表根據(jù)具體需求而定;return語句:所有函數(shù)都需要通過return語句結(jié)束出棧;只是構(gòu)造函數(shù)可以省略不寫(一般都不會(huì)寫);調(diào)用構(gòu)造函數(shù)的執(zhí)行過程默認(rèn)構(gòu)造函數(shù)實(shí)際上,所有類中都至少有一個(gè)構(gòu)造函數(shù);創(chuàng)建一個(gè)類的對(duì)象,都必須要執(zhí)行它的構(gòu)造函數(shù);如果一個(gè)類中沒有書寫構(gòu)造函數(shù),編譯器會(huì)幫我們自動(dòng)添加一個(gè)無參的構(gòu)造函數(shù),這個(gè)函數(shù)叫做默認(rèn)構(gòu)造函數(shù);原來前面創(chuàng)建一個(gè)對(duì)象,都是在調(diào)用默認(rèn)構(gòu)造函數(shù)創(chuàng)建對(duì)象;如果試圖調(diào)用一個(gè)類中不存在的構(gòu)造函數(shù),就會(huì)報(bào)錯(cuò);解決的辦法是:在類中添加需要的構(gòu)造函數(shù);在調(diào)用的地方調(diào)用有的構(gòu)造函數(shù);構(gòu)造函數(shù)的使用細(xì)節(jié) 如果使用private修飾構(gòu)造函數(shù),會(huì)有什么結(jié)果?應(yīng)用等到單例設(shè)計(jì)模式講;構(gòu)造函數(shù)能不能調(diào)用一般函數(shù)?答案:可以!一般函數(shù)能不能調(diào)用構(gòu)造函數(shù)?答:不能;因?yàn)闃?gòu)造函數(shù)是創(chuàng)建對(duì)象時(shí)由JVM自動(dòng)調(diào)用的;構(gòu)造函數(shù)和一般函數(shù)的區(qū)別從書寫格式上看:構(gòu)造函數(shù):沒有返回值類型,連void都不能寫;構(gòu)造函數(shù)的函數(shù)名必須和類名一樣;不能用static關(guān)鍵字修飾;一般函數(shù):必須有一個(gè)返回值類型(是和構(gòu)造函數(shù)最主要的區(qū)別);一般函數(shù)名不要和類名一樣;可以用static修飾,也可以不要;如果一個(gè)函數(shù)函數(shù)名和類名一樣,是否是構(gòu)造函數(shù),就要看有沒有返回值類型;沒有,就是構(gòu)造函數(shù);從調(diào)用方式上看:構(gòu)造函數(shù):創(chuàng)建對(duì)象時(shí)由JVM調(diào)用的;一般函數(shù)不能調(diào)用構(gòu)造函數(shù);一般函數(shù):哪里需要哪里就可以調(diào)用;構(gòu)造函數(shù)里面也可以調(diào)用一般函數(shù);從作用上看:構(gòu)造函數(shù):主要用來在創(chuàng)建對(duì)象的時(shí)候,給對(duì)象的成員變量賦值用的;一般函數(shù):實(shí)現(xiàn)某個(gè)具體功能;從一個(gè)對(duì)象可以調(diào)用次數(shù)上看:構(gòu)造函數(shù):只有創(chuàng)建對(duì)象時(shí)會(huì)調(diào)用一次;一般函數(shù):沒有次數(shù)限制;構(gòu)造函數(shù)之間的調(diào)用構(gòu)造函數(shù)中可以調(diào)用其他構(gòu)造函數(shù),不能直接通過函數(shù)名調(diào)用,而是需要使用this關(guān)鍵字來實(shí)現(xiàn);格式:this(參數(shù));構(gòu)造函數(shù)中調(diào)用其他構(gòu)造函數(shù)的內(nèi)存原理:this調(diào)用構(gòu)造函數(shù),必須寫在構(gòu)造函數(shù)的第一行;調(diào)用其他構(gòu)造函數(shù),要避免交叉調(diào)用(直接或者間接);直接遞歸調(diào)用:構(gòu)造函數(shù)總結(jié)概念: 創(chuàng)建對(duì)象時(shí)由JVM自動(dòng)調(diào)用的函數(shù)作用: 在創(chuàng)建對(duì)象的時(shí)候給對(duì)象的成員變量賦值;寫法:修飾符:可以用訪問權(quán)限修飾符(public、private)修飾;不能用static修飾;返回值類型:沒有返回值類型,連void都沒有;函數(shù)名:必須和類名完全一樣;參數(shù)列表:可以重載,具體根據(jù)要求而定;return語句:有,但是一般都不需要寫;執(zhí)行過程:創(chuàng)建對(duì)象時(shí),JVM遇到new關(guān)鍵字,首先要到堆內(nèi)存中開辟對(duì)象空間;然后在對(duì)象空間中為成員變量分配空間,賦默認(rèn)值;然后再根據(jù)new關(guān)鍵字后面的內(nèi)容,調(diào)用相應(yīng)的構(gòu)造函數(shù)進(jìn)棧執(zhí)行;等到構(gòu)造函數(shù)執(zhí)行結(jié)束,對(duì)象創(chuàng)建完成;默認(rèn)構(gòu)造函數(shù):所有類中都至少有一個(gè)構(gòu)造函數(shù),如果一個(gè)類中沒有書寫構(gòu)造函數(shù),編譯器就會(huì)幫我們添加一個(gè)無參的構(gòu)造函數(shù),這個(gè)構(gòu)造函數(shù)就是默認(rèn)構(gòu)造函數(shù);一旦類中書寫了構(gòu)造函數(shù),就不會(huì)再有默認(rèn)構(gòu)造函數(shù);使用細(xì)節(jié):構(gòu)造函數(shù)可以調(diào)用一般函數(shù);一般函數(shù)不能調(diào)用構(gòu)造函數(shù);構(gòu)造函數(shù)可以調(diào)用構(gòu)造函數(shù),不能通過函數(shù)名調(diào)用,必須通過this關(guān)鍵字調(diào)用;在構(gòu)造函數(shù)中使用this語句調(diào)用其他構(gòu)造函數(shù),this語句必須寫在構(gòu)造函數(shù)的第一行;構(gòu)造函數(shù)之間相互調(diào)用,不能出現(xiàn)交叉調(diào)用(遞歸調(diào)用);什么時(shí)候需要使用構(gòu)造函數(shù)?只要?jiǎng)?chuàng)建對(duì)象,都要使用構(gòu)造函數(shù);什么時(shí)候需要自定義構(gòu)造函數(shù)?如果希望在創(chuàng)建對(duì)象時(shí)就給成員變量賦值,就需要自定義構(gòu)造函數(shù);使用構(gòu)造函數(shù),可以在創(chuàng)建對(duì)象的時(shí)候就給對(duì)象的成員變量賦初始值,那么,有了構(gòu)造函數(shù),還需要提供get和set方法嗎?需要;因?yàn)闃?gòu)造函數(shù)只能在創(chuàng)建對(duì)象的時(shí)候賦值一次;如果以后想要改變這個(gè)值,就需要用到set函數(shù);如果需要獲取被封裝的值,就需要用到get函數(shù);this關(guān)鍵字this的作用this:這個(gè),在Java中就表示對(duì)自身所屬對(duì)象的引用;相當(dāng)于現(xiàn)實(shí)中人們說的“我”字;哪個(gè)對(duì)象調(diào)用的this,this就指向那個(gè)對(duì)象;this的應(yīng)用在構(gòu)造函數(shù)中調(diào)用其他構(gòu)造函數(shù);區(qū)分成員變量和局部變量;this區(qū)分成員變量和局部變量的原理:this練習(xí)需求:創(chuàng)建一個(gè)描述人的類,并提供比較是否是同齡人的功能;/* 需求:創(chuàng)建一個(gè)描述人的類,并提供比較是否是同齡人的功能; 找對(duì)象: 人 描述對(duì)象: 人{ 屬性:年齡; 功能:比較是否是同齡人的功能; 是否是同齡人(其他人){ 返回自己的年齡==其他人的年齡; } }*/classPerson{ privateintage;//人的年齡 publicvoidsetAge(intage){ this.age=age; } publicintgetAge(){ returnthis.age;//因?yàn)檫@個(gè)函數(shù)中沒有名為age的局部變量,所以這里的this可以省略 } //比較是否是同齡人 publicbooleancompare(Personother){ if(this.age==other.age){ returntrue; }else{ returnfalse; }// returnthis.age==p.age; }}classTest{ publicstaticvoidmain(String[]args) { //創(chuàng)建一個(gè)人 Personp1=newPerson(); p1.setAge(17); //在創(chuàng)建一個(gè)人 Personp2=newPerson(); p2.setAge(17); //讓p1和p2比較,是否是同齡人 booleanb=pare(p2); if(b){ System.out.println("是同齡人!"); }else{ System.out.println("不是同齡人!"); } }}static關(guān)鍵字static簡(jiǎn)介static:靜態(tài)的;用于修飾類的成員(成員變量、函數(shù)),表示被修飾的成員是靜態(tài)的;注意:不能修飾構(gòu)造函數(shù);使用static修飾的函數(shù),叫做靜態(tài)函數(shù);修飾的成員變量叫做靜態(tài)成員變量;靜態(tài)函數(shù)概念:被static關(guān)鍵字修飾的函數(shù)就是靜態(tài)函數(shù);格式:直接將static關(guān)鍵字寫在函數(shù)的返回值類型前面;使用方法:靜態(tài)函數(shù)和類的對(duì)象無關(guān),直接通過類名調(diào)用內(nèi)存原理:Java的內(nèi)存分布:寄存器;本地方法區(qū);棧;堆;方法區(qū);方法區(qū):靜態(tài)的內(nèi)容和class;使用細(xì)節(jié):靜態(tài)函數(shù)不能調(diào)用非靜態(tài)函數(shù)和非靜態(tài)成員變量非靜態(tài)函數(shù)可以調(diào)用靜態(tài)函數(shù)構(gòu)造函數(shù)不能是靜態(tài)的因?yàn)闃?gòu)造函數(shù)就是創(chuàng)建對(duì)象的時(shí)候給對(duì)象的成員變量賦值用的;如果是靜態(tài)的,就不需要對(duì)象就可以使用,那么構(gòu)造函數(shù)就沒有存在意義;靜態(tài)函數(shù)中不能使用和對(duì)象有關(guān)的關(guān)鍵字:this;super;因?yàn)閠his是保存指向調(diào)用它的那個(gè)對(duì)象的引用的,而靜態(tài)函數(shù)時(shí)沒有對(duì)象的,所以在靜態(tài)函數(shù)里面不能使用this關(guān)鍵字;應(yīng)用練習(xí):需求:創(chuàng)建一個(gè)描述學(xué)生的類,并提供學(xué)習(xí)的功能;改進(jìn)的做法:結(jié)論:如果一個(gè)函數(shù)沒有使用到和對(duì)象有關(guān)的東西,就應(yīng)該定義為靜態(tài)函數(shù);可以提高效率,降低內(nèi)存浪費(fèi);靜態(tài)成員變量概念:使用static關(guān)鍵字修飾的成員變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論