




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章面向?qū)ο蟪绦蛟O(shè)計(jì)(上)1教學(xué)目標(biāo)(1) 理解面向過程抽象與面向?qū)ο蟪橄?2) 理解面向?qū)ο笕筇卣?3) 理解類與對(duì)象的關(guān)系,能夠定義類、創(chuàng)建對(duì)象和訪問對(duì)象成員(4) 理解UML類圖(5) 理解靜態(tài)成員概念,能使用靜態(tài)成員(6) 理解模塊、包、public、private等對(duì)訪問權(quán)限的影響(7) 理解數(shù)據(jù)域封裝(8) 理解變量作用域(9) 理解和應(yīng)用對(duì)象作為方法參數(shù)和作為方法返回值,能使用var定義局部變量。(10) 理解對(duì)象數(shù)組,能使用對(duì)象數(shù)組(11) 理解this關(guān)鍵字的含義,能使用this引用隱藏?cái)?shù)據(jù)域和調(diào)用構(gòu)造方法(12) 能使用基本數(shù)據(jù)類型包裝類、BigInteger類、BigDecimal類、Date類2動(dòng)機(jī)在信息技術(shù)發(fā)展過程中,早期的軟件規(guī)模較小,面向過程的軟件開發(fā)方法就能很好地解決。隨著,軟件規(guī)模越來越大,問題越來越復(fù)雜,面向過程的軟件開發(fā)方法不足以應(yīng)對(duì)大規(guī)模和復(fù)雜性高的軟件系統(tǒng)開發(fā)。面向過程的編程是對(duì)任務(wù)的過程分解,解決問題的思路是“走一步,看一步,遇到問題,解決問題”。面向?qū)ο蠼鉀Q問題并不關(guān)心問題處理過程,而是關(guān)注解決問題過程中都有哪些對(duì)象參與,給參與的對(duì)象分配相應(yīng)的職責(zé)即可。3引入面向?qū)ο蟪绦蛟O(shè)計(jì)?。。?nèi)容46.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類內(nèi)容56.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.1面向?qū)ο蟾攀雒嫦驅(qū)ο螅∣bjectOriented,簡稱OO)是一種軟件開發(fā)方法,也是一種編程范式,還是一種對(duì)現(xiàn)實(shí)世界進(jìn)行理解和抽象的方法把相關(guān)的數(shù)據(jù)和方法封裝成一個(gè)整體,以更加自然的方式對(duì)現(xiàn)實(shí)世界進(jìn)行建模三大特征:封裝繼承多態(tài)66.1面向?qū)ο蟾攀?6.1.1面向過程與面向?qū)ο蟮某橄?.1.2封裝6.1.3繼承6.1.4多態(tài)6.1面向?qū)ο蟾攀?6.1.1面向過程與面向?qū)ο蟮某橄?.1.2封裝6.1.3繼承6.1.4多態(tài)6.1.1面向過程與面向?qū)ο蟮某橄蟪橄螅和高^事物的表面現(xiàn)象抽取事物本質(zhì)特征,同時(shí)舍棄事物非本質(zhì)特征的過程面向過程的抽象功能分解數(shù)據(jù)和過程是分離的,兩者關(guān)系由程序員維護(hù)多個(gè)過程可能修改和使用同一數(shù)據(jù)96.1.1面向過程與面向?qū)ο蟮某橄笕祟愑^察現(xiàn)實(shí)世界時(shí),會(huì)把現(xiàn)實(shí)世界的事物分為一個(gè)個(gè)實(shí)體,每個(gè)實(shí)體能做什么,它和其他實(shí)體協(xié)作做了什么,從而理解現(xiàn)實(shí)世界的運(yùn)作。面向?qū)ο蟪橄髲默F(xiàn)實(shí)世界問題域抽象出一個(gè)個(gè)相互獨(dú)立的對(duì)象,表示現(xiàn)實(shí)世界的實(shí)體,弄清楚每個(gè)實(shí)體具有什么屬性,具有哪些動(dòng)態(tài)特征,會(huì)與哪些實(shí)體進(jìn)行交互等面向?qū)ο蟪橄髮?shù)據(jù)和操作封裝到一個(gè)個(gè)能動(dòng)的對(duì)象中,數(shù)據(jù)和操作之間的對(duì)應(yīng)關(guān)系不再由程序員來維護(hù),而由系統(tǒng)自動(dòng)維護(hù)106.1.1面向過程與面向?qū)ο蟮某橄髲?fù)雜性解決:在面向?qū)ο笙到y(tǒng)中,一些獨(dú)立的對(duì)象依據(jù)某種構(gòu)造結(jié)合在一起,能形成新的、特有的屬性和功能,可以形成一個(gè)更大更復(fù)雜的對(duì)象。這個(gè)更大更復(fù)雜的對(duì)象也可以成為另一個(gè)更大對(duì)象的一個(gè)組成部分,從而構(gòu)造出一個(gè)更為龐大的系統(tǒng)例:一輛汽車一般由發(fā)動(dòng)機(jī)、底盤、車身、電氣設(shè)備等組成,而一個(gè)發(fā)動(dòng)機(jī)、一個(gè)底盤、一個(gè)車身、一個(gè)電氣設(shè)備等本身也是一個(gè)對(duì)象,它們裝配在一起可以形成更為復(fù)雜、具有獨(dú)特功能的一個(gè)汽車對(duì)象116.1.1面向過程與面向?qū)ο蟮某橄笕筇卣鳎悍庋b性:從對(duì)象的外部來看,除了它用來與外界進(jìn)行交互的接口之外,對(duì)象內(nèi)部就是一個(gè)黑匣子,外部看不到對(duì)象的實(shí)現(xiàn)細(xì)節(jié)繼承性:對(duì)象可以衍生出后代,后代對(duì)象將擁有父輩的全部能力多態(tài)性:一個(gè)對(duì)象變量在程序運(yùn)行的不同時(shí)刻可以具有多種不同形態(tài),即指向不同類型的對(duì)象,從而具有不同的功能12136-1面向?qū)ο蟮奶卣鞑话ǎǎ┓庋b性繼承性多樣性多態(tài)性ABCD提交單選題1分6.1面向?qū)ο蟾攀?46.1.1面向過程與面向?qū)ο蟮某橄?.1.2封裝6.1.3繼承6.1.4多態(tài)6.1.2封裝封裝(Encapsulation):把從現(xiàn)實(shí)世界中抽象出來的客觀實(shí)體封裝成類,并且類可以隱藏自己內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),讓外界不可見,并把需要提供給外界的接口向外發(fā)布封裝體現(xiàn)了信息隱藏(informationhiding)在程序設(shè)計(jì)中,類(class)是創(chuàng)建對(duì)象的模板,是一組對(duì)象公共屬性和行為的抽象。一個(gè)類的實(shí)例就是該類的一個(gè)對(duì)象在抽象一組對(duì)象(屬于某一類)的公共屬性和行為時(shí),要考慮現(xiàn)實(shí)世界問題域。大學(xué)生對(duì)象在不同的問題域中屬性和行為是不一樣的當(dāng)問題域是高校教務(wù)管理系統(tǒng)時(shí),大學(xué)生對(duì)象的屬性可以包括:學(xué)號(hào)、姓名、年齡、籍貫、入學(xué)年份、專業(yè)、學(xué)分績、已修課程等,其行為可以包括:查詢學(xué)號(hào)、查詢專業(yè)、查詢學(xué)分績、轉(zhuǎn)專業(yè)、選課、退課、退學(xué)等當(dāng)問題域是高校財(cái)務(wù)管理系統(tǒng)時(shí),大學(xué)生對(duì)象的屬性可以包括:學(xué)號(hào)、姓名、當(dāng)前應(yīng)繳費(fèi)用、是否繳納、歷史繳費(fèi)記錄等,其行為可以包括:查詢應(yīng)繳費(fèi)用清單、查詢繳費(fèi)狀態(tài)、查詢歷史繳費(fèi)記錄、生成當(dāng)前繳費(fèi)收據(jù)等156.1面向?qū)ο蟾攀?66.1.1面向過程與面向?qū)ο蟮某橄?.1.2封裝6.1.3繼承6.1.4多態(tài)6.1.3繼承繼承(Inheritance)是指一個(gè)類可以無需重新編寫現(xiàn)有類的代碼而具備現(xiàn)有類的所有功能,并在此基礎(chǔ)上可以擴(kuò)展通過繼承所創(chuàng)建的新類被稱為“派生類”、“子類”、“擴(kuò)展類”被繼承的類被稱為“基類”、“父類”、“超類”繼承體現(xiàn)了現(xiàn)實(shí)世界的分類體系,表達(dá)了“是一種”關(guān)系,符合人類的思維方式繼承可以分為單繼承和多繼承。單繼承就是一個(gè)類只有一個(gè)直接父類。而多繼承是指一個(gè)類有多個(gè)直接父類。Java語言是單繼承語言,C++語言是多繼承語言176.1.3繼承繼承(Inheritance)是指一個(gè)類可以無需重新編寫現(xiàn)有類的代碼而具備現(xiàn)有類的所有功能,并在此基礎(chǔ)上可以擴(kuò)展186.1面向?qū)ο蟾攀?96.1.1面向過程與面向?qū)ο蟮某橄?.1.2封裝6.1.3繼承6.1.4多態(tài)6.1.4多態(tài)多態(tài)(Polymorphism)是指一個(gè)對(duì)象引用變量在程序運(yùn)行的不同時(shí)刻具有多種形態(tài)具體來講,就是一個(gè)父類類型的引用變量能夠指向其任何不同子類的一個(gè)實(shí)例,從而表現(xiàn)出相應(yīng)子類實(shí)例的行為。假設(shè)定義了一個(gè)引用變量vehicle指向一個(gè)交通工具類,該引用變量可以在程序運(yùn)行的某個(gè)時(shí)刻指向陸地交通工具類的一個(gè)實(shí)例,也可以指向水上交通工具類或空中交通工具類的一個(gè)實(shí)例,還可以指向火車類、汽車類等的一個(gè)實(shí)例當(dāng)一個(gè)方法的形式參數(shù)是交通工具類對(duì)象時(shí),那么該方法可以接受的實(shí)際參數(shù)可以是其任一子類的對(duì)象。這樣,相同的方法可以接受不同類型的參數(shù),表現(xiàn)出不同的行為。換句話說,這就是同一操作作用于不同類的實(shí)例,產(chǎn)生不同的執(zhí)行結(jié)果。這也是多態(tài)性的一種外在表現(xiàn)。20內(nèi)容216.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.2類與對(duì)象對(duì)象(Object):代表現(xiàn)實(shí)世界問題域中可明確標(biāo)識(shí)的一個(gè)實(shí)體??陀^存在的事物,如:一個(gè)學(xué)生、一輛小轎車等。抽象事件,如一場比賽、一次會(huì)議等每個(gè)對(duì)象都有自己獨(dú)特的標(biāo)識(shí)、狀態(tài)、行為。對(duì)象標(biāo)識(shí)(又稱為對(duì)象ID):是程序中唯一標(biāo)識(shí)一個(gè)對(duì)象的有效標(biāo)識(shí)符對(duì)象屬性(state,又稱為特征或狀態(tài)):由具有當(dāng)前值的數(shù)據(jù)域來表示的。如一個(gè)矩形對(duì)象的數(shù)據(jù)域:寬度width為5.5和高度height為7.5,它們描述了該矩形對(duì)象的當(dāng)前屬性或狀態(tài)對(duì)象行為(behavior,亦稱為對(duì)象操作):對(duì)象操作體現(xiàn)了對(duì)象的能動(dòng)性和功能,在程序設(shè)計(jì)語言中,對(duì)象操作由方法(或函數(shù))來定義。如矩形對(duì)象:getArea()、getPerimeter()。類(class):一組具有相同屬性和行為的對(duì)象的抽象。類是創(chuàng)建對(duì)象的模板。226.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問6.2類與對(duì)象類是一個(gè)模板,用來定義一組相同類型對(duì)象具有的屬性和行為。一個(gè)對(duì)象是類的一個(gè)實(shí)例(instance),對(duì)象和實(shí)例具有相同含義創(chuàng)建實(shí)例的過程稱為實(shí)例化(Instantiation)類的定義包括:屬性(數(shù)據(jù)域):用變量定義,成員變量行為(動(dòng)作):用方法定義,成員方法構(gòu)造方法:用于創(chuàng)建與初始化一個(gè)對(duì)象類定義一般形式236.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問6.2類與對(duì)象示例:程序清單6-1SimpleRect.java246.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問在面向?qū)ο蠓治龊驮O(shè)計(jì)過程中,程序員可以使用UML(UnifiedModellingLanguage,統(tǒng)一建模語言)的圖形符號(hào)進(jìn)行建模,協(xié)助程序員進(jìn)行可視化分析256-2()表示一個(gè)在真實(shí)世界中能被明確區(qū)分的實(shí)體。一個(gè)類一個(gè)對(duì)象一個(gè)方法一個(gè)數(shù)據(jù)域ABCD提交單選題1分6.2類與對(duì)象對(duì)象可以先聲明后創(chuàng)建,聲明的一般形式是:類名對(duì)象名;創(chuàng)建對(duì)象的一般形式是:對(duì)象名=new類名(實(shí)參列表);對(duì)象的聲明和創(chuàng)建也可以結(jié)合在一起,其一般形式是:類名對(duì)象名=new類名(實(shí)參列表);示例:266.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問SimpleRectrect1;rect1=newSimpleRect(3.5,4.5);SimpleRectrect1=newSimpleRect(3.5,4.5);6.2類與對(duì)象對(duì)象的創(chuàng)建涉及引用類型、構(gòu)造方法、數(shù)據(jù)域默認(rèn)值1、引用類型用戶定義的類是一種用戶自定義的數(shù)據(jù)類型,也是一種引用類型(referencetype)。引用類型的變量是一個(gè)合法的標(biāo)識(shí)符,被稱為對(duì)象引用變量(referencevariable),也被稱為對(duì)象名。對(duì)象實(shí)體:‘new構(gòu)造方法’在內(nèi)存堆中為新創(chuàng)建的對(duì)象分配一塊內(nèi)存并初始化該對(duì)象的數(shù)據(jù)域,這個(gè)初始化之后的內(nèi)存塊被稱為對(duì)象實(shí)體。276.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問引用類型變量代表的內(nèi)存位置存儲(chǔ)的值是一個(gè)引用值基本數(shù)據(jù)類型變量代表的內(nèi)存位置存儲(chǔ)的值是基本類型的值6.2類與對(duì)象286.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問基本類型變量賦值將一個(gè)基本數(shù)據(jù)類型變量a賦給另一個(gè)基本數(shù)據(jù)類型變量b時(shí),即b=a,可以直接將a的值賦給b。例如,假設(shè)已知i為2,j為0,執(zhí)行j=i,這時(shí),直接將i的值2賦給j,j也變?yōu)?賦值前賦值后6.2類與對(duì)象296.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問引用變量賦值6.2類與對(duì)象2、構(gòu)造方法(1)構(gòu)造方法必須與所在類同名,大小寫一致。(2)構(gòu)造方法沒有返回值類型,也不能加void關(guān)鍵字。(3)構(gòu)造方法只能在創(chuàng)建一個(gè)對(duì)象時(shí)由關(guān)鍵字new調(diào)用。構(gòu)造方法允許重載,可以有多個(gè)同名但是方法簽名不一樣的構(gòu)造方法。示例:程序清單6-1SimpleRect.java通常,一個(gè)類會(huì)提供一個(gè)沒有形式參數(shù)的構(gòu)造方法(例如:SimpleRect()),這樣的構(gòu)造方法被稱為無參構(gòu)造方法。306.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問316-3以下有關(guān)構(gòu)造方法的說法,正確的是:()一個(gè)類的構(gòu)造方法可以有多個(gè)構(gòu)造方法在類聲明時(shí)被調(diào)用構(gòu)造方法只能由對(duì)象中的其它方法調(diào)用。構(gòu)造方法可以和類同名,也可以和類名不同ABCD提交單選題1分6.2類與對(duì)象提問:如果一個(gè)類沒有定義構(gòu)造方法,那么能不能創(chuàng)建該類的對(duì)象呢?能。這是因?yàn)镴ava編譯器對(duì)源程序進(jìn)行編譯后,會(huì)給一個(gè)沒有明確定義任何構(gòu)造方法的類自動(dòng)提供一個(gè)默認(rèn)構(gòu)造方法(defaultconstructor)。默認(rèn)構(gòu)造方法是一個(gè)方法體為空的無參構(gòu)造方法當(dāng)一個(gè)類明確定義了一個(gè)或多個(gè)構(gòu)造方法時(shí),默認(rèn)構(gòu)造方法就不再被自動(dòng)提供326.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問6.2類與對(duì)象3、數(shù)據(jù)域默認(rèn)值當(dāng)一個(gè)類通過默認(rèn)構(gòu)造方法(方法體為空)創(chuàng)建對(duì)象時(shí),該類的數(shù)據(jù)域是如何初始化的?在Java語言中,一個(gè)類的數(shù)據(jù)域是有默認(rèn)值的。數(shù)值類型數(shù)據(jù)域的默認(rèn)值是零值布爾類型數(shù)據(jù)域的默認(rèn)值是false字符類型數(shù)據(jù)域的默認(rèn)值是\u0000引用類型數(shù)據(jù)域的默認(rèn)值是null示例:程序清單6-2Person.java、程序清單6-3TestPerson.java對(duì)象成員訪問操作符(objectmemberaccessoperator),通過“對(duì)象名.成員變量”的方式訪問person對(duì)象的各個(gè)數(shù)據(jù)域,得到其默認(rèn)值。336.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問6.2類與對(duì)象在對(duì)象創(chuàng)建之后,每個(gè)對(duì)象具有自己的數(shù)據(jù)域,可以通過對(duì)象成員訪問操作符.來訪問對(duì)象自身的數(shù)據(jù)域和調(diào)用方法,對(duì)象成員訪問操作符使用的一般形式是:對(duì)象引用變量.數(shù)據(jù)域;對(duì)象引用變量.方法(實(shí)參列表);示例:程序清單6-4TestSimpleRect.java實(shí)例成員變量(實(shí)例變量):變量的值依賴于某個(gè)具體實(shí)例實(shí)例成員方法(實(shí)例方法):只能被具體的實(shí)例所調(diào)用,并能使用具體實(shí)例的數(shù)據(jù)域調(diào)用對(duì)象(當(dāng)前對(duì)象):調(diào)用實(shí)例方法的對(duì)象實(shí)例成員:實(shí)例變量和實(shí)例方法346.2.1類的定義6.2.2對(duì)象創(chuàng)建6.2.3對(duì)象訪問356-4對(duì)象成員訪問操作符是
[填空1]
作答填空題1分內(nèi)容366.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.3靜態(tài)成員classclassName{
成員;
構(gòu)造方法;}37成員實(shí)例成員實(shí)例變量實(shí)例常量實(shí)例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法在有些場景中,有些信息需要被一個(gè)類的所有實(shí)例共享,或者在調(diào)用成員方法時(shí),直接使用類名調(diào)用。在這些場景中,類的靜態(tài)成員需要被使用。6.3靜態(tài)成員classclassName{
成員;
構(gòu)造方法;}38成員實(shí)例成員實(shí)例變量實(shí)例常量實(shí)例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法屬于某個(gè)具體實(shí)例6.3靜態(tài)成員classclassName{
成員;
構(gòu)造方法;}39成員實(shí)例成員實(shí)例變量實(shí)例常量實(shí)例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法通過類的一個(gè)實(shí)例調(diào)用6.3靜態(tài)成員classclassName{
成員;
構(gòu)造方法;}40成員實(shí)例成員實(shí)例變量實(shí)例常量實(shí)例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法被該類的所有實(shí)例共享6.3靜態(tài)成員classclassName{
成員;
構(gòu)造方法;}41成員實(shí)例成員實(shí)例變量實(shí)例常量實(shí)例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法通過類名即可調(diào)用,無須與類的某個(gè)實(shí)例綁定。6.3靜態(tài)成員classclassName{
成員;
構(gòu)造方法;}42成員實(shí)例成員實(shí)例變量實(shí)例常量實(shí)例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法靜態(tài)成員,也稱為類成員。要將成員聲明為靜態(tài)的,使用關(guān)鍵字static6.3靜態(tài)成員程序演示:程序清單6-6TestRectStaticDemo.java43建議:靜態(tài)成員最好用類名來訪問,即使用“類名.靜態(tài)變量”的方式訪問靜態(tài)變量,使用“類名.靜態(tài)方法(實(shí)際參數(shù)列表)”的方式訪問靜態(tài)方法。這不僅可以避免編譯警告錯(cuò)誤,而且可以很容易地識(shí)別出類中的靜態(tài)成員。6.3靜態(tài)成員44調(diào)用實(shí)例方法訪問實(shí)例數(shù)據(jù)域調(diào)用靜態(tài)方法訪問靜態(tài)數(shù)據(jù)域?qū)嵗椒o態(tài)方法實(shí)例方法VS靜態(tài)方法6.3靜態(tài)成員45publicclassTestStatic{inti=1;staticintj=2;publicstaticvoidmain(String[]args){intk1=i;//錯(cuò)誤,靜態(tài)方法不能訪問實(shí)例變量imethod1();//錯(cuò)誤,靜態(tài)方法不能調(diào)用實(shí)例方法method1
intk2=method2(2);//正確,靜態(tài)方法可以調(diào)用另一個(gè)靜態(tài)方法
}//實(shí)例方法可以訪問靜態(tài)變量和靜態(tài)方法publicvoidmethod1(){i=i+j+method2(i);
}//靜態(tài)方法可以訪問靜態(tài)變量publicstaticintmethod2(intk){returnk*j;
}}6.3靜態(tài)成員46publicclassTestStatic{inti=1;staticintj=2;publicstaticvoidmain(String[]args){
intk1=i;//錯(cuò)誤,靜態(tài)方法不能訪問實(shí)例變量imethod1();//錯(cuò)誤,靜態(tài)方法不能調(diào)用實(shí)例方法method1
intk2=method2(2);//正確,靜態(tài)方法可以調(diào)用另一個(gè)靜態(tài)方法
}//實(shí)例方法可以訪問靜態(tài)變量和靜態(tài)方法publicvoidmethod1(){i=i+j+method2(i);
}//靜態(tài)方法可以訪問靜態(tài)變量publicstaticintmethod2(intk){returnk*j;
}}6.3靜態(tài)成員47publicclassTestStatic{ inti=1; staticintj=2; publicstaticvoidmain(String[]args){ TestStaticobj=newTestStatic(); intk1=obj.i;//正確,靜態(tài)方法訪問的是對(duì)象obj的實(shí)例變量i obj.method1();//正確,靜態(tài)方法調(diào)用的是對(duì)象obj的實(shí)例方法method1 intk2=method2(2);//正確,靜態(tài)方法可以調(diào)用另一個(gè)靜態(tài)方法 } //實(shí)例方法可以訪問靜態(tài)變量和靜態(tài)方法 publicvoidmethod1(){ i=i+j+method2(i); } //靜態(tài)方法可以訪問靜態(tài)變量 publicstaticintmethod2(intk){ returnk*j; }}正確訪問形式486-5能被一個(gè)類的所有實(shí)例共享的變量稱為()公有變量私有變量實(shí)例變量類變量ABCD提交單選題1分496-6請(qǐng)勾選可以添加static的位置:()publicclassTest{intcount;public[A]voidmain(String[]args){…}public[B]intgetCount(){returncount;}public[C]intfactorial(intn){intresult=1;…;returnresult;}}staticstaticstaticABC提交多選題2分內(nèi)容506.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.4可見性修飾符516.4.1包6.4.2模塊module6.4.3public、private、包私有訪問權(quán)限6.4.1包包(package)可以將一組相關(guān)的類或接口組織在一起每個(gè)包具有一個(gè)獨(dú)一無二的包名,形成自己的命名空間,有助于防止命名沖突。具體來講,在兩個(gè)不同包中出現(xiàn)類名相同的類,是不會(huì)產(chǎn)生沖突的。包聲明語句要求是程序的第一條非注釋和非空白行的語句,而且必須是某源文件的第一條語句,使用關(guān)鍵字package,其語法形式:packagepackageName;packageName(包名)既可以是由一個(gè)合法標(biāo)識(shí)符確定的名稱,也可以是由多個(gè)合法標(biāo)識(shí)符用“.”(點(diǎn)號(hào))連接而成的一個(gè)名稱。如果一個(gè)類在定義時(shí),沒有聲明包,那么表示該類被放在默認(rèn)包中。一個(gè)包的成員包括類、接口、子包。其中,一個(gè)包的類和接口在該包的編譯單元中,而一個(gè)包的子包擁有自己的編譯單元和子包。需要注意的是,包與子包是兩個(gè)獨(dú)立的編譯單元。在導(dǎo)入語句中,導(dǎo)入一個(gè)包,并不表示導(dǎo)入了其子包。52importjavafx.scene.*;可以導(dǎo)入javafx.scene包中類和接口,但是不能導(dǎo)入javafx.scene的子包javafx.scene.layout中的類和接口,因此,不能代替如下導(dǎo)入語句:importjavafx.scene.layout.*;6.4.1包一個(gè)包中不能包含兩個(gè)具有相同名字的成員。即,一個(gè)包內(nèi)的類名、接口名、子包名不能重復(fù)出現(xiàn)。例1:包java.awt有一個(gè)子包image,因此它不能包含一個(gè)以image命名的類或接口。例2:一個(gè)命名為chapter6的包,擁有一個(gè)接口Print,那么就不能定義一個(gè)包名為chapter6.Print或chapter6.Print.doc的包。Eclipse環(huán)境創(chuàng)建演示536.4可見性修飾符546.4.1包6.4.2模塊module6.4.3public、private、包私有訪問權(quán)限6.4.2模塊module模塊(module)用于組織一組相關(guān)包。如果一些包具有較強(qiáng)的相關(guān)性,那么可以將這些包分組為一個(gè)模塊。項(xiàng)目、模塊、包之間的關(guān)系如下圖所示。556.4.2模塊module一個(gè)模塊能夠通過兩個(gè)關(guān)鍵字requires和exports,對(duì)自身所依賴(requires)的模塊和自身導(dǎo)出(exports)的包(package)進(jìn)行聲明。一個(gè)模塊只能使用其他模塊導(dǎo)出(exports)的包(package),其他模塊也只能使用該模塊導(dǎo)出(exports)的包(package)。一個(gè)模塊能將它的部分包或全部包分類為exported(導(dǎo)出的),這意味著這些被導(dǎo)出包的類和接口可以通過模塊外部的代碼訪問。如果一個(gè)模塊的某個(gè)包沒有被該模塊導(dǎo)出,那么只有模塊內(nèi)部的代碼可以訪問該包的類和接口。如果一個(gè)模塊中的代碼想要訪問另一個(gè)模塊導(dǎo)出的包,那么第一個(gè)模塊必須顯式依賴于第二個(gè)模塊。通常,新版本的集成開發(fā)環(huán)境(如Eclipse、IntellijIDEA等)在創(chuàng)建一個(gè)Java項(xiàng)目時(shí),均可選擇創(chuàng)建一個(gè)模塊及其模塊描述文件module-info.java。為了不引入復(fù)雜性,本書后續(xù)的內(nèi)容和示例不討論模塊的使用以及模塊對(duì)訪問特性的影響566.4可見性修飾符576.4.1包6.4.2模塊module6.4.3public、private、包私有訪問權(quán)限6.4.3public、private、包私有訪問權(quán)限可見性修飾符:用于確定一個(gè)類以及它的成員的可見性。放置在類、方法和數(shù)據(jù)域前:public,private,protectedpublic:類、方法和數(shù)據(jù)域可被任何包中的任何類訪問??梢孕揎楊惻c類的成員。private:數(shù)據(jù)域或方法只能被聲明的類訪問。只能修飾類的成員。包內(nèi)訪問或包私有:如果未使用可見性修飾符,則默認(rèn)類、方法和數(shù)據(jù)域可被同一包中的任何類訪問。58在局部變量上使用public可以嗎?在局部變量上使用private可以嗎?6.4.3public、private、包私有訪問權(quán)限private訪問特性示例59606-7如果一個(gè)類的成員變量只能在所在類中使用,則該成員變量必須使用的修飾符是()publicprotectedprivatestaticABCD提交單選題1分6.4.3public、private、包私有訪問權(quán)限如果沒有使用可見性修飾符放置在類、方法和數(shù)據(jù)域前,那么這些類、方法、數(shù)據(jù)域默認(rèn)具有包私有訪問權(quán)限,可以被同一個(gè)包中的成員訪問,但是不能被其他包中的成員訪問。一個(gè)類的方法和數(shù)據(jù)域無論使用哪個(gè)可見性修飾符,該類總是可以訪問自身所有的數(shù)據(jù)域和方法。因此,可見性修飾符用于指明一個(gè)類的數(shù)據(jù)域和方法是否能在該類之外被訪問。616.4.3public、private、包私有訪問權(quán)限可見性修飾符修飾數(shù)據(jù)域和方法的示例626.4.3public、private、包私有訪問權(quán)限可見性修飾符修飾類的示例63內(nèi)容646.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.5數(shù)據(jù)域封裝如果數(shù)據(jù)域是公有訪問權(quán)限,這些數(shù)據(jù)域被修改的可能性會(huì)擴(kuò)展到其他任何類。這有可能導(dǎo)致如下兩個(gè)問題:非私有的數(shù)據(jù)域可以被其他類篡改程序的可維護(hù)性變差數(shù)據(jù)域封裝:為了避免外部其他類對(duì)一個(gè)類的數(shù)據(jù)域直接進(jìn)行修改,可以使用private修飾符將數(shù)據(jù)域聲明為私有的私有數(shù)據(jù)域在類的外部不能直接被訪問,為了訪問私有數(shù)據(jù)域的值,可以提供公有的訪問方法供外部其他類調(diào)用。為了獲取私有數(shù)據(jù)域的值,提供一個(gè)獲取方法(getter)返回?cái)?shù)據(jù)域的值為了修改私有數(shù)據(jù)域的值,提供一個(gè)設(shè)置方法(setter)為數(shù)據(jù)域設(shè)置新值656.5數(shù)據(jù)域封裝獲取方法的簽名一般形式如下:public返回值類型getPropertyName()如果返回值類型是boolean類型,一般如下定義獲取方法:pulibcbooleanisPropertyName()設(shè)置方法的簽名如下:publicvoidsetPropertyName(數(shù)據(jù)類型propertyValue)示例:程序清單6-7Rect_v1.java注意:除非有特殊要求,在設(shè)計(jì)一個(gè)類時(shí),應(yīng)該將其所有的數(shù)據(jù)域設(shè)置為私有的,其所有的構(gòu)造方法和方法應(yīng)該被聲明為公有的。66676-8下面哪個(gè)說法不正確()可使用private修飾符封裝數(shù)據(jù)域封裝數(shù)據(jù)域使得程序易于維護(hù)封裝數(shù)據(jù)域使得程序變短封裝數(shù)據(jù)域幫助防止程序錯(cuò)誤ABCD提交單選題1分內(nèi)容686.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.6變量作用域無論類的成員變量在類的何處聲明,其作用域是整個(gè)類。類的成員變量和成員方法可以在類中以任意順序出現(xiàn)。69當(dāng)類的一個(gè)成員變量基于類的另一個(gè)成員變量來進(jìn)行初始化時(shí),則另一個(gè)成員變量必須先聲明706-9“一個(gè)類的成員變量的定義順序是任意的?!?/p>
這句話是否正確()正確錯(cuò)誤AB提交單選題1分6.6變量作用域變量隱藏:如果一個(gè)局部變量和類的成員變量同名,那么局部變量優(yōu)先,而同名的類的成員變量將被隱藏(hidden)71課堂思考:下面程序的輸出是什么?72{內(nèi)容736.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.7對(duì)象與方法746.7.1對(duì)象作為方法的形參6.7.2對(duì)象作為方法的返回值6.7.3var聲明對(duì)象作為方法的局部變量6.7.1對(duì)象作為方法的形參當(dāng)對(duì)象作為方法的形參時(shí),實(shí)參將自己的引用值傳遞給形參,形參和實(shí)參會(huì)引用同一片內(nèi)存區(qū)域,因此形參對(duì)內(nèi)存區(qū)域的改變也會(huì)影響到實(shí)參。在Java語言中,參數(shù)傳遞本質(zhì)上僅有一種方式,即值傳遞。無論一個(gè)方法的形參是基本數(shù)據(jù)類型或是引用數(shù)據(jù)類型,實(shí)參傳遞給形參的都是實(shí)參的值。示例:程序清單6-8TestPassValue.java756.7.1對(duì)象作為方法的形參76776-10當(dāng)向一個(gè)方法傳遞對(duì)象參數(shù)時(shí),()被傳遞給方法。對(duì)象的內(nèi)容對(duì)象的一個(gè)copy對(duì)象的引用值對(duì)象的一個(gè)copy,這個(gè)copy對(duì)象的引用值A(chǔ)BCD提交單選題1分6.7對(duì)象與方法786.7.1對(duì)象作為方法的形參6.7.2對(duì)象作為方法的返回值6.7.3var聲明對(duì)象作為方法的局部變量6.7.2對(duì)象作為方法的返回值當(dāng)一個(gè)對(duì)象類型作為方法返回值,需要使用類名作為方法的返回值類型。示例:程序清單6-9TestCreateRect.java796.7對(duì)象與方法806.7.1對(duì)象作為方法的形參6.7.2對(duì)象作為方法的返回值6.7.3var聲明對(duì)象作為方法的局部變量6.7.3var聲明對(duì)象作為方法的局部變量在方法中聲明一個(gè)對(duì)象作為局部變量,有兩種方式,例如:Rect_v1rect1=newRect_v1(3.0,5.0);//方式1:常規(guī)方式varrect2=newRect_v1(3.0,5.0);//方式2:var聲明方式var聲明方式可以使用關(guān)鍵字var替代類名,使得代碼更簡潔。局部變量的類型通過賦值語句右邊的表達(dá)式進(jìn)行推斷。該聲明方式從Java10開始出現(xiàn),如果可以從變量的初始值推導(dǎo)出它們的類型,那么可以用var關(guān)鍵字聲明局部變量,而無需指定其類型。使用關(guān)鍵字var還需注意:關(guān)鍵字var只能用于方法中的局部變量定義,不能用于形式參數(shù)聲明。816.7.3var聲明對(duì)象作為方法的局部變量在如下情況使用關(guān)鍵字var會(huì)發(fā)生編譯錯(cuò)誤:(1)多個(gè)變量聲明在一起。(2)變量聲明時(shí)沒有進(jìn)行初始化。(3)變量聲明時(shí),賦值操作符左邊存在一個(gè)或多個(gè)方括號(hào)對(duì)。(4)變量初始化是一個(gè)數(shù)組初始化列表。(5)變量聲明在初始化時(shí)包含一個(gè)對(duì)自身的引用。Jshell驗(yàn)證:826.7.3var聲明對(duì)象作為方法的局部變量836.7.3var聲明對(duì)象作為方法的局部變量846.7.3var聲明對(duì)象作為方法的局部變量85866-11下面對(duì)var關(guān)鍵字使用正確的是()
varobj=null;varf={3,4}varlist=newdouble[5];vari=1,j=2;ABCD提交單選題1分內(nèi)容876.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.8對(duì)象數(shù)組當(dāng)數(shù)組元素是某種類型的對(duì)象時(shí),這樣的數(shù)組可被稱為對(duì)象數(shù)組。例如,下面的語句聲明并創(chuàng)建具有5個(gè)矩形對(duì)象的數(shù)組:Rect_v1[]rects=newRect_v1[5];初始化:示例:程序清單6-10CalMultiRectAreajava88for(inti=0;i<rects.length;i++)rects[i]=newRect_v1();內(nèi)容896.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.9ArrayList對(duì)象數(shù)組是長度固定的,如果用于存儲(chǔ)個(gè)數(shù)不定的對(duì)象,就會(huì)出現(xiàn)問題:如果對(duì)象數(shù)組長度不夠,那么不能存儲(chǔ)所有對(duì)象如果對(duì)象數(shù)組長度太大,那么浪費(fèi)存儲(chǔ)空間Java語言提供了一個(gè)數(shù)組列表類ArrayListArrayList(位于java.util包中),用來存儲(chǔ)不限定個(gè)數(shù)的某類對(duì)象。ArrayList是一種泛型類,具有一個(gè)泛型類型E。在創(chuàng)建一個(gè)ArrayList對(duì)象時(shí),可以用一個(gè)具體的引用類型來替代E。例如:ArrayList<String>nameOfUniversities=newArrayList<String>();906.9ArrayList從JavaSE7開始,ArrayList構(gòu)造方法中不再要求給出具體引用類型的名稱,具體地,語句如下:91ArrayList<具體引用類型>nameOfUniversities=newArrayList<具體引用類型>();ArrayList<具體引用類型>nameOfUniversities=newArrayList<>();簡化6.9ArrayList數(shù)組列表類ArrayList有三個(gè)構(gòu)造方法:(1)無參構(gòu)造方法:ArrayList(),創(chuàng)建一個(gè)初始容量為10的數(shù)組列表對(duì)象。(2)指定初始容量的構(gòu)造方法:ArrayList(intinitialCapacity),創(chuàng)建一個(gè)指定初始容量的數(shù)組列表對(duì)象。(3)從其他集合對(duì)象創(chuàng)建的構(gòu)造方法:ArrayList(Collection<?ExtendsE>c),創(chuàng)建一個(gè)數(shù)組列表對(duì)象容納指定集(Collection)對(duì)象c926.9ArrayList936.9ArrayList94示例:程序清單6-11ArrayListDemo1.java6.9ArrayList有時(shí)候需要從一個(gè)對(duì)象數(shù)組創(chuàng)建一個(gè)列表,或者相反。雖然可以通過循環(huán)實(shí)現(xiàn),但是代碼不夠簡潔,可以使用Java語言提供的API更加容易地實(shí)現(xiàn)。使用方法Arrays.asList()可以實(shí)現(xiàn)從一個(gè)對(duì)象數(shù)組創(chuàng)建一個(gè)數(shù)組列表對(duì)象,例如:String[]nameArray={"法正","郭嘉","諸葛亮"};ArrayList<String>nameList=newArrayList<>(Arrays.asList(nameArray));使用ArrayList的實(shí)例方法toArray()可以實(shí)現(xiàn)從一個(gè)數(shù)組列表對(duì)象創(chuàng)建一個(gè)對(duì)象數(shù)組,例如:String[]nameArray1=newString[nameList.size()];nameList.toArray(nameArray1);95966-12假設(shè)一個(gè)數(shù)組列表對(duì)象包含{"red","red","green"},在執(zhí)行下面代碼之后list的值是多少?(){"red","red","green"}{"red","green"}{"green"}{}ABCD提交Stringelement="red";for(inti=0;i<list.size();i++)if(list.get(i).equals(element))list.remove(element);單選題1分976-13假設(shè)一個(gè)數(shù)組列表對(duì)象包含{"red","red","green"},在執(zhí)行下面代碼之后list的值是多少?{"red","red","green"}{"red","green"}{"green"}{}ABCD提交
Stringelement="red";for(inti=0;i<list.size();i++)if(list.get(i).equals(element))if(list.get(i).equals(element)){list.remove(element);i--;}單選題1分內(nèi)容986.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.10this引用關(guān)鍵字this用于一個(gè)對(duì)象引用自身。通過關(guān)鍵字this,可以引用對(duì)象的實(shí)例成員。通常,關(guān)鍵字this是被隱式使用的。this隱式使用示例:下一頁this引用在兩種情況下是必須顯式使用的:需要引用被方法或構(gòu)造方法的參數(shù)所隱藏的數(shù)據(jù)域時(shí)需要調(diào)用一個(gè)重載的構(gòu)造方法時(shí)996.10this引用this引用隱式使用1006.10this引用1016.10.1this引用被隱藏?cái)?shù)據(jù)域6.10.2this調(diào)用構(gòu)造方法6.10.1this引用被隱藏?cái)?shù)據(jù)域通常,使用數(shù)據(jù)域作為構(gòu)造方法或設(shè)置方法的參數(shù)是一個(gè)好方法,這可以使得代碼易于閱讀,并且避免創(chuàng)建不必要的名字。然而,由于參數(shù)與數(shù)據(jù)域同名,在構(gòu)造方法或設(shè)置方法中,需要顯式使用關(guān)鍵字this來引用被隱藏的數(shù)據(jù)域名稱。1026.10.1this引用被隱藏?cái)?shù)據(jù)域被隱藏的實(shí)例變量,可以通過this引用來訪問。被隱藏的靜態(tài)變量,可以通過類名來訪問。其訪問形式為:類名.靜態(tài)變量。1036.10this引用1046.10.1this引用被隱藏?cái)?shù)據(jù)域6.10.2this調(diào)用構(gòu)造方法6.10.2this調(diào)用構(gòu)造方法關(guān)鍵字this可以在一個(gè)類的構(gòu)造方法中使用,用于調(diào)用該類的另一個(gè)構(gòu)造方法。需要注意的是,在一個(gè)構(gòu)造方法使用this調(diào)用其他構(gòu)造方法時(shí),this調(diào)用其他構(gòu)造方法的語句應(yīng)該是該構(gòu)造方法的第一條語句。105示例:討論題下面代碼有無錯(cuò)誤?如有,請(qǐng)指出哪一行有錯(cuò)誤。106publicclassMain{privatedoubleintrst;publicvoidf1(){rst=12;}publicvoidf2(){Mrst
=
12.5;}}內(nèi)容1076.1面向?qū)ο蟾攀?.2類與對(duì)象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對(duì)象與方法6.8對(duì)象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.11Java常用類1086.11.1基本數(shù)據(jù)類型的包裝類6.11.2BigInteger類和BigDecimal類6.11.3Random類6.11.4Date類6.11.1基本數(shù)據(jù)類型的包裝類Java語言的所有基本類型都有其對(duì)應(yīng)包裝類。byte——Byte、short——Short、int——Integer、long——Long、float——Float、double——Double、char——Character、Boolean——Boolean)Java語言為什么既提供基本數(shù)據(jù)類型,又提供對(duì)應(yīng)的包裝類呢?一方面,Java語言提供基本數(shù)據(jù)類型是為了性能,如果把基本數(shù)據(jù)類型作為對(duì)象使用的,那么處理對(duì)象時(shí),Java語言是需要額外的系統(tǒng)開銷的。另一方面,Java語言提供的一些數(shù)據(jù)結(jié)構(gòu)和方法需要將引用類型作為參數(shù),于是,為了讓這些數(shù)據(jù)結(jié)構(gòu)和方法能對(duì)基本數(shù)據(jù)類型的值進(jìn)行處理,Java語言提供基本類型對(duì)應(yīng)的包裝類。例如,ArrayList<E>是一個(gè)動(dòng)態(tài)的對(duì)象數(shù)組,如果要讓該數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)整數(shù),那么必須將整數(shù)轉(zhuǎn)化成對(duì)應(yīng)的整數(shù)類類型。1096.11.1基本數(shù)據(jù)類型的包裝類數(shù)值包裝類(Byte、Short、Integer、Long、Float、Double)的使用非常相似,都具有方法:byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()。這些方法可將對(duì)象轉(zhuǎn)化為基本數(shù)據(jù)類型值?;緮?shù)據(jù)類型包裝類都是最終類(7.4節(jié)介紹),意味著所有包裝類的實(shí)例一旦創(chuàng)建,就都是不可變的,即包裝類實(shí)例包含的值就不能再改變了。所有基本數(shù)據(jù)類型包裝類的構(gòu)造方法從Java9開始成為過時(shí)方法,在未來的版本中會(huì)被移除。為了提升性能,構(gòu)建基本數(shù)據(jù)類型包裝類對(duì)象,建議采用靜態(tài)的工廠方法valueOf(工廠模式是一種設(shè)計(jì)模式,這里不展開介紹)進(jìn)行創(chuàng)建1106.11.1基本數(shù)據(jù)類型的包裝類Integer、Double創(chuàng)建對(duì)象示例:通過數(shù)值創(chuàng)建Integer、Double對(duì)象示例1116.11.1基本數(shù)據(jù)類型的包裝類通過字符串創(chuàng)建Integer、Double對(duì)象示例1121136-14下面語句是否正確,“Integer對(duì)象最好通過構(gòu)造方法創(chuàng)建”()正確錯(cuò)誤AB提交單選題1分6.11.1基本數(shù)據(jù)類型的包裝類基本數(shù)據(jù)類型最大值、最小值示例1146.11.1基本數(shù)據(jù)類型的包裝類每個(gè)數(shù)值包裝類包含一些共有方法:doubleValue()、floatValue()、longValue()、intValue()、shortValue()、byteValue()1156.11.1基本數(shù)據(jù)類型的包裝類數(shù)值包裝類都有一個(gè)compareTo方法,用于比較兩個(gè)數(shù)值:1166.11.1基本數(shù)據(jù)類型的包裝類每個(gè)數(shù)值包裝類都提供了相應(yīng)的靜態(tài)解析方法parseXXX(Strings)(XXX代表Byte、Short、Int、Long、Float、Double中的任意一個(gè)),將字符串轉(zhuǎn)換成相應(yīng)的基本數(shù)據(jù)類型。1176.11.1基本數(shù)據(jù)類型的包裝類對(duì)于整數(shù)包裝類,Java還提供了一個(gè)重載的解析方法parseXXX(Strings,intradix),提供第2個(gè)參數(shù)(radix)指定基數(shù)為2、8、16,可將數(shù)值字符串解析為以指定值為基數(shù)的數(shù)值。1186.11.1基本數(shù)據(jù)類型的包裝類數(shù)值包裝類還有靜態(tài)方法toString和實(shí)例方法toString,用于將相應(yīng)的數(shù)據(jù)類型值轉(zhuǎn)換成字符串表示。1196.11.1基本數(shù)據(jù)類型的包裝類基本數(shù)據(jù)類型和其包裝類類型之間可以自動(dòng)轉(zhuǎn)換?;緮?shù)據(jù)類型值被轉(zhuǎn)換為包裝類對(duì)象的過程被稱為裝箱(boxing),與之相反的過程被稱為拆箱(unboxing)。如果一個(gè)基本數(shù)據(jù)類型值出現(xiàn)在需要使用對(duì)象的上下文環(huán)境中,Java編譯器會(huì)對(duì)基本數(shù)據(jù)類型值進(jìn)行自動(dòng)裝箱。如果一個(gè)包裝類對(duì)象出現(xiàn)在需要使用基本數(shù)據(jù)類型值的上下文環(huán)境中,Java編譯器會(huì)對(duì)包裝類對(duì)象進(jìn)行自動(dòng)拆箱。示例:1206.11.1基本數(shù)據(jù)類型的包裝類由于基本數(shù)據(jù)類型和其包裝類類型之間可以自動(dòng)進(jìn)行轉(zhuǎn)換,所以使用ArrayList類可以創(chuàng)建存儲(chǔ)不定個(gè)數(shù)的數(shù)值(整數(shù)或浮點(diǎn)數(shù)等)的列表。例如,下面創(chuàng)建一個(gè)存儲(chǔ)整數(shù)的列表,并對(duì)列表進(jìn)行操作,代碼如下:ArrayList<Integer>intList=newArrayList<>();intList.add(4); //整數(shù)4自動(dòng)轉(zhuǎn)換為Integer對(duì)象intList.add(5); //整數(shù)5自動(dòng)轉(zhuǎn)換為Integer對(duì)象inti1=intList.get(0);//索引為0的Integer對(duì)象自動(dòng)轉(zhuǎn)換為整數(shù)4inti2=intList.get(1);//索引為1的Integer對(duì)象自動(dòng)轉(zhuǎn)換為整數(shù)5雖然基本數(shù)據(jù)類型和其包裝類類型之間可以自動(dòng)轉(zhuǎn)換,但是這并不表示在創(chuàng)建ArrayList對(duì)象時(shí)能用基本類型代替包裝類。例如,下面語句是錯(cuò)誤的:ArrayList<int>intList=newArrayList<>();這是因?yàn)榉盒皖愋虴必須是引用類型,int是基本數(shù)據(jù)類型。1211226-15下列哪些語句將一個(gè)字符串s轉(zhuǎn)換為一個(gè)double值d?()d=Double.parseDouble(s);d=(newDouble(s)).doubleValue();d=Double.valueOf(s).doubleValue();以上都對(duì)ABCD提交單選題1分6.11.1基本數(shù)據(jù)類型的包裝類程序清單6-12的實(shí)例展示了ArrayList存儲(chǔ)不定個(gè)數(shù)浮點(diǎn)數(shù)的情況,模擬了一個(gè)購物結(jié)算場景。程序演示:程序清單6-12ArrayListDemo2.java123這時(shí)Java編譯器會(huì)報(bào)錯(cuò)。其原因在于100是int型值不能自動(dòng)裝箱為Double對(duì)象第9行的代碼會(huì)把int型值自動(dòng)轉(zhuǎn)換double型值,然后double型值會(huì)自動(dòng)裝箱成Double對(duì)象。假如在程序清單6-12第13行空行加一條語句是否正確,語句如下:prices.add(100);程序清單6-12所示程序在執(zhí)行時(shí),用戶輸入數(shù)據(jù)也輸入了整數(shù)3、4,為什么程序沒有報(bào)錯(cuò)呢?6.11.1基本數(shù)據(jù)類型的包裝類Integer類124數(shù)據(jù)域說明privateintvalue當(dāng)前Integer對(duì)象對(duì)應(yīng)的int值publicstaticfinaldoubleMAX_VALUE正的最大double值,(2-2-52)·21023publicstaticfinaldoubleMIN_VALUE正的最小double值,2-1074構(gòu)造方法說明public
Integer(int
value)以指定值value構(gòu)建一個(gè)Integer對(duì)象。從Java9開始,這個(gè)構(gòu)造方法將成為過時(shí)的方法。靜態(tài)方法valueOf(int)是一個(gè)更好的選擇,具有更好地空間和時(shí)間性能。public
Integer(String
s)以字符串表示的浮點(diǎn)值構(gòu)建一個(gè)Integer對(duì)象。從Java9開始,這個(gè)構(gòu)造方法將成為過時(shí)的方法。使用靜態(tài)方法parseInteger(String)將String轉(zhuǎn)換為int值,或使用靜態(tài)方法valueOf(String)將一個(gè)String對(duì)象轉(zhuǎn)換成一個(gè)Integer對(duì)象6.11.1基本數(shù)據(jù)類型的包裝類Integer類125常用方法說明public
byte
byteValue()返回當(dāng)前Integer對(duì)象的byte值public
short
shortValue()返回當(dāng)前Integer對(duì)象的short值public
int
intValue()返回當(dāng)前Integer對(duì)象的int值public
long
longValue()返回當(dāng)前Integer對(duì)象的long值public
float
floatValue()返回當(dāng)前Integer對(duì)象的float值public
double
doubleValue()返回當(dāng)前Integer對(duì)象的double值publicstatic
Integer
valueOf(inti)基于給定的int值返回一個(gè)Integer對(duì)象publicstatic
Integer
valueOf(String
s)返回一個(gè)Integer對(duì)象,參數(shù)s是該對(duì)象擁有的int值的字符串表示publicstatic
Integer
valueOf(String
s,intradix)返回一個(gè)Integer對(duì)象,該對(duì)象保存從指定字符串中提取的值,解析指定字符串s時(shí),使用第二個(gè)參數(shù)給定的基數(shù)。publicstatic
int
parseInt(String
s)返回一個(gè)新的有符號(hào)十進(jìn)制int值,該值通過解析指定字符串s獲得publicstatic
int
parseInt(String
s,intradix)返回一個(gè)新的有符號(hào)int值,該值通過解析指定字符串s獲得,解析字符串s時(shí),使用第二個(gè)參數(shù)給定的基數(shù)6.11.1基本數(shù)據(jù)類型的包裝類Integer類126常用方法說明publicstatic
int
parseUnsignedInt(String
s)自Java8開始提供該方法,把字符串s解析為無符號(hào)十進(jìn)制整數(shù),并返回該整數(shù)值publicstatic
int
parseUnsignedInt(String
s,int
radix)自Java8開始提供該方法,把字符串s解析為以第二個(gè)參數(shù)為基數(shù)的無符號(hào)整數(shù),并返回該整數(shù)值publicstatic
Integer
valueOf(String
s,int
radix)基于第二個(gè)參數(shù)給定的基數(shù),把字符串s解析為無符號(hào)整數(shù),并返回該整數(shù)值publicstatic
String
toString(inti)基于十進(jìn)制,返回一個(gè)int值i的字符串表示publicstatic
String
toBinaryString(int
i)返回整數(shù)參數(shù)i的字符串表示,這個(gè)字符串表示是參數(shù)i對(duì)應(yīng)的以2為基數(shù)的無符號(hào)整數(shù)publicstatic
String
toOctalString(int
i)返回整數(shù)參數(shù)i的字符串表示,這個(gè)字符串表示是參數(shù)i對(duì)應(yīng)的以8為基數(shù)的無符號(hào)整數(shù)publicstatic
String
toHexString(inti)返回整數(shù)參數(shù)i的字符串表示,這個(gè)字符串表示是參數(shù)i對(duì)應(yīng)的以16為基數(shù)的無符號(hào)整數(shù)publicstatic
String
toUnsignedString(int
i)自Java8開始提供該方法,返回參數(shù)i的字符串表示,這個(gè)字符串表示是參數(shù)i對(duì)應(yīng)的十進(jìn)制無符號(hào)數(shù)。6.11.1基本數(shù)據(jù)類型的包裝類Integer類127常用方法說明publicstatic
long
toUnsignedLong(int
x)將參數(shù)x轉(zhuǎn)換為無符號(hào)的long類型值public
String
toString()返回當(dāng)前Integer對(duì)象的字符串表示public
int
compareTo(Integer
anotherInteger)當(dāng)前Integer對(duì)象與給定的Integer對(duì)象anotherInteger進(jìn)行比較,比較兩個(gè)對(duì)象包含的數(shù)值,當(dāng)前者大于、等于、小于后者時(shí),分別返回1、0、-16.11.1基本數(shù)據(jù)類型的包裝類Double類128數(shù)據(jù)域說明privatedoublevalueDouble對(duì)象對(duì)應(yīng)的double值publicstaticfinaldoubleMAX_VALUE正的最大double值,(2-2-52)·21023publicstaticfinaldoubleMIN_VALUE正的最小double值,2-1074構(gòu)造方法說明public
Double(double
value)以指定值value構(gòu)建一個(gè)Double對(duì)象。從Java9開始,這個(gè)構(gòu)造方法將成為過時(shí)的方法。靜態(tài)方法valueOf(double)是一個(gè)更好的選擇,具有更好地空間和時(shí)間性能。public
Double(String
s)以字符串表示的浮點(diǎn)值構(gòu)建一個(gè)Double對(duì)象。從Java9開始,這個(gè)構(gòu)造方法將成為過時(shí)的方法。使用靜態(tài)方法parseDouble(String)將一個(gè)String轉(zhuǎn)化為一個(gè)double值,或使用靜態(tài)方法valueOf(String)將一個(gè)String對(duì)象轉(zhuǎn)換成一個(gè)Double對(duì)象6.11.1基本數(shù)據(jù)類型的包裝類Double類129常用方法說明public
byte
byteValue()返回當(dāng)前Double對(duì)象的byte值public
short
shortValue()返回當(dāng)前Double對(duì)象的short值public
int
intValue()返回當(dāng)前Double對(duì)象的int值public
long
longValue()返回當(dāng)前Double對(duì)象的long值public
float
floatValue()返回當(dāng)前Double對(duì)象的float值public
double
doubleValue()返回當(dāng)前Double對(duì)象的double值publicstatic
Double
valueOf(double
d)基于給定的double值返回一個(gè)Double對(duì)象publicstatic
Double
valueOf(String
s)返回一個(gè)Double對(duì)象,參數(shù)s是該對(duì)象擁有的double值的字符串表示publicstatic
double
parseDouble(String
s)返回一個(gè)新的double值,該值由指定字符串s表示publicstatic
String
toString(double
d)返回一個(gè)double值d的字符串表示publicstatic
String
toHexString(double
d)返回一個(gè)double值d的十六進(jìn)制字符串表示public
String
toString()返回當(dāng)前Double對(duì)象字符串表示public
int
compareTo(Double
anotherDouble)當(dāng)前Double對(duì)象與給定的Double對(duì)象anotherDouble進(jìn)行比較,比較兩個(gè)對(duì)象包含的數(shù)值,當(dāng)前者大于、等于、小于后者時(shí),分別返回1、0、-16.11Java常用類1306.11.1基本數(shù)據(jù)類型的包裝類6.11.2BigInteger類和BigDecimal類6.11.3Random類6.11.4Date類6.11.2BigInteger類和BigDecimal類java.math包中提供了BigInteger類和BigDecimal類。它們都是最終類,可以分別用于表示任意大小和精度的整數(shù)和十進(jìn)制數(shù),支持非常大的數(shù)的計(jì)算或者高精度浮點(diǎn)值的計(jì)算。BigInteger類的publicstaticfinalBigInteger數(shù)據(jù)域131數(shù)據(jù)域說明ZEROBigInteger常量0ONEBigInteger常量1TWOBigInteger常量2TENBigInteger常量106.11.2BigInteger類和BigDecimal類BigInteger類的部分構(gòu)造方法與常用方法132方法頭說明public
BigInteger(String
val)將一個(gè)BigInteger的十進(jìn)制字符串表示翻譯成一個(gè)BigInteger對(duì)象public
BigInteger(String
val,int
radix)將一個(gè)BigInteger、以指定基數(shù)radix的字符串表示翻譯成一個(gè)BigInteger對(duì)象public
BigInteger
add(BigInteger
val)返回當(dāng)前對(duì)象與給定對(duì)象val的和public
BigInteger
subtract(BigInteger
val)返回當(dāng)前對(duì)象減去給定對(duì)象val的差public
BigInteger
multiply(BigInteger
val)返回當(dāng)前對(duì)象與給定對(duì)象val的乘積public
BigInteger
divide(BigInteger
val)返回當(dāng)前對(duì)象除以給定對(duì)象val的商public
BigInteger
remainder(BigInteger
val)返回當(dāng)前對(duì)象除以給定對(duì)象val的余數(shù)public
BigInteger
pow(int
exponent)返回當(dāng)前對(duì)象的exponent次冪public
BigInteger
sqrt()返回當(dāng)前對(duì)象的平方根public
BigInteger
gcd(BigInteger
val)返回當(dāng)前對(duì)象與給定對(duì)象val的最大公約數(shù)public
BigInteger
abs()返回一個(gè)BigInteger對(duì)象,其值是當(dāng)前BigInteger對(duì)象的絕對(duì)值public
BigInteger
negate()返回一個(gè)BigInteger對(duì)象,其值是對(duì)當(dāng)前BigInteger對(duì)象取反(-this)1336-16表示任意大小和精度的十進(jìn)制數(shù)類是
[填空1]
作答填空題1分6.11.2BigInteger類和BigDecimal類BigInteger類使用示例1346.11.2BigInteger類和BigDecimal類BigDecimal類的publicstaticfinalBigInteger數(shù)據(jù)域135數(shù)據(jù)域說明ZEROBigDecimal常量0,scale為0ONEBigDecimal常量1,scale為0TENBigDecimal常量10,scale為06.11.2BigInteger類和BigDecimal類BigDecimal類的部分構(gòu)造方法和常用方法136方法頭說明public
BigDecimal(String
val)將一個(gè)BigDecimal的字符串表示翻譯成一個(gè)BigDecimal對(duì)象public
BigDecimal(BigIntegerval)將一個(gè)BigInteger翻譯成一個(gè)BigDecimal對(duì)象,其scale為0。public
BigDecimal(double
val)將雙精度值val轉(zhuǎn)換為一個(gè)BigDecimal對(duì)象,該對(duì)象是雙精度二進(jìn)制浮點(diǎn)值的精確十進(jìn)制表示。public
BigDecimal(long
val)將一個(gè)long類型值val翻譯成一個(gè)BigDecimal對(duì)象,其scale為0。public
BigDecimal(int
val)將一個(gè)int類型值val翻譯成一個(gè)BigDecimal對(duì)象,其scale為0。public
BigDecimal
add(BigDecimal
val)返回當(dāng)前對(duì)象與給定對(duì)象val的和public
BigDecimal
subtract(BigDecimalval)返回當(dāng)前對(duì)象減去給定對(duì)象val的差public
BigDecimal
multiply(BigDecimal
val)返回當(dāng)前對(duì)象與給定對(duì)象val的乘積public
BigDecimal
divide(BigDecimal
val)返回當(dāng)前對(duì)象除以給定對(duì)象val的商public
BigDecimal
remainder(BigDecimal
val)返回當(dāng)前對(duì)象除以給定對(duì)象val的余數(shù)public
BigDecimal
pow(int
n)返回當(dāng)前對(duì)象的n次冪public
BigDecimal
sqrt()返回當(dāng)前對(duì)象的平方根public
BigDecimal
abs()返回一個(gè)BigDecimal對(duì)象,其值是當(dāng)前BigDecimal對(duì)象的絕對(duì)值6.11.2BigInteger類和BigDecimal類構(gòu)造方法publicBigDecimal(Stringval)的字符串形式可以有多種形式。下面是一些示例(對(duì)于左側(cè)的每個(gè)字符串,結(jié)果表示[BigInteger,s
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 龍鳳花鳥字藝術(shù)課程大綱
- DB32T 5090.2-2025 醫(yī)院醫(yī)患溝通規(guī)范 第2部分:門診
- 專利知識(shí)產(chǎn)權(quán)培訓(xùn)
- 醫(yī)院護(hù)理管理培訓(xùn)課件
- 溫有奎大數(shù)據(jù)知識(shí)發(fā)現(xiàn)產(chǎn)品開發(fā)
- 液壓與氣壓傳動(dòng)第九章氣壓傳動(dòng)基礎(chǔ)知識(shí)
- 消防知識(shí)競賽資料
- 雨中的安全小班教案
- 強(qiáng)化市場調(diào)研分析預(yù)測消費(fèi)趨勢(shì)
- 質(zhì)量部檔案管理流程
- 2024年全國中學(xué)生生物學(xué)聯(lián)賽試題含答案
- 數(shù)獨(dú)題目高級(jí)50題(后附答案)
- XX光伏電站項(xiàng)目方案(自投)
- 《長方體正方體》課前小研究
- MIL-STD-105E抽樣計(jì)劃表
- 中國聯(lián)通消防安全管理規(guī)定
- 一課一練21:關(guān)聯(lián)速度模型(答案含解析)—2021屆高中物理一輪基礎(chǔ)復(fù)習(xí)檢測
- GB∕T 10781.11-2021 白酒質(zhì)量要求 第11部分:馥郁香型白酒
- T∕CCT 002-2019 煤化工 副產(chǎn)工業(yè)氯化鈉
- 學(xué)習(xí)通《商業(yè)計(jì)劃書的優(yōu)化》章節(jié)測試附答案
- 捐贈(zèng)意向書模板
評(píng)論
0/150
提交評(píng)論