Java程序設(shè)計基礎(chǔ) 課件 劉平山 第6-12章 面向?qū)ο蟪绦蛟O(shè)計(上)- JavaFX圖形用戶界面程序設(shè)計_第1頁
Java程序設(shè)計基礎(chǔ) 課件 劉平山 第6-12章 面向?qū)ο蟪绦蛟O(shè)計(上)- JavaFX圖形用戶界面程序設(shè)計_第2頁
Java程序設(shè)計基礎(chǔ) 課件 劉平山 第6-12章 面向?qū)ο蟪绦蛟O(shè)計(上)- JavaFX圖形用戶界面程序設(shè)計_第3頁
Java程序設(shè)計基礎(chǔ) 課件 劉平山 第6-12章 面向?qū)ο蟪绦蛟O(shè)計(上)- JavaFX圖形用戶界面程序設(shè)計_第4頁
Java程序設(shè)計基礎(chǔ) 課件 劉平山 第6-12章 面向?qū)ο蟪绦蛟O(shè)計(上)- JavaFX圖形用戶界面程序設(shè)計_第5頁
已閱讀5頁,還剩627頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章面向?qū)ο蟪绦蛟O(shè)計(上)1教學(xué)目標(biāo)(1) 理解面向過程抽象與面向?qū)ο蟪橄?2) 理解面向?qū)ο笕筇卣?3) 理解類與對象的關(guān)系,能夠定義類、創(chuàng)建對象和訪問對象成員(4) 理解UML類圖(5) 理解靜態(tài)成員概念,能使用靜態(tài)成員(6) 理解模塊、包、public、private等對訪問權(quán)限的影響(7) 理解數(shù)據(jù)域封裝(8) 理解變量作用域(9) 理解和應(yīng)用對象作為方法參數(shù)和作為方法返回值,能使用var定義局部變量。(10) 理解對象數(shù)組,能使用對象數(shù)組(11) 理解this關(guān)鍵字的含義,能使用this引用隱藏數(shù)據(jù)域和調(diào)用構(gòu)造方法(12) 能使用基本數(shù)據(jù)類型包裝類、BigInteger類、BigDecimal類、Date類2動機(jī)在信息技術(shù)發(fā)展過程中,早期的軟件規(guī)模較小,面向過程的軟件開發(fā)方法就能很好地解決。隨著,軟件規(guī)模越來越大,問題越來越復(fù)雜,面向過程的軟件開發(fā)方法不足以應(yīng)對大規(guī)模和復(fù)雜性高的軟件系統(tǒng)開發(fā)。面向過程的編程是對任務(wù)的過程分解,解決問題的思路是“走一步,看一步,遇到問題,解決問題”。面向?qū)ο蠼鉀Q問題并不關(guān)心問題處理過程,而是關(guān)注解決問題過程中都有哪些對象參與,給參與的對象分配相應(yīng)的職責(zé)即可。3引入面向?qū)ο蟪绦蛟O(shè)計?。?!內(nèi)容46.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類內(nèi)容56.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.1面向?qū)ο蟾攀雒嫦驅(qū)ο螅∣bjectOriented,簡稱OO)是一種軟件開發(fā)方法,也是一種編程范式,還是一種對現(xiàn)實世界進(jìn)行理解和抽象的方法把相關(guān)的數(shù)據(jù)和方法封裝成一個整體,以更加自然的方式對現(xiàn)實世界進(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ì)特征,同時舍棄事物非本質(zhì)特征的過程面向過程的抽象功能分解數(shù)據(jù)和過程是分離的,兩者關(guān)系由程序員維護(hù)多個過程可能修改和使用同一數(shù)據(jù)96.1.1面向過程與面向?qū)ο蟮某橄笕祟愑^察現(xiàn)實世界時,會把現(xiàn)實世界的事物分為一個個實體,每個實體能做什么,它和其他實體協(xié)作做了什么,從而理解現(xiàn)實世界的運作。面向?qū)ο蟪橄髲默F(xiàn)實世界問題域抽象出一個個相互獨立的對象,表示現(xiàn)實世界的實體,弄清楚每個實體具有什么屬性,具有哪些動態(tài)特征,會與哪些實體進(jìn)行交互等面向?qū)ο蟪橄髮?shù)據(jù)和操作封裝到一個個能動的對象中,數(shù)據(jù)和操作之間的對應(yīng)關(guān)系不再由程序員來維護(hù),而由系統(tǒng)自動維護(hù)106.1.1面向過程與面向?qū)ο蟮某橄髲?fù)雜性解決:在面向?qū)ο笙到y(tǒng)中,一些獨立的對象依據(jù)某種構(gòu)造結(jié)合在一起,能形成新的、特有的屬性和功能,可以形成一個更大更復(fù)雜的對象。這個更大更復(fù)雜的對象也可以成為另一個更大對象的一個組成部分,從而構(gòu)造出一個更為龐大的系統(tǒng)例:一輛汽車一般由發(fā)動機(jī)、底盤、車身、電氣設(shè)備等組成,而一個發(fā)動機(jī)、一個底盤、一個車身、一個電氣設(shè)備等本身也是一個對象,它們裝配在一起可以形成更為復(fù)雜、具有獨特功能的一個汽車對象116.1.1面向過程與面向?qū)ο蟮某橄笕筇卣鳎悍庋b性:從對象的外部來看,除了它用來與外界進(jìn)行交互的接口之外,對象內(nèi)部就是一個黑匣子,外部看不到對象的實現(xiàn)細(xì)節(jié)繼承性:對象可以衍生出后代,后代對象將擁有父輩的全部能力多態(tài)性:一個對象變量在程序運行的不同時刻可以具有多種不同形態(tài),即指向不同類型的對象,從而具有不同的功能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)實世界中抽象出來的客觀實體封裝成類,并且類可以隱藏自己內(nèi)部的實現(xiàn)細(xì)節(jié),讓外界不可見,并把需要提供給外界的接口向外發(fā)布封裝體現(xiàn)了信息隱藏(informationhiding)在程序設(shè)計中,類(class)是創(chuàng)建對象的模板,是一組對象公共屬性和行為的抽象。一個類的實例就是該類的一個對象在抽象一組對象(屬于某一類)的公共屬性和行為時,要考慮現(xiàn)實世界問題域。大學(xué)生對象在不同的問題域中屬性和行為是不一樣的當(dāng)問題域是高校教務(wù)管理系統(tǒng)時,大學(xué)生對象的屬性可以包括:學(xué)號、姓名、年齡、籍貫、入學(xué)年份、專業(yè)、學(xué)分績、已修課程等,其行為可以包括:查詢學(xué)號、查詢專業(yè)、查詢學(xué)分績、轉(zhuǎn)專業(yè)、選課、退課、退學(xué)等當(dāng)問題域是高校財務(wù)管理系統(tǒng)時,大學(xué)生對象的屬性可以包括:學(xué)號、姓名、當(dāng)前應(yīng)繳費用、是否繳納、歷史繳費記錄等,其行為可以包括:查詢應(yīng)繳費用清單、查詢繳費狀態(tài)、查詢歷史繳費記錄、生成當(dāng)前繳費收據(jù)等156.1面向?qū)ο蟾攀?66.1.1面向過程與面向?qū)ο蟮某橄?.1.2封裝6.1.3繼承6.1.4多態(tài)6.1.3繼承繼承(Inheritance)是指一個類可以無需重新編寫現(xiàn)有類的代碼而具備現(xiàn)有類的所有功能,并在此基礎(chǔ)上可以擴(kuò)展通過繼承所創(chuàng)建的新類被稱為“派生類”、“子類”、“擴(kuò)展類”被繼承的類被稱為“基類”、“父類”、“超類”繼承體現(xiàn)了現(xiàn)實世界的分類體系,表達(dá)了“是一種”關(guān)系,符合人類的思維方式繼承可以分為單繼承和多繼承。單繼承就是一個類只有一個直接父類。而多繼承是指一個類有多個直接父類。Java語言是單繼承語言,C++語言是多繼承語言176.1.3繼承繼承(Inheritance)是指一個類可以無需重新編寫現(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)是指一個對象引用變量在程序運行的不同時刻具有多種形態(tài)具體來講,就是一個父類類型的引用變量能夠指向其任何不同子類的一個實例,從而表現(xiàn)出相應(yīng)子類實例的行為。假設(shè)定義了一個引用變量vehicle指向一個交通工具類,該引用變量可以在程序運行的某個時刻指向陸地交通工具類的一個實例,也可以指向水上交通工具類或空中交通工具類的一個實例,還可以指向火車類、汽車類等的一個實例當(dāng)一個方法的形式參數(shù)是交通工具類對象時,那么該方法可以接受的實際參數(shù)可以是其任一子類的對象。這樣,相同的方法可以接受不同類型的參數(shù),表現(xiàn)出不同的行為。換句話說,這就是同一操作作用于不同類的實例,產(chǎn)生不同的執(zhí)行結(jié)果。這也是多態(tài)性的一種外在表現(xiàn)。20內(nèi)容216.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.2類與對象對象(Object):代表現(xiàn)實世界問題域中可明確標(biāo)識的一個實體??陀^存在的事物,如:一個學(xué)生、一輛小轎車等。抽象事件,如一場比賽、一次會議等每個對象都有自己獨特的標(biāo)識、狀態(tài)、行為。對象標(biāo)識(又稱為對象ID):是程序中唯一標(biāo)識一個對象的有效標(biāo)識符對象屬性(state,又稱為特征或狀態(tài)):由具有當(dāng)前值的數(shù)據(jù)域來表示的。如一個矩形對象的數(shù)據(jù)域:寬度width為5.5和高度height為7.5,它們描述了該矩形對象的當(dāng)前屬性或狀態(tài)對象行為(behavior,亦稱為對象操作):對象操作體現(xiàn)了對象的能動性和功能,在程序設(shè)計語言中,對象操作由方法(或函數(shù))來定義。如矩形對象:getArea()、getPerimeter()。類(class):一組具有相同屬性和行為的對象的抽象。類是創(chuàng)建對象的模板。226.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問6.2類與對象類是一個模板,用來定義一組相同類型對象具有的屬性和行為。一個對象是類的一個實例(instance),對象和實例具有相同含義創(chuàng)建實例的過程稱為實例化(Instantiation)類的定義包括:屬性(數(shù)據(jù)域):用變量定義,成員變量行為(動作):用方法定義,成員方法構(gòu)造方法:用于創(chuàng)建與初始化一個對象類定義一般形式236.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問6.2類與對象示例:程序清單6-1SimpleRect.java246.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問在面向?qū)ο蠓治龊驮O(shè)計過程中,程序員可以使用UML(UnifiedModellingLanguage,統(tǒng)一建模語言)的圖形符號進(jìn)行建模,協(xié)助程序員進(jìn)行可視化分析256-2()表示一個在真實世界中能被明確區(qū)分的實體。一個類一個對象一個方法一個數(shù)據(jù)域ABCD提交單選題1分6.2類與對象對象可以先聲明后創(chuàng)建,聲明的一般形式是:類名對象名;創(chuàng)建對象的一般形式是:對象名=new類名(實參列表);對象的聲明和創(chuàng)建也可以結(jié)合在一起,其一般形式是:類名對象名=new類名(實參列表);示例:266.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問SimpleRectrect1;rect1=newSimpleRect(3.5,4.5);SimpleRectrect1=newSimpleRect(3.5,4.5);6.2類與對象對象的創(chuàng)建涉及引用類型、構(gòu)造方法、數(shù)據(jù)域默認(rèn)值1、引用類型用戶定義的類是一種用戶自定義的數(shù)據(jù)類型,也是一種引用類型(referencetype)。引用類型的變量是一個合法的標(biāo)識符,被稱為對象引用變量(referencevariable),也被稱為對象名。對象實體:‘new構(gòu)造方法’在內(nèi)存堆中為新創(chuàng)建的對象分配一塊內(nèi)存并初始化該對象的數(shù)據(jù)域,這個初始化之后的內(nèi)存塊被稱為對象實體。276.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問引用類型變量代表的內(nèi)存位置存儲的值是一個引用值基本數(shù)據(jù)類型變量代表的內(nèi)存位置存儲的值是基本類型的值6.2類與對象286.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問基本類型變量賦值將一個基本數(shù)據(jù)類型變量a賦給另一個基本數(shù)據(jù)類型變量b時,即b=a,可以直接將a的值賦給b。例如,假設(shè)已知i為2,j為0,執(zhí)行j=i,這時,直接將i的值2賦給j,j也變?yōu)?賦值前賦值后6.2類與對象296.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問引用變量賦值6.2類與對象2、構(gòu)造方法(1)構(gòu)造方法必須與所在類同名,大小寫一致。(2)構(gòu)造方法沒有返回值類型,也不能加void關(guān)鍵字。(3)構(gòu)造方法只能在創(chuàng)建一個對象時由關(guān)鍵字new調(diào)用。構(gòu)造方法允許重載,可以有多個同名但是方法簽名不一樣的構(gòu)造方法。示例:程序清單6-1SimpleRect.java通常,一個類會提供一個沒有形式參數(shù)的構(gòu)造方法(例如:SimpleRect()),這樣的構(gòu)造方法被稱為無參構(gòu)造方法。306.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問316-3以下有關(guān)構(gòu)造方法的說法,正確的是:()一個類的構(gòu)造方法可以有多個構(gòu)造方法在類聲明時被調(diào)用構(gòu)造方法只能由對象中的其它方法調(diào)用。構(gòu)造方法可以和類同名,也可以和類名不同ABCD提交單選題1分6.2類與對象提問:如果一個類沒有定義構(gòu)造方法,那么能不能創(chuàng)建該類的對象呢?能。這是因為Java編譯器對源程序進(jìn)行編譯后,會給一個沒有明確定義任何構(gòu)造方法的類自動提供一個默認(rèn)構(gòu)造方法(defaultconstructor)。默認(rèn)構(gòu)造方法是一個方法體為空的無參構(gòu)造方法當(dāng)一個類明確定義了一個或多個構(gòu)造方法時,默認(rèn)構(gòu)造方法就不再被自動提供326.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問6.2類與對象3、數(shù)據(jù)域默認(rèn)值當(dāng)一個類通過默認(rèn)構(gòu)造方法(方法體為空)創(chuàng)建對象時,該類的數(shù)據(jù)域是如何初始化的?在Java語言中,一個類的數(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對象成員訪問操作符(objectmemberaccessoperator),通過“對象名.成員變量”的方式訪問person對象的各個數(shù)據(jù)域,得到其默認(rèn)值。336.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問6.2類與對象在對象創(chuàng)建之后,每個對象具有自己的數(shù)據(jù)域,可以通過對象成員訪問操作符.來訪問對象自身的數(shù)據(jù)域和調(diào)用方法,對象成員訪問操作符使用的一般形式是:對象引用變量.數(shù)據(jù)域;對象引用變量.方法(實參列表);示例:程序清單6-4TestSimpleRect.java實例成員變量(實例變量):變量的值依賴于某個具體實例實例成員方法(實例方法):只能被具體的實例所調(diào)用,并能使用具體實例的數(shù)據(jù)域調(diào)用對象(當(dāng)前對象):調(diào)用實例方法的對象實例成員:實例變量和實例方法346.2.1類的定義6.2.2對象創(chuàng)建6.2.3對象訪問356-4對象成員訪問操作符是

[填空1]

作答填空題1分內(nèi)容366.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.3靜態(tài)成員classclassName{

成員;

構(gòu)造方法;}37成員實例成員實例變量實例常量實例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法在有些場景中,有些信息需要被一個類的所有實例共享,或者在調(diào)用成員方法時,直接使用類名調(diào)用。在這些場景中,類的靜態(tài)成員需要被使用。6.3靜態(tài)成員classclassName{

成員;

構(gòu)造方法;}38成員實例成員實例變量實例常量實例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法屬于某個具體實例6.3靜態(tài)成員classclassName{

成員;

構(gòu)造方法;}39成員實例成員實例變量實例常量實例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法通過類的一個實例調(diào)用6.3靜態(tài)成員classclassName{

成員;

構(gòu)造方法;}40成員實例成員實例變量實例常量實例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法被該類的所有實例共享6.3靜態(tài)成員classclassName{

成員;

構(gòu)造方法;}41成員實例成員實例變量實例常量實例方法靜態(tài)成員靜態(tài)變量靜態(tài)常量靜態(tài)方法通過類名即可調(diào)用,無須與類的某個實例綁定。6.3靜態(tài)成員classclassName{

成員;

構(gòu)造方法;}42成員實例成員實例變量實例常量實例方法靜態(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ù)列表)”的方式訪問靜態(tài)方法。這不僅可以避免編譯警告錯誤,而且可以很容易地識別出類中的靜態(tài)成員。6.3靜態(tài)成員44調(diào)用實例方法訪問實例數(shù)據(jù)域調(diào)用靜態(tài)方法訪問靜態(tài)數(shù)據(jù)域?qū)嵗椒o態(tài)方法實例方法VS靜態(tài)方法6.3靜態(tài)成員45publicclassTestStatic{inti=1;staticintj=2;publicstaticvoidmain(String[]args){intk1=i;//錯誤,靜態(tài)方法不能訪問實例變量imethod1();//錯誤,靜態(tài)方法不能調(diào)用實例方法method1

intk2=method2(2);//正確,靜態(tài)方法可以調(diào)用另一個靜態(tài)方法

}//實例方法可以訪問靜態(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;//錯誤,靜態(tài)方法不能訪問實例變量imethod1();//錯誤,靜態(tài)方法不能調(diào)用實例方法method1

intk2=method2(2);//正確,靜態(tài)方法可以調(diào)用另一個靜態(tài)方法

}//實例方法可以訪問靜態(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)方法訪問的是對象obj的實例變量i obj.method1();//正確,靜態(tài)方法調(diào)用的是對象obj的實例方法method1 intk2=method2(2);//正確,靜態(tài)方法可以調(diào)用另一個靜態(tài)方法 } //實例方法可以訪問靜態(tài)變量和靜態(tài)方法 publicvoidmethod1(){ i=i+j+method2(i); } //靜態(tài)方法可以訪問靜態(tài)變量 publicstaticintmethod2(intk){ returnk*j; }}正確訪問形式486-5能被一個類的所有實例共享的變量稱為()公有變量私有變量實例變量類變量ABCD提交單選題1分496-6請勾選可以添加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類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(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)的類或接口組織在一起每個包具有一個獨一無二的包名,形成自己的命名空間,有助于防止命名沖突。具體來講,在兩個不同包中出現(xiàn)類名相同的類,是不會產(chǎn)生沖突的。包聲明語句要求是程序的第一條非注釋和非空白行的語句,而且必須是某源文件的第一條語句,使用關(guān)鍵字package,其語法形式:packagepackageName;packageName(包名)既可以是由一個合法標(biāo)識符確定的名稱,也可以是由多個合法標(biāo)識符用“.”(點號)連接而成的一個名稱。如果一個類在定義時,沒有聲明包,那么表示該類被放在默認(rèn)包中。一個包的成員包括類、接口、子包。其中,一個包的類和接口在該包的編譯單元中,而一個包的子包擁有自己的編譯單元和子包。需要注意的是,包與子包是兩個獨立的編譯單元。在導(dǎo)入語句中,導(dǎo)入一個包,并不表示導(dǎo)入了其子包。52importjavafx.scene.*;可以導(dǎo)入javafx.scene包中類和接口,但是不能導(dǎo)入javafx.scene的子包javafx.scene.layout中的類和接口,因此,不能代替如下導(dǎo)入語句:importjavafx.scene.layout.*;6.4.1包一個包中不能包含兩個具有相同名字的成員。即,一個包內(nèi)的類名、接口名、子包名不能重復(fù)出現(xiàn)。例1:包java.awt有一個子包image,因此它不能包含一個以image命名的類或接口。例2:一個命名為chapter6的包,擁有一個接口Print,那么就不能定義一個包名為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)性,那么可以將這些包分組為一個模塊。項目、模塊、包之間的關(guān)系如下圖所示。556.4.2模塊module一個模塊能夠通過兩個關(guān)鍵字requires和exports,對自身所依賴(requires)的模塊和自身導(dǎo)出(exports)的包(package)進(jìn)行聲明。一個模塊只能使用其他模塊導(dǎo)出(exports)的包(package),其他模塊也只能使用該模塊導(dǎo)出(exports)的包(package)。一個模塊能將它的部分包或全部包分類為exported(導(dǎo)出的),這意味著這些被導(dǎo)出包的類和接口可以通過模塊外部的代碼訪問。如果一個模塊的某個包沒有被該模塊導(dǎo)出,那么只有模塊內(nèi)部的代碼可以訪問該包的類和接口。如果一個模塊中的代碼想要訪問另一個模塊導(dǎo)出的包,那么第一個模塊必須顯式依賴于第二個模塊。通常,新版本的集成開發(fā)環(huán)境(如Eclipse、IntellijIDEA等)在創(chuàng)建一個Java項目時,均可選擇創(chuàng)建一個模塊及其模塊描述文件module-info.java。為了不引入復(fù)雜性,本書后續(xù)的內(nèi)容和示例不討論模塊的使用以及模塊對訪問特性的影響566.4可見性修飾符576.4.1包6.4.2模塊module6.4.3public、private、包私有訪問權(quán)限6.4.3public、private、包私有訪問權(quán)限可見性修飾符:用于確定一個類以及它的成員的可見性。放置在類、方法和數(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如果一個類的成員變量只能在所在類中使用,則該成員變量必須使用的修飾符是()publicprotectedprivatestaticABCD提交單選題1分6.4.3public、private、包私有訪問權(quán)限如果沒有使用可見性修飾符放置在類、方法和數(shù)據(jù)域前,那么這些類、方法、數(shù)據(jù)域默認(rèn)具有包私有訪問權(quán)限,可以被同一個包中的成員訪問,但是不能被其他包中的成員訪問。一個類的方法和數(shù)據(jù)域無論使用哪個可見性修飾符,該類總是可以訪問自身所有的數(shù)據(jù)域和方法。因此,可見性修飾符用于指明一個類的數(shù)據(jù)域和方法是否能在該類之外被訪問。616.4.3public、private、包私有訪問權(quán)限可見性修飾符修飾數(shù)據(jù)域和方法的示例626.4.3public、private、包私有訪問權(quán)限可見性修飾符修飾類的示例63內(nèi)容646.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.5數(shù)據(jù)域封裝如果數(shù)據(jù)域是公有訪問權(quán)限,這些數(shù)據(jù)域被修改的可能性會擴(kuò)展到其他任何類。這有可能導(dǎo)致如下兩個問題:非私有的數(shù)據(jù)域可以被其他類篡改程序的可維護(hù)性變差數(shù)據(jù)域封裝:為了避免外部其他類對一個類的數(shù)據(jù)域直接進(jìn)行修改,可以使用private修飾符將數(shù)據(jù)域聲明為私有的私有數(shù)據(jù)域在類的外部不能直接被訪問,為了訪問私有數(shù)據(jù)域的值,可以提供公有的訪問方法供外部其他類調(diào)用。為了獲取私有數(shù)據(jù)域的值,提供一個獲取方法(getter)返回數(shù)據(jù)域的值為了修改私有數(shù)據(jù)域的值,提供一個設(shè)置方法(setter)為數(shù)據(jù)域設(shè)置新值656.5數(shù)據(jù)域封裝獲取方法的簽名一般形式如下:public返回值類型getPropertyName()如果返回值類型是boolean類型,一般如下定義獲取方法:pulibcbooleanisPropertyName()設(shè)置方法的簽名如下:publicvoidsetPropertyName(數(shù)據(jù)類型propertyValue)示例:程序清單6-7Rect_v1.java注意:除非有特殊要求,在設(shè)計一個類時,應(yīng)該將其所有的數(shù)據(jù)域設(shè)置為私有的,其所有的構(gòu)造方法和方法應(yīng)該被聲明為公有的。66676-8下面哪個說法不正確()可使用private修飾符封裝數(shù)據(jù)域封裝數(shù)據(jù)域使得程序易于維護(hù)封裝數(shù)據(jù)域使得程序變短封裝數(shù)據(jù)域幫助防止程序錯誤ABCD提交單選題1分內(nèi)容686.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.6變量作用域無論類的成員變量在類的何處聲明,其作用域是整個類。類的成員變量和成員方法可以在類中以任意順序出現(xiàn)。69當(dāng)類的一個成員變量基于類的另一個成員變量來進(jìn)行初始化時,則另一個成員變量必須先聲明706-9“一個類的成員變量的定義順序是任意的?!?/p>

這句話是否正確()正確錯誤AB提交單選題1分6.6變量作用域變量隱藏:如果一個局部變量和類的成員變量同名,那么局部變量優(yōu)先,而同名的類的成員變量將被隱藏(hidden)71課堂思考:下面程序的輸出是什么?72{內(nèi)容736.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.7對象與方法746.7.1對象作為方法的形參6.7.2對象作為方法的返回值6.7.3var聲明對象作為方法的局部變量6.7.1對象作為方法的形參當(dāng)對象作為方法的形參時,實參將自己的引用值傳遞給形參,形參和實參會引用同一片內(nèi)存區(qū)域,因此形參對內(nèi)存區(qū)域的改變也會影響到實參。在Java語言中,參數(shù)傳遞本質(zhì)上僅有一種方式,即值傳遞。無論一個方法的形參是基本數(shù)據(jù)類型或是引用數(shù)據(jù)類型,實參傳遞給形參的都是實參的值。示例:程序清單6-8TestPassValue.java756.7.1對象作為方法的形參76776-10當(dāng)向一個方法傳遞對象參數(shù)時,()被傳遞給方法。對象的內(nèi)容對象的一個copy對象的引用值對象的一個copy,這個copy對象的引用值A(chǔ)BCD提交單選題1分6.7對象與方法786.7.1對象作為方法的形參6.7.2對象作為方法的返回值6.7.3var聲明對象作為方法的局部變量6.7.2對象作為方法的返回值當(dāng)一個對象類型作為方法返回值,需要使用類名作為方法的返回值類型。示例:程序清單6-9TestCreateRect.java796.7對象與方法806.7.1對象作為方法的形參6.7.2對象作為方法的返回值6.7.3var聲明對象作為方法的局部變量6.7.3var聲明對象作為方法的局部變量在方法中聲明一個對象作為局部變量,有兩種方式,例如: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聲明對象作為方法的局部變量在如下情況使用關(guān)鍵字var會發(fā)生編譯錯誤:(1)多個變量聲明在一起。(2)變量聲明時沒有進(jìn)行初始化。(3)變量聲明時,賦值操作符左邊存在一個或多個方括號對。(4)變量初始化是一個數(shù)組初始化列表。(5)變量聲明在初始化時包含一個對自身的引用。Jshell驗證:826.7.3var聲明對象作為方法的局部變量836.7.3var聲明對象作為方法的局部變量846.7.3var聲明對象作為方法的局部變量85866-11下面對var關(guān)鍵字使用正確的是()

varobj=null;varf={3,4}varlist=newdouble[5];vari=1,j=2;ABCD提交單選題1分內(nèi)容876.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.8對象數(shù)組當(dāng)數(shù)組元素是某種類型的對象時,這樣的數(shù)組可被稱為對象數(shù)組。例如,下面的語句聲明并創(chuàng)建具有5個矩形對象的數(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類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.9ArrayList對象數(shù)組是長度固定的,如果用于存儲個數(shù)不定的對象,就會出現(xiàn)問題:如果對象數(shù)組長度不夠,那么不能存儲所有對象如果對象數(shù)組長度太大,那么浪費存儲空間Java語言提供了一個數(shù)組列表類ArrayListArrayList(位于java.util包中),用來存儲不限定個數(shù)的某類對象。ArrayList是一種泛型類,具有一個泛型類型E。在創(chuàng)建一個ArrayList對象時,可以用一個具體的引用類型來替代E。例如:ArrayList<String>nameOfUniversities=newArrayList<String>();906.9ArrayList從JavaSE7開始,ArrayList構(gòu)造方法中不再要求給出具體引用類型的名稱,具體地,語句如下:91ArrayList<具體引用類型>nameOfUniversities=newArrayList<具體引用類型>();ArrayList<具體引用類型>nameOfUniversities=newArrayList<>();簡化6.9ArrayList數(shù)組列表類ArrayList有三個構(gòu)造方法:(1)無參構(gòu)造方法:ArrayList(),創(chuàng)建一個初始容量為10的數(shù)組列表對象。(2)指定初始容量的構(gòu)造方法:ArrayList(intinitialCapacity),創(chuàng)建一個指定初始容量的數(shù)組列表對象。(3)從其他集合對象創(chuàng)建的構(gòu)造方法:ArrayList(Collection<?ExtendsE>c),創(chuàng)建一個數(shù)組列表對象容納指定集(Collection)對象c926.9ArrayList936.9ArrayList94示例:程序清單6-11ArrayListDemo1.java6.9ArrayList有時候需要從一個對象數(shù)組創(chuàng)建一個列表,或者相反。雖然可以通過循環(huán)實現(xiàn),但是代碼不夠簡潔,可以使用Java語言提供的API更加容易地實現(xiàn)。使用方法Arrays.asList()可以實現(xiàn)從一個對象數(shù)組創(chuàng)建一個數(shù)組列表對象,例如:String[]nameArray={"法正","郭嘉","諸葛亮"};ArrayList<String>nameList=newArrayList<>(Arrays.asList(nameArray));使用ArrayList的實例方法toArray()可以實現(xiàn)從一個數(shù)組列表對象創(chuàng)建一個對象數(shù)組,例如:String[]nameArray1=newString[nameList.size()];nameList.toArray(nameArray1);95966-12假設(shè)一個數(shù)組列表對象包含{"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è)一個數(shù)組列表對象包含{"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類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(shù)組6.9ArrayList6.10this引用6.11Java常用類6.10this引用關(guān)鍵字this用于一個對象引用自身。通過關(guān)鍵字this,可以引用對象的實例成員。通常,關(guān)鍵字this是被隱式使用的。this隱式使用示例:下一頁this引用在兩種情況下是必須顯式使用的:需要引用被方法或構(gòu)造方法的參數(shù)所隱藏的數(shù)據(jù)域時需要調(diào)用一個重載的構(gòu)造方法時996.10this引用this引用隱式使用1006.10this引用1016.10.1this引用被隱藏數(shù)據(jù)域6.10.2this調(diào)用構(gòu)造方法6.10.1this引用被隱藏數(shù)據(jù)域通常,使用數(shù)據(jù)域作為構(gòu)造方法或設(shè)置方法的參數(shù)是一個好方法,這可以使得代碼易于閱讀,并且避免創(chuàng)建不必要的名字。然而,由于參數(shù)與數(shù)據(jù)域同名,在構(gòu)造方法或設(shè)置方法中,需要顯式使用關(guān)鍵字this來引用被隱藏的數(shù)據(jù)域名稱。1026.10.1this引用被隱藏數(shù)據(jù)域被隱藏的實例變量,可以通過this引用來訪問。被隱藏的靜態(tài)變量,可以通過類名來訪問。其訪問形式為:類名.靜態(tài)變量。1036.10this引用1046.10.1this引用被隱藏數(shù)據(jù)域6.10.2this調(diào)用構(gòu)造方法6.10.2this調(diào)用構(gòu)造方法關(guān)鍵字this可以在一個類的構(gòu)造方法中使用,用于調(diào)用該類的另一個構(gòu)造方法。需要注意的是,在一個構(gòu)造方法使用this調(diào)用其他構(gòu)造方法時,this調(diào)用其他構(gòu)造方法的語句應(yīng)該是該構(gòu)造方法的第一條語句。105示例:討論題下面代碼有無錯誤?如有,請指出哪一行有錯誤。106publicclassMain{privatedoubleintrst;publicvoidf1(){rst=12;}publicvoidf2(){Mrst

=

12.5;}}內(nèi)容1076.1面向?qū)ο蟾攀?.2類與對象6.3靜態(tài)成員6.4可見性修飾符6.5數(shù)據(jù)域封裝6.6變量作用域6.7對象與方法6.8對象數(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語言的所有基本類型都有其對應(yīng)包裝類。byte——Byte、short——Short、int——Integer、long——Long、float——Float、double——Double、char——Character、Boolean——Boolean)Java語言為什么既提供基本數(shù)據(jù)類型,又提供對應(yīng)的包裝類呢?一方面,Java語言提供基本數(shù)據(jù)類型是為了性能,如果把基本數(shù)據(jù)類型作為對象使用的,那么處理對象時,Java語言是需要額外的系統(tǒng)開銷的。另一方面,Java語言提供的一些數(shù)據(jù)結(jié)構(gòu)和方法需要將引用類型作為參數(shù),于是,為了讓這些數(shù)據(jù)結(jié)構(gòu)和方法能對基本數(shù)據(jù)類型的值進(jìn)行處理,Java語言提供基本類型對應(yīng)的包裝類。例如,ArrayList<E>是一個動態(tài)的對象數(shù)組,如果要讓該數(shù)據(jù)結(jié)構(gòu)存儲整數(shù),那么必須將整數(shù)轉(zhuǎn)化成對應(yīng)的整數(shù)類類型。1096.11.1基本數(shù)據(jù)類型的包裝類數(shù)值包裝類(Byte、Short、Integer、Long、Float、Double)的使用非常相似,都具有方法:byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()。這些方法可將對象轉(zhuǎn)化為基本數(shù)據(jù)類型值。基本數(shù)據(jù)類型包裝類都是最終類(7.4節(jié)介紹),意味著所有包裝類的實例一旦創(chuàng)建,就都是不可變的,即包裝類實例包含的值就不能再改變了。所有基本數(shù)據(jù)類型包裝類的構(gòu)造方法從Java9開始成為過時方法,在未來的版本中會被移除。為了提升性能,構(gòu)建基本數(shù)據(jù)類型包裝類對象,建議采用靜態(tài)的工廠方法valueOf(工廠模式是一種設(shè)計模式,這里不展開介紹)進(jìn)行創(chuàng)建1106.11.1基本數(shù)據(jù)類型的包裝類Integer、Double創(chuàng)建對象示例:通過數(shù)值創(chuàng)建Integer、Double對象示例1116.11.1基本數(shù)據(jù)類型的包裝類通過字符串創(chuàng)建Integer、Double對象示例1121136-14下面語句是否正確,“Integer對象最好通過構(gòu)造方法創(chuàng)建”()正確錯誤AB提交單選題1分6.11.1基本數(shù)據(jù)類型的包裝類基本數(shù)據(jù)類型最大值、最小值示例1146.11.1基本數(shù)據(jù)類型的包裝類每個數(shù)值包裝類包含一些共有方法:doubleValue()、floatValue()、longValue()、intValue()、shortValue()、byteValue()1156.11.1基本數(shù)據(jù)類型的包裝類數(shù)值包裝類都有一個compareTo方法,用于比較兩個數(shù)值:1166.11.1基本數(shù)據(jù)類型的包裝類每個數(shù)值包裝類都提供了相應(yīng)的靜態(tài)解析方法parseXXX(Strings)(XXX代表Byte、Short、Int、Long、Float、Double中的任意一個),將字符串轉(zhuǎn)換成相應(yīng)的基本數(shù)據(jù)類型。1176.11.1基本數(shù)據(jù)類型的包裝類對于整數(shù)包裝類,Java還提供了一個重載的解析方法parseXXX(Strings,intradix),提供第2個參數(shù)(radix)指定基數(shù)為2、8、16,可將數(shù)值字符串解析為以指定值為基數(shù)的數(shù)值。1186.11.1基本數(shù)據(jù)類型的包裝類數(shù)值包裝類還有靜態(tài)方法toString和實例方法toString,用于將相應(yīng)的數(shù)據(jù)類型值轉(zhuǎn)換成字符串表示。1196.11.1基本數(shù)據(jù)類型的包裝類基本數(shù)據(jù)類型和其包裝類類型之間可以自動轉(zhuǎn)換?;緮?shù)據(jù)類型值被轉(zhuǎn)換為包裝類對象的過程被稱為裝箱(boxing),與之相反的過程被稱為拆箱(unboxing)。如果一個基本數(shù)據(jù)類型值出現(xiàn)在需要使用對象的上下文環(huán)境中,Java編譯器會對基本數(shù)據(jù)類型值進(jìn)行自動裝箱。如果一個包裝類對象出現(xiàn)在需要使用基本數(shù)據(jù)類型值的上下文環(huán)境中,Java編譯器會對包裝類對象進(jìn)行自動拆箱。示例:1206.11.1基本數(shù)據(jù)類型的包裝類由于基本數(shù)據(jù)類型和其包裝類類型之間可以自動進(jìn)行轉(zhuǎn)換,所以使用ArrayList類可以創(chuàng)建存儲不定個數(shù)的數(shù)值(整數(shù)或浮點數(shù)等)的列表。例如,下面創(chuàng)建一個存儲整數(shù)的列表,并對列表進(jìn)行操作,代碼如下:ArrayList<Integer>intList=newArrayList<>();intList.add(4); //整數(shù)4自動轉(zhuǎn)換為Integer對象intList.add(5); //整數(shù)5自動轉(zhuǎn)換為Integer對象inti1=intList.get(0);//索引為0的Integer對象自動轉(zhuǎn)換為整數(shù)4inti2=intList.get(1);//索引為1的Integer對象自動轉(zhuǎn)換為整數(shù)5雖然基本數(shù)據(jù)類型和其包裝類類型之間可以自動轉(zhuǎn)換,但是這并不表示在創(chuàng)建ArrayList對象時能用基本類型代替包裝類。例如,下面語句是錯誤的:ArrayList<int>intList=newArrayList<>();這是因為泛型類型E必須是引用類型,int是基本數(shù)據(jù)類型。1211226-15下列哪些語句將一個字符串s轉(zhuǎn)換為一個double值d?()d=Double.parseDouble(s);d=(newDouble(s)).doubleValue();d=Double.valueOf(s).doubleValue();以上都對ABCD提交單選題1分6.11.1基本數(shù)據(jù)類型的包裝類程序清單6-12的實例展示了ArrayList存儲不定個數(shù)浮點數(shù)的情況,模擬了一個購物結(jié)算場景。程序演示:程序清單6-12ArrayListDemo2.java123這時Java編譯器會報錯。其原因在于100是int型值不能自動裝箱為Double對象第9行的代碼會把int型值自動轉(zhuǎn)換double型值,然后double型值會自動裝箱成Double對象。假如在程序清單6-12第13行空行加一條語句是否正確,語句如下:prices.add(100);程序清單6-12所示程序在執(zhí)行時,用戶輸入數(shù)據(jù)也輸入了整數(shù)3、4,為什么程序沒有報錯呢?6.11.1基本數(shù)據(jù)類型的包裝類Integer類124數(shù)據(jù)域說明privateintvalue當(dāng)前Integer對象對應(yīng)的int值publicstaticfinaldoubleMAX_VALUE正的最大double值,(2-2-52)·21023publicstaticfinaldoubleMIN_VALUE正的最小double值,2-1074構(gòu)造方法說明public

Integer(int

value)以指定值value構(gòu)建一個Integer對象。從Java9開始,這個構(gòu)造方法將成為過時的方法。靜態(tài)方法valueOf(int)是一個更好的選擇,具有更好地空間和時間性能。public

Integer(String

s)以字符串表示的浮點值構(gòu)建一個Integer對象。從Java9開始,這個構(gòu)造方法將成為過時的方法。使用靜態(tài)方法parseInteger(String)將String轉(zhuǎn)換為int值,或使用靜態(tài)方法valueOf(String)將一個String對象轉(zhuǎn)換成一個Integer對象6.11.1基本數(shù)據(jù)類型的包裝類Integer類125常用方法說明public

byte

byteValue()返回當(dāng)前Integer對象的byte值public

short

shortValue()返回當(dāng)前Integer對象的short值public

int

intValue()返回當(dāng)前Integer對象的int值public

long

longValue()返回當(dāng)前Integer對象的long值public

float

floatValue()返回當(dāng)前Integer對象的float值public

double

doubleValue()返回當(dāng)前Integer對象的double值publicstatic

Integer

valueOf(inti)基于給定的int值返回一個Integer對象publicstatic

Integer

valueOf(String

s)返回一個Integer對象,參數(shù)s是該對象擁有的int值的字符串表示publicstatic

Integer

valueOf(String

s,intradix)返回一個Integer對象,該對象保存從指定字符串中提取的值,解析指定字符串s時,使用第二個參數(shù)給定的基數(shù)。publicstatic

int

parseInt(String

s)返回一個新的有符號十進(jìn)制int值,該值通過解析指定字符串s獲得publicstatic

int

parseInt(String

s,intradix)返回一個新的有符號int值,該值通過解析指定字符串s獲得,解析字符串s時,使用第二個參數(shù)給定的基數(shù)6.11.1基本數(shù)據(jù)類型的包裝類Integer類126常用方法說明publicstatic

int

parseUnsignedInt(String

s)自Java8開始提供該方法,把字符串s解析為無符號十進(jìn)制整數(shù),并返回該整數(shù)值publicstatic

int

parseUnsignedInt(String

s,int

radix)自Java8開始提供該方法,把字符串s解析為以第二個參數(shù)為基數(shù)的無符號整數(shù),并返回該整數(shù)值publicstatic

Integer

valueOf(String

s,int

radix)基于第二個參數(shù)給定的基數(shù),把字符串s解析為無符號整數(shù),并返回該整數(shù)值publicstatic

String

toString(inti)基于十進(jìn)制,返回一個int值i的字符串表示publicstatic

String

toBinaryString(int

i)返回整數(shù)參數(shù)i的字符串表示,這個字符串表示是參數(shù)i對應(yīng)的以2為基數(shù)的無符號整數(shù)publicstatic

String

toOctalString(int

i)返回整數(shù)參數(shù)i的字符串表示,這個字符串表示是參數(shù)i對應(yīng)的以8為基數(shù)的無符號整數(shù)publicstatic

String

toHexString(inti)返回整數(shù)參數(shù)i的字符串表示,這個字符串表示是參數(shù)i對應(yīng)的以16為基數(shù)的無符號整數(shù)publicstatic

String

toUnsignedString(int

i)自Java8開始提供該方法,返回參數(shù)i的字符串表示,這個字符串表示是參數(shù)i對應(yīng)的十進(jìn)制無符號數(shù)。6.11.1基本數(shù)據(jù)類型的包裝類Integer類127常用方法說明publicstatic

long

toUnsignedLong(int

x)將參數(shù)x轉(zhuǎn)換為無符號的long類型值public

String

toString()返回當(dāng)前Integer對象的字符串表示public

int

compareTo(Integer

anotherInteger)當(dāng)前Integer對象與給定的Integer對象anotherInteger進(jìn)行比較,比較兩個對象包含的數(shù)值,當(dāng)前者大于、等于、小于后者時,分別返回1、0、-16.11.1基本數(shù)據(jù)類型的包裝類Double類128數(shù)據(jù)域說明privatedoublevalueDouble對象對應(yīng)的double值publicstaticfinaldoubleMAX_VALUE正的最大double值,(2-2-52)·21023publicstaticfinaldoubleMIN_VALUE正的最小double值,2-1074構(gòu)造方法說明public

Double(double

value)以指定值value構(gòu)建一個Double對象。從Java9開始,這個構(gòu)造方法將成為過時的方法。靜態(tài)方法valueOf(double)是一個更好的選擇,具有更好地空間和時間性能。public

Double(String

s)以字符串表示的浮點值構(gòu)建一個Double對象。從Java9開始,這個構(gòu)造方法將成為過時的方法。使用靜態(tài)方法parseDouble(String)將一個String轉(zhuǎn)化為一個double值,或使用靜態(tài)方法valueOf(String)將一個String對象轉(zhuǎn)換成一個Double對象6.11.1基本數(shù)據(jù)類型的包裝類Double類129常用方法說明public

byte

byteValue()返回當(dāng)前Double對象的byte值public

short

shortValue()返回當(dāng)前Double對象的short值public

int

intValue()返回當(dāng)前Double對象的int值public

long

longValue()返回當(dāng)前Double對象的long值public

float

floatValue()返回當(dāng)前Double對象的float值public

double

doubleValue()返回當(dāng)前Double對象的double值publicstatic

Double

valueOf(double

d)基于給定的double值返回一個Double對象publicstatic

Double

valueOf(String

s)返回一個Double對象,參數(shù)s是該對象擁有的double值的字符串表示publicstatic

double

parseDouble(String

s)返回一個新的double值,該值由指定字符串s表示publicstatic

String

toString(double

d)返回一個double值d的字符串表示publicstatic

String

toHexString(double

d)返回一個double值d的十六進(jìn)制字符串表示public

String

toString()返回當(dāng)前Double對象字符串表示public

int

compareTo(Double

anotherDouble)當(dāng)前Double對象與給定的Double對象anotherDouble進(jìn)行比較,比較兩個對象包含的數(shù)值,當(dāng)前者大于、等于、小于后者時,分別返回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ù)的計算或者高精度浮點值的計算。BigInteger類的publicstaticfinalBigInteger數(shù)據(jù)域131數(shù)據(jù)域說明ZEROBigInteger常量0ONEBigInteger常量1TWOBigInteger常量2TENBigInteger常量106.11.2BigInteger類和BigDecimal類BigInteger類的部分構(gòu)造方法與常用方法132方法頭說明public

BigInteger(String

val)將一個BigInteger的十進(jìn)制字符串表示翻譯成一個BigInteger對象public

BigInteger(String

val,int

radix)將一個BigInteger、以指定基數(shù)radix的字符串表示翻譯成一個BigInteger對象public

BigInteger

add(BigInteger

val)返回當(dāng)前對象與給定對象val的和public

BigInteger

subtract(BigInteger

val)返回當(dāng)前對象減去給定對象val的差public

BigInteger

multiply(BigInteger

val)返回當(dāng)前對象與給定對象val的乘積public

BigInteger

divide(BigInteger

val)返回當(dāng)前對象除以給定對象val的商public

BigInteger

remainder(BigInteger

val)返回當(dāng)前對象除以給定對象val的余數(shù)public

BigInteger

pow(int

exponent)返回當(dāng)前對象的exponent次冪public

BigInteger

sqrt()返回當(dāng)前對象的平方根public

BigInteger

gcd(BigInteger

val)返回當(dāng)前對象與給定對象val的最大公約數(shù)public

BigInteger

abs()返回一個BigInteger對象,其值是當(dāng)前BigInteger對象的絕對值public

BigInteger

negate()返回一個BigInteger對象,其值是對當(dāng)前BigInteger對象取反(-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)將一個BigDecimal的字符串表示翻譯成一個BigDecimal對象public

BigDecimal(BigIntegerval)將一個BigInteger翻譯成一個BigDecimal對象,其scale為0。public

BigDecimal(double

val)將雙精度值val轉(zhuǎn)換為一個BigDecimal對象,該對象是雙精度二進(jìn)制浮點值的精確十進(jìn)制表示。public

BigDecimal(long

val)將一個long類型值val翻譯成一個BigDecimal對象,其scale為0。public

BigDecimal(int

val)將一個int類型值val翻譯成一個BigDecimal對象,其scale為0。public

BigDecimal

add(BigDecimal

val)返回當(dāng)前對象與給定對象val的和public

BigDecimal

subtract(BigDecimalval)返回當(dāng)前對象減去給定對象val的差public

BigDecimal

multiply(BigDecimal

val)返回當(dāng)前對象與給定對象val的乘積public

BigDecimal

divide(BigDecimal

val)返回當(dāng)前對象除以給定對象val的商public

BigDecimal

remainder(BigDecimal

val)返回當(dāng)前對象除以給定對象val的余數(shù)public

BigDecimal

pow(int

n)返回當(dāng)前對象的n次冪public

BigDecimal

sqrt()返回當(dāng)前對象的平方根public

BigDecimal

abs()返回一個BigDecimal對象,其值是當(dāng)前BigDecimal對象的絕對值6.11.2BigInteger類和BigDecimal類構(gòu)造方法publicBigDecimal(Stringval)的字符串形式可以有多種形式。下面是一些示例(對于左側(cè)的每個字符串,結(jié)果表示[BigInteger,s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論