《跨平臺(tái)程序設(shè)計(jì)語言》課件-第 3 章 類和對象_第1頁
《跨平臺(tái)程序設(shè)計(jì)語言》課件-第 3 章 類和對象_第2頁
《跨平臺(tái)程序設(shè)計(jì)語言》課件-第 3 章 類和對象_第3頁
《跨平臺(tái)程序設(shè)計(jì)語言》課件-第 3 章 類和對象_第4頁
《跨平臺(tái)程序設(shè)計(jì)語言》課件-第 3 章 類和對象_第5頁
已閱讀5頁,還剩92頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章類和對象1.1面向?qū)ο缶幊趟枷胫髦v人:_________

什么是面向?qū)ο竺嫦蜻^程面向過程是解決問題的常規(guī)思路,更加符合解決問題的想法,但是隨著步驟越來越多,就很難滿足需求了。面向?qū)ο竺嫦驅(qū)ο笫前褨|西分拆為各個(gè)對象,每個(gè)對象完成自己的核心動(dòng)作,分工合作,對象之間交互完成功能。什么是面向?qū)ο罄?,在真?shí)世界的學(xué)校里,會(huì)有學(xué)生和老師等實(shí)體,學(xué)生有學(xué)號(hào)、姓名、所在班級等屬性(數(shù)據(jù)),學(xué)生還有學(xué)習(xí)、提問、吃飯和走路等操作。學(xué)生只是抽象的描述,這個(gè)抽象的描述稱為“類”。在學(xué)校里活動(dòng)的是學(xué)生個(gè)體,即張同學(xué)、李同學(xué)等,這些具體的個(gè)體稱為“對象”,“對象”也稱為“實(shí)例”。面向過程和面向?qū)ο髤^(qū)別要把大象放冰箱,怎么做?提問面向過程和面向?qū)ο髤^(qū)別打開冰箱門->把大象放進(jìn)冰箱->關(guān)上冰箱門面向過程打開冰箱門打開冰箱門打開冰箱門Method1Method2Method3面向過程和面向?qū)ο髤^(qū)別兩個(gè)對象,大象和冰箱。大象有自己的固有屬性高和重量,還有兩個(gè)動(dòng)作分別是進(jìn)冰箱和出冰箱。冰箱也有自己固有屬性高和重量,動(dòng)作也有開門和關(guān)門。面向?qū)ο筇卣鳎荷砀摺⒅亓縿?dòng)作:進(jìn)冰箱、出冰箱特征:身高、重量動(dòng)作:開門、關(guān)門大象冰箱面向過程和面向?qū)ο髤^(qū)別面向過程面向過程是解決問題的常規(guī)思路,更加符合解決問題的想法,但是隨著步驟越來越多,就很難滿足需求了。面向?qū)ο竺嫦驅(qū)ο笫前褨|西分拆為各個(gè)對象,每個(gè)對象完成自己的核心動(dòng)作,分工合作,對象之間交互完成功能。第3章類和對象1.2類和對象主講人:_________

類和對象的概念(a)設(shè)計(jì)圖紙(b)申請地皮(d)可居住的房子居民自行設(shè)計(jì):根據(jù)需要,設(shè)計(jì)圖紙,包括用途、功能、布局、面積等等。向土地管理者申請:在什么地方、地點(diǎn)、相鄰關(guān)系、朝向、大小等等。給出紅線圖。申請者:根據(jù)申請的用途、以及批準(zhǔn)的地點(diǎn)、大小,在給定位置上建造房子。房子:建造完成。根據(jù)需要進(jìn)行裝修,完成所需的居住功能,形成可以居住的房子。類對象變量實(shí)例化對象面向?qū)ο蟪绦蛟O(shè)計(jì)主要步驟:定義類

用類創(chuàng)建對象。下面結(jié)合一棟房子的建造過程,來理解向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念。(c)施工建設(shè)用類定義變量類的概念類是一個(gè)概念類是對某一具體事物進(jìn)行抽象的概念,是對事物進(jìn)行描述的模型;根據(jù)觀測事物的需要,構(gòu)建一個(gè)描述事物主要特征、行為的框架,叫做類;同一事物,由于觀察的側(cè)面不同、用途不同,所提取的類也不同。例如:在進(jìn)銷存管理系統(tǒng)中,有商品、客戶、供應(yīng)商等類。商品類特征:商品編號(hào)、商品名稱、商品簡稱、商品產(chǎn)地、規(guī)格、單位、單價(jià)、數(shù)量、包裝、批號(hào)、批準(zhǔn)文號(hào)、商品簡介、供應(yīng)商編號(hào)等;行為:進(jìn)貨、退貨、銷售、出庫、盤點(diǎn)。客戶類特征:客戶編號(hào)、客戶名稱、客戶簡稱、地址、電話、傳真、郵政編碼、聯(lián)系人、聯(lián)系人電話、開戶銀行、賬號(hào);行為:購買、退貨。供應(yīng)商類特征:供應(yīng)商編號(hào)、供應(yīng)商名稱、簡稱、地址、郵政編碼、電話、傳真、聯(lián)系人、聯(lián)系人電話、開戶銀行、賬戶;行為:供貨、退貨、售后服務(wù)。成員變量(屬性)定義格式:[修飾符]?變量類型?變量名[=初始值];創(chuàng)建一個(gè)Java類在課程中,加上方括號(hào)部分表示可以缺省。privateintiAge=24;StringsName;例如[修飾符]?class?類名{[構(gòu)造方法]

成員變量(屬性)定義列表

方法列表}修飾符有:public、private、protected、static、final,在后續(xù)課程詳細(xì)說明;變量類型:可以是簡單類型、也可以是復(fù)合類型、以及自定義類型,上一章介紹過;變量名:Java合法標(biāo)識(shí)符,建議第一個(gè)字母標(biāo)識(shí)變量的類型,小駝峰命名,如b表示byte型等等;初始值:也叫默認(rèn)值,是當(dāng)變量沒有重新賦值之前的值,在大部分情況下不對變量賦初值。格式其中創(chuàng)建一個(gè)Java類publicdoubletotal(double[]x,intm){inti;doublesum=0.0;for(i=0;i<m;i++)sum+=x[i];returnsum;}例如成員方法定義格式其中修飾符有:public、private、protected、static、final,在后續(xù)課程詳細(xì)說明;返回值類型:指的是本方法有返回結(jié)果,其結(jié)果的類型;沒有返回值定義為void;方法名稱:符合標(biāo)識(shí)符定義規(guī)則,建議方法名用首字母大寫、其余小寫的形式;方法體:符合Java語法規(guī)則的語句塊。形式參數(shù)列表:形式為“類型變量名1,類型變量名2,……”,其中的類型可以是簡單類型、復(fù)合類型、自定義類型,變量名要求符合標(biāo)識(shí)符定義規(guī)則;[修飾符]?返回值類型?方法名稱([形式參數(shù)列表]){

方法體;}創(chuàng)建一個(gè)Java類作用:構(gòu)造方法的作用是實(shí)例化用該類定義的對象、且對對象中的屬性進(jìn)行初始化。形式同成員方法,但構(gòu)造方法沒有返回值類型;其修飾符為public;構(gòu)造方法名稱要求與類名同名;一個(gè)對象定義以后,被實(shí)例化時(shí)、執(zhí)行new時(shí)首先執(zhí)行的是構(gòu)造方法;在Java中,構(gòu)造方法不是必須的,如果在類中沒有定義聲明構(gòu)造方法,JVM會(huì)給這個(gè)類一個(gè)默認(rèn)的構(gòu)造方法;一個(gè)類也可以定義多個(gè)構(gòu)造方法。規(guī)定:構(gòu)造方法例:進(jìn)銷存管理系統(tǒng)進(jìn)銷存管理系統(tǒng)商品供應(yīng)商客戶客戶ID客戶名稱地址電話傳真聯(lián)系人聯(lián)系人電話開戶銀行賬號(hào)客戶ID客戶名稱地址電話傳真聯(lián)系人聯(lián)系人電話開戶銀行賬號(hào)商品ID商品名稱規(guī)格計(jì)量單位單價(jià)數(shù)量供應(yīng)商ID庫存管理至少涉及三個(gè)類例:進(jìn)銷存管理系統(tǒng)—?jiǎng)?chuàng)建一個(gè)商品類//商品類://成員變量(屬性)和方法classCommodity{ //成員變量列表 StringsID; //商品ID publicStringsName;//商品名稱 StringsSpecifications;//規(guī)格 StringsUnit; //計(jì)量單位 floatfPrice; //單價(jià) intiQuantity;//數(shù)量 StringsSupplerID;//供應(yīng)商ID //下面是方法列表 //進(jìn)貨處理,經(jīng)過經(jīng)手人驗(yàn)收即可入庫publicvoidGoodsReceiv(intiNumber,StringID){ if(ID==sID) iQuantity+=iNumber; else System.out.println(“ID錯(cuò)誤!”);}publicvoidSoldOff(intiNumber,StringID){ if(ID==sID) iQuantity-=iNumber; else System.out.println(“ID錯(cuò)誤!”); }publicvoidWarehousing(intiNumber,StringID){ System.out.println("管理員ID="+ID+"收到"+iNumber+"件"); }}商品類的方法,包括入庫、出庫等。方法的定義包括方法名、參數(shù)、方法體等。成員變量(屬性)列表,包括商品ID、名稱、規(guī)格、單位、單價(jià)、數(shù)量、供應(yīng)商等。缺省修飾符為private。例:進(jìn)銷存管理系統(tǒng)—?jiǎng)?chuàng)建一個(gè)供貨商類classSupplier{ StringsSupplierID;//客戶ID StringsName;//客戶名稱 StringsEddress;//地址 StringsTelphone;//電話 StringsFax; //傳真 StringsContacts;//聯(lián)系人 StringsContTel;//聯(lián)系人電話 StringsNank;//開戶銀行 StringsAccountNumber;//賬號(hào)

publicvoidSupplyCommodity(intiNumber,StringID){

System.out.println("供應(yīng)商品ID="+ID+","+iNumber+"件。");

}

publicvoidReturnGoods(intiNumber,StringID){

System.out.println("退貨商品ID="+ID+","+iNumber+"件");

}}例:進(jìn)銷存管理系統(tǒng)—?jiǎng)?chuàng)建一個(gè)客戶商類classCustomer{ StringsCustomerID;//客戶ID StringsName;//客戶名稱 StringsEddress;//地址 StringsTelphone;//電話 StringsFax; //傳真 StringsContacts;//聯(lián)系人 StringsContTel;//聯(lián)系人電話 StringsNank;//開戶銀行 StringsAccountNumber;//賬號(hào)

publicvoidPurchase(intiNumber,StringID){

System.out.println("購買商品ID="+ID+","+iNumber+"件。");

}

publicvoidReturnGoods(intiNumber,StringID)

{ System.out.println("退貨商品ID="+ID+","+iNumber+"件。");

}}對象對象創(chuàng)建過程publicclassStockControl{ publicstaticvoidmain(Stringargs[]){ //用Commodity類創(chuàng)建對象 CommoditycElectricFan; cElectricFan=newCommodity(); cElectricFan.sName="箱式電扇"; cElectricFan.GoodsReceiv(100,"TS20160730030"); cElectricFan.SoldOff(30,"TS20160730030"); CommoditycComputer; cComputer=newCommodity(); cComputer.GoodsReceiv(500,"HW20160730030"); cComputer.Warehousing(500,"HW20160730030"); cComputer.SoldOff(4,"HW20160730030"); }}

在構(gòu)建“類”的基礎(chǔ)上,可以創(chuàng)建對象。構(gòu)建商品(Commodity)、客戶(Customer)和供應(yīng)商(Supplier)三個(gè)類的基礎(chǔ)上,創(chuàng)建一個(gè)進(jìn)銷存(庫存管理)類。對象Commodity?cElectricFan;cElectricFan=new?Commodity();

①房子圖紙:類②登記備案,申請紅線圖:定義對象變量③建造房子:實(shí)例化對象,分配對象存儲(chǔ)空間④房子:對象定義對象變量。用已經(jīng)定義的類Commodity(相當(dāng)于要建造的房子的圖紙)定義一個(gè)對象變量cElectricFan。對象變量cElectricFan在棧(Stack)中分配一個(gè)存儲(chǔ)空間,其內(nèi)容為null。對象實(shí)例化。執(zhí)行newCommodity(),實(shí)質(zhì)是在內(nèi)存中的堆(Heap)空間分配一個(gè)可以存儲(chǔ)由Commodity類模板定義的空間,把該空間的起始地址賦值給對象變量。第3章類和對象1.3變量的作用域按照作用域的不同,變量可分為三種類型什么是變量的作用域變量的作用域指變量的存在范圍,只有在這個(gè)范圍內(nèi),程序代碼才能訪問它。當(dāng)一個(gè)變量被定義時(shí),它的作用域就被確定了。成員變量在定義類時(shí)定義的變量,它的作用域是整個(gè)類,也叫做實(shí)例變量。例如Student類有一個(gè)成員變量name,在selfIntro()方法中也能訪問這個(gè)name變量:publicclassStudent{Stringname; //定義name成員變量publicvoidselfIntro(){System.out.println("大家好,我是"+name); //使用name變量}}成員變量成員變量在對象實(shí)例化時(shí),變量直接存儲(chǔ)在堆區(qū)的對象實(shí)例中,同一個(gè)成員變量在不同對象中各自保存一個(gè)自己的副本,副本之間沒有關(guān)系,可以理解成“對象局部變量”。在實(shí)例化過程中,如果成員變量沒有賦初值,系統(tǒng)會(huì)給定初值:int類型初值為0float和double類型初值為0.0boolean類型為falsechar類型是空,編碼值為0引用類型(復(fù)合類型)是null;在定義成員變量的類型前面加上“static”的,稱為類變量,也叫靜態(tài)變量。局部變量在一個(gè)方法的內(nèi)部聲明,它的作用域是當(dāng)前方法。例如在selfIntro()方法中定義了局部變量name,只能在selfIntro()方法中訪問變量name,而在main()方法中無法訪問變量name:publicclassStudent{publicvoidselfIntro(){Stringname=“跨平臺(tái)程序設(shè)計(jì)”; //定義name局部變量}publicstaticvoidmain(){System.out.println("大家好,我是"+name); //無法使用name變量,這里是錯(cuò)誤的

}}局部變量局部變量前不能加權(quán)限修飾符;局部變量一定要賦初值方可使用;在沒有賦值之前,不能訪問局部變量;方法聲明中的局部變量的作用域?yàn)槎x該局部變量所在的方法體;其生命周期同方法體。局部變量局部變量的作用域與局部變量定義的位置有關(guān),主要需要關(guān)注的是定義局部變量所在的語句塊。publicclassStudent{publicstaticvoidmain(String[]args){{inti=0; System.out.println(i);//可以訪問}System.out.println(i);//超出i的可見范圍,不可訪問}}方法參數(shù)方法參數(shù)的作用域是當(dāng)前方法。例如以下參數(shù)name的作用域是當(dāng)前的構(gòu)造方法(方法的定義結(jié)構(gòu)和什么是構(gòu)造方法將在后面介紹):publicclassStudent{//定義name參數(shù)變量publicStudent(Stringname){name=“跨平臺(tái)程序設(shè)計(jì)”; }publicstaticvoidmain(){System.out.println("大家好,我是"+name); //無法使用name變量,這里是錯(cuò)誤的

}}總結(jié)Java中的作用域是指變量的可見范圍,包括類作用域、方法作用域、代碼塊作用域、循環(huán)作用域和局部作用域。類作用域的變量可以在類的任何方法中使用,方法作用域的變量只能在該方法中使用,代碼塊作用域和循環(huán)作用域的變量只能在該代碼塊或循環(huán)中使用,局部作用域的變量只能在該局部作用域中使用。變量的作用域規(guī)則是從內(nèi)向外,即變量的作用域范圍從小到大。當(dāng)一個(gè)變量的作用域結(jié)束后,它所占用的內(nèi)存空間也會(huì)被釋放。第3章類和對象2.1方法的定義和使用什么是方法Java方法是語句的集合,這個(gè)集合一起執(zhí)行能完成某個(gè)功能。方法就是解決一類問題的組合體,比如:加法運(yùn)算,減法運(yùn)算,很多地方都要用到,把它抽出來作為一個(gè)方法,所有地方都可以調(diào)用。方法包含于類或?qū)ο笾?。方法在程序中被?chuàng)建,在其他地方被引用。方法的本意是功能模塊,是把一個(gè)公用功能抽出來作為一個(gè)方法,設(shè)計(jì)方法的時(shí)候,要保證方法的原子性,一個(gè)方法只完成一個(gè)功能,這樣方便后期擴(kuò)展。方法方法的定義一般情況下,定義一個(gè)方法包含以下語法:方法包含一個(gè)方法頭和一個(gè)方法體。下面是一個(gè)方法的所有部分:訪問修飾符:默認(rèn)(default),告訴編譯器如何調(diào)用該方法。定義了該方法的作用域范圍。其他修飾符:可選。在定義方法時(shí)修飾符包括:靜態(tài)域修飾符static、最終域修飾符final、易失(共享)域修飾符volatile、暫時(shí)性域修飾符transient等。<訪問修飾符>[其他修飾符]<返回值類型><方法名>(參數(shù)類型參數(shù)名){...方法體...return返回值;}方法的定義返回值類型:方法可能會(huì)返回值。聲明方法返回值的數(shù)據(jù)類型。有些方法執(zhí)行所需的操作,但沒有返回值。在這種情況下,返回值數(shù)據(jù)類型是關(guān)鍵字void。方法名:是方法的實(shí)際名稱。方法名和參數(shù)表共同構(gòu)成方法簽名。小駝峰命名法:方法的名字的第一個(gè)單詞應(yīng)以小寫字母作為開頭,后面的單詞則用大寫字母開頭寫。例如:addStudent。下劃線命名法:方法的所有單詞用小寫,單詞之間用

_

連接。例如:add_student一般情況下,定義一個(gè)方法包含以下語法:<訪問修飾符>[其他修飾符]<返回值類型><方法名>(參數(shù)類型參數(shù)名){...方法體...return返回值;}方法的定義參數(shù)類型:參數(shù)像是一個(gè)占位符。當(dāng)方法被調(diào)用時(shí),傳遞值給參數(shù)。這個(gè)值被稱為實(shí)參或變量。參數(shù)列表是指方法的參數(shù)類型、順序和參數(shù)的個(gè)數(shù)。參數(shù)是可選的,方法可以不包含任何參數(shù)。參數(shù)之間用,間隔方法體:方法體包含具體的語句,定義該方法的功能。一般情況下,定義一個(gè)方法包含以下語法:<訪問修飾符>[其他修飾符]<返回值類型><方法名>(參數(shù)類型參數(shù)名){...方法體...return返回值;}方法的定義一般情況下,定義一個(gè)方法包含以下語法:<訪問修飾符>[其他修飾符]<返回值類型><方法名>(參數(shù)類型參數(shù)名){...方法體...return返回值;}方法的參數(shù)在程序設(shè)計(jì)語言中,參數(shù)有

形式參數(shù)

實(shí)際參數(shù)

之分,先來看下它們的定義:形式參數(shù):是在定義方法名和方法體的時(shí)候使用的參數(shù),目的是用來接收調(diào)用該方法時(shí)傳入的參數(shù),簡稱“形參”。實(shí)際參數(shù):在調(diào)用一個(gè)方法時(shí),方法名后面括號(hào)中的參數(shù)值稱為“實(shí)際參數(shù)”,簡稱“實(shí)參”,可以是常量、變量、方法等確定得值。要求實(shí)參和形參遵守——對應(yīng)原則。方法的參數(shù)在例子中定義了一個(gè)getMax方法,該方法有兩個(gè)int類型的參數(shù)

a

b

,該參數(shù)即為形參。在main方法中,調(diào)用了getMax方法,傳入了參數(shù)“a”和“10”,該參數(shù)即為實(shí)參。publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);inta=input.nextInt();intb=add(a,10);intc=add(a,add(a,10));System.out.println(b);}staticintgetMax(inta,intb){returna+b;}方法的參數(shù)回答:這是由方法的參數(shù)傳遞機(jī)制來控制的,參數(shù)傳遞機(jī)制有兩種:提問:實(shí)參值是如何傳入方法的呢?值傳遞引用傳遞方法的參數(shù)值傳遞:指在調(diào)用方法時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到方法中,這樣在方法中如果對參數(shù)進(jìn)行修改,將不會(huì)影響到實(shí)際參數(shù)。調(diào)用change:執(zhí)行結(jié)束:publicstaticvoidmain(String[]args){inta=10,b=20;change(a,b);System.out.println(a+"-------"+b);}publicstaticvoidchange(inta,intb){inttemp=a;a=b;b=temp;}方法的參數(shù)引用傳遞:指在調(diào)用方法時(shí)將實(shí)際參數(shù)的地址傳遞到方法中,那么在方法中對參數(shù)所進(jìn)行的修改,將影響到實(shí)際參數(shù)。classemployee{publicintid;}publicstaticvoidmain(String[]args){employeetom=newemployee();tom.id=10;employeejarry=newemployee();jarry.id=20;swap(tom,jarry);System.out.println(tom.id+"-------"+jarry.id);}//編寫方法,實(shí)現(xiàn)值呼喚功能publicstaticvoidswap(employeea,employeeb){inttemp;temp=a.id;a.id=b.id;b.id=temp;}方法的參數(shù)調(diào)用change:執(zhí)行結(jié)束:方法的return返回值java中的return語句總是和方法有密切關(guān)系,return語句總是用在方法中,有兩個(gè)作用,一個(gè)是返回方法指定類型的值(這個(gè)值總是確定的),一個(gè)是結(jié)束方法的執(zhí)行(僅僅一個(gè)return語句)。返回值類型是void。格式:返回方法指定類型的值,返回值類型不是void。格式:return返回值;return;方法練習(xí)題目:編寫一個(gè)判斷質(zhì)數(shù)的方法,并實(shí)現(xiàn)輸入一個(gè)

>2

的整數(shù)n,判斷n是否是質(zhì)數(shù),及求出0到n之間的所有質(zhì)數(shù)(包含n)。方法練習(xí)先定義判斷一個(gè)整數(shù)是否是質(zhì)素的方法://判斷一個(gè)數(shù)是否是質(zhì)數(shù)staticbooleanisPrimeNumber(intnum){//假設(shè)num是質(zhì)數(shù)(true)booleanbo=true;//通過for循環(huán)進(jìn)行驗(yàn)證for(inti=2;i<num;i++){//判斷num能否被當(dāng)前i整除if(num%i==0){//能被整除,表示num不是質(zhì)數(shù)(false)bo=false;}}//最后驗(yàn)證假設(shè)值得結(jié)果(true表示質(zhì)數(shù)|false表示不是質(zhì)數(shù))returnbo;//這里我們直接將結(jié)果返回給方法,由外部調(diào)用者去判斷}方法練習(xí)然后在主函數(shù)中調(diào)用該方法,實(shí)現(xiàn)題目要求://main主函數(shù)內(nèi)的代碼Scannerinput=newScanner(System.in);System.out.println("請輸入一個(gè)>=2得整數(shù)"); //提示輸入intnum=input.nextInt();//輸入一個(gè)數(shù)//調(diào)用方法得到num是否是質(zhì)數(shù)結(jié)果(boolean),然后判斷這個(gè)數(shù)是否是質(zhì)數(shù)booleanisNum=isPrimeNumber(num);if(isNum){System.out.println(num+"是質(zhì)數(shù)"); //為true,表示質(zhì)數(shù)}else{System.out.println(num+"不是質(zhì)數(shù)"); //為false,表示不質(zhì)數(shù)}//遍歷2~num之間所有得質(zhì)數(shù)for(inti=2;i<num;i++){//調(diào)用方法得到i是否是質(zhì)數(shù)結(jié)果(boolean),然后判斷這個(gè)數(shù)是否是質(zhì)數(shù)booleanisI=isPrimeNumber(i);if(isI){System.out.print(i+"、"); //為true,表示質(zhì)數(shù),則輸出當(dāng)前i}}方法執(zhí)行流程第3章類和對象2.2方法的重載和遞歸什么是方法的重載方法的重載方法重載是指在同一個(gè)類(class)中,允許存在一個(gè)以上的同名方法,只要它們的參數(shù)個(gè)數(shù)或者參數(shù)類型不同即可。調(diào)用時(shí)根據(jù)實(shí)參的形式,選擇與他匹配的方法執(zhí)行操作的一種技術(shù)。實(shí)現(xiàn)方法的重載參數(shù)不同是指以下幾種情況:相同位置上參數(shù)的數(shù)據(jù)類型不一樣參數(shù)的個(gè)數(shù)不一樣相同位置上參數(shù)的數(shù)據(jù)類型不一樣,同時(shí)參數(shù)的個(gè)數(shù)不一樣注意:參數(shù)個(gè)數(shù)和類型都一樣,但返回值類型不一樣,不能算重載。方法的重載例子舉個(gè)例子:publicstaticvoidmain(String[]args){System.out.println(add(1,2)); //計(jì)算1+2System.out.println(add(1,2,3)); //計(jì)算1+2+3}publicstaticintadd(inta,intb){returna+b;}publicstaticintadd(inta,intb,intc){returna+b+c;}方法的重載練習(xí)題staticvoidsayHello(stringname){System.out.println("我是"+name);}staticvoidsayHello(stringname){System.out.println("Iam"+name);}判斷代碼是否屬于重載:方法的重載練習(xí)題staticvoidsayHello(stringname){System.out.println("我是"+name);}staticvoidsayHello(intage){System.out.println("我的年齡"+age);}判斷代碼是否屬于重載:方法的重載練習(xí)題staticvoidsayHello(stringname){System.out.println("我是"+name);}staticintsayHello(stringname){return10;}判斷代碼是否屬于重載:方法的重載練習(xí)題判斷代碼是否屬于重載:staticvoidsayHello(stringname1,stringnickname1){System.out.println("我是"+name1);}voidsayHello(stringname2,stringnickname2){System.out.println("我是"+name2+",昵稱是"+nickname2);}什么是方法的遞歸方法的遞歸一個(gè)方法既可以調(diào)用其他方法又可以調(diào)用自己,而當(dāng)這個(gè)方法調(diào)用自己時(shí),就叫它遞歸。遞歸方法一直會(huì)調(diào)用自己直到某些條件滿足,因此遞歸方法要有一個(gè)明確的遞歸結(jié)束條件,也就是遞歸出口。遞歸算法解題通常顯得很簡潔,但遞歸算法解題的運(yùn)行效率較低。在遞歸調(diào)用的過程當(dāng)中系統(tǒng)為每一層的返回點(diǎn)、局部量等開辟了棧來存儲(chǔ)。遞歸次數(shù)過多容易造成棧溢出等問題。實(shí)現(xiàn)方法的遞歸遞歸分為兩種:1方法自身調(diào)用自己。直接遞歸2A方法調(diào)用B方法,B方法調(diào)用C方法,C方法再調(diào)用A方法。間接遞歸方法的遞歸練習(xí)階乘計(jì)算:輸入一個(gè)正整數(shù)n,輸出n!的值。其中n!=1*2*3*…*n。假設(shè)n=10。方法的遞歸練習(xí)不用遞歸實(shí)現(xiàn):publicstaticvoidmain(String[]args){//累積變量intsum=1;for(inti=1;i<=10;i++){sum=sum*i;}System.out.println(sum);}方法的遞歸練習(xí)使用遞歸實(shí)現(xiàn):執(zhí)行流程:publicstaticvoidmain(String[]args){intsum=factorial(10);System.out.println(sum);}//求num!的值staticintfactorial(intnum){if(num==0){return1;}//返回當(dāng)前num的階乘結(jié)果:num!=num*(num-1)!returnnum*factorial(num-1);}方法的遞歸遞歸一定要有條件限定,保證遞歸能夠停止下來,否則會(huì)形成死循環(huán)并發(fā)生棧內(nèi)存溢出(StackOverflowError)。退出方法的條件是不調(diào)用自己。遞歸中雖然限定了停止下來的條件,但是遞歸次數(shù)不能太多,否則也會(huì)發(fā)生棧內(nèi)存溢出。禁止構(gòu)造方法遞歸。注意事項(xiàng)第3章類和對象2.3構(gòu)造方法什么是構(gòu)造方法構(gòu)造方法:Java中構(gòu)造函數(shù)是在創(chuàng)建給定類型的對象時(shí)執(zhí)行的類方法。構(gòu)造函數(shù)具有與類相同的名稱,在類實(shí)例化時(shí)調(diào)用,初始化對象的數(shù)據(jù)成員。不帶參數(shù)的構(gòu)造函數(shù)稱為“默認(rèn)構(gòu)造函數(shù)”。無論什么時(shí)候,只要使用new運(yùn)算符實(shí)例化對象,并且不為new提供任何參數(shù),就會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù)。除非類是靜態(tài)的,否則Java虛擬機(jī)將為無構(gòu)造函數(shù)的類提供一個(gè)公共的默認(rèn)構(gòu)造函數(shù),以便該類可以實(shí)例化。實(shí)現(xiàn)構(gòu)造方法構(gòu)造方法語法結(jié)構(gòu):注意事項(xiàng):方法名必須與類名相同;可以有0個(gè)、1個(gè)或多個(gè)參數(shù);沒有任何返回值,包括void;只能與new運(yùn)算符結(jié)合使用,并且在對象的生命周期內(nèi)只調(diào)用一次;如果用戶沒有顯式定義構(gòu)造方法,編譯器就會(huì)默認(rèn)生成一份無參構(gòu)造方法,而一旦用戶定義了一個(gè)構(gòu)造方法,編譯器就不會(huì)自動(dòng)生成構(gòu)造方法;[訪問修飾符]類名(參數(shù)列表){函數(shù)主體;}構(gòu)造方法練習(xí)設(shè)計(jì)一個(gè)名為Person的類表示人類,這個(gè)類包括:一個(gè)名為name的String型的public成員變量;一個(gè)名為age的int型的public成員變量;一個(gè)名為info()的public方法實(shí)現(xiàn)在控制臺(tái)打印信息(格式為:我叫{name},我的年齡是{age}),返回值為void型。創(chuàng)建人類的無參構(gòu)造函數(shù)。創(chuàng)建name和age為指定值的有參構(gòu)造函數(shù)。編寫一個(gè)測試程序,創(chuàng)建兩個(gè)Person對象:一個(gè)人類的name=小A,age=30,另一個(gè)人類的name=小紅,age=18。分別調(diào)用這兩個(gè)對象的info方法執(zhí)行打印信息功能。構(gòu)造方法練習(xí)編寫Person類:publicclassPerson{ //無參的構(gòu)造函數(shù) publicPerson(){

} //有參的構(gòu)造函數(shù) publicPerson(Stringname,intage){ =name; this.age=age; } publicStringname; //姓名 publicintage; //年齡 //個(gè)人介紹方法 publicvoidinfo(){ Stringmsg="我叫"+name+",我的年齡是"+age; System.out.println(msg); }}構(gòu)造方法練習(xí)編寫mian主程序:publicstaticvoidmain(String[]args){//聲明并示例對象Personp1=newPerson("小A",30);Personp2=newPerson("小紅",18);//調(diào)用方法();();}第3章類和對象3.1包(package)包(package)一、包的創(chuàng)建package語句只能放在源程序的第一行,而且一個(gè)源程序文件只能有一個(gè)package語句;無論該源程序定義了多少個(gè)類,只要有一個(gè)package語句,就說明這個(gè)程序中的所有類均在這個(gè)包中;如果源程序前面沒有package語句為無名包、或者叫做缺省包;包可以有多級,每一級中間用“.”隔開,對應(yīng)與在當(dāng)前目錄下的文件目錄結(jié)構(gòu);編譯后的字節(jié)碼文件,必須存放在對應(yīng)的目錄中,方可以運(yùn)行;注意:在Java中,為了解決類命名沖突,引入了包的概念。所謂“包”就是Java的名字空間。Java采用與操作系統(tǒng)一致的目錄結(jié)構(gòu),實(shí)現(xiàn)包的聲明。Java包聲明格式,在源程序的第1行加上語句:packagepackagename.subpackagename.subpackagename;packagermation;publicclassStudent{publicstaticvoidmain(Stringargs[]){ClassStudentstu=newClassStudent("ZhangYang",'M',24);stu.Study("OperatingSystem",90);}}classClassStudent{Stringname;charsex;intage;publicvoidStudy(Stringcourse,intscore){//登記學(xué)習(xí)成績System.out.println(name+”\t“+course+”\t”+score);}}包(package)定義一個(gè)包,保存在rmation目錄中。示例Java包應(yīng)用示例包的創(chuàng)建其中:路徑名用于指定編譯后的包存放的位置。如果把包保存在當(dāng)前目錄下,對于上述源程序,編譯如下:Javac–d.Student.Java此時(shí),Java編譯程序Javac.exe會(huì)自動(dòng)創(chuàng)建對應(yīng)的目錄結(jié)構(gòu)、且把字節(jié)碼文件保存在包目錄中。如上例中,Java會(huì)在當(dāng)前目錄“.”下自動(dòng)創(chuàng)建一個(gè)叫做“demo”的目錄,同時(shí)在demo目錄下創(chuàng)建一個(gè)叫做“information”的目錄,并且把編譯好的兩個(gè)字節(jié)碼文件Student.class和ClassStudent.class保存在information目錄中。Javac–d路徑名源程序文件名.Java5.編譯帶有包語句的源代碼程序時(shí),用如下格式:包的創(chuàng)建注意必須在當(dāng)前目錄下運(yùn)行,不能進(jìn)入目錄./demo/information目錄下運(yùn)行。Java包結(jié)構(gòu)全名.程序名6.運(yùn)行帶包結(jié)構(gòu)的程序時(shí),采用如下格式:如上述程序的運(yùn)行格式如下:Javarmation.Student或者Javademo/information/Student包的導(dǎo)入(import)自動(dòng)導(dǎo)入包java.lang.*程序設(shè)計(jì)經(jīng)常用到的String、System等類,這些類屬于java.lang.*底下的類,這些類如果程序設(shè)計(jì)者沒有導(dǎo)入,則Javac.exe在編譯時(shí),會(huì)自動(dòng)導(dǎo)入;程序?qū)氲陌齤ava.lang.*包外,其他類包如果程序沒有導(dǎo)入,編譯時(shí)將導(dǎo)致錯(cuò)誤,也就是說,程序必須導(dǎo)入類包。導(dǎo)入類包的格式:import包的路徑.包名;注意包導(dǎo)入是一個(gè)語句,因此要用“;”結(jié)束。importjava.awt.event.*;importjava.awt.*;publicclassImportPackage{publicstaticvoidmain(Stringargs[]){FrameMyWin=newFrame();MyWin.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});MyWin.setTitle("Mywindow");MyWin.setResizable(true);MyWin.setBounds(120,150,400,200);MyWin.setVisible(true);}}包的導(dǎo)入(import)導(dǎo)入java.awt.*包。這個(gè)導(dǎo)入包語句的含義是:導(dǎo)入在這個(gè)目錄下的所有字節(jié)碼文件,不包含其中的目錄。示例創(chuàng)建一個(gè)窗口它需要用到:java.awt.*和java.wat.event.*這里面的包,如果沒有導(dǎo)入這些包,編譯將出現(xiàn)錯(cuò)誤。導(dǎo)入java.awt.event.*包。這個(gè)導(dǎo)入包語句的含義是:導(dǎo)入在這個(gè)目錄下的所有字節(jié)碼文件,不包含其中的目錄。使用自建類包在團(tuán)隊(duì)開發(fā)中,需要從基礎(chǔ)類開始開發(fā),逐層構(gòu)建,形成最終的軟件系統(tǒng)。項(xiàng)目規(guī)劃、設(shè)計(jì)人員也可以用包的形式,把抽象類、接口類發(fā)送給開發(fā)組中的成員:開始開發(fā)的基礎(chǔ)類,經(jīng)過測試,形成自己項(xiàng)目的包,便可以提供給項(xiàng)目的其他開發(fā)人員使用。一部分成員根據(jù)抽象類、接口實(shí)現(xiàn)類要求,進(jìn)行相應(yīng)開發(fā);其他人員則可以直接使用接口、抽象類進(jìn)行業(yè)務(wù)層、或者邏輯層的編寫。在下面列中,生成:有一個(gè)包目錄為rmation包含有ClassStudent.class字節(jié)碼;另一個(gè)是ClassCourse.class字節(jié)碼文件,保存在demo包目錄中;創(chuàng)建包程序(1):在包目錄demo下創(chuàng)建一個(gè)ClassCourse.class的字節(jié)碼文件packagedemo;publicclassClassCourse{ Stringcourse; floatcredit; inthour; publicClassCourse(Stringcourse,floatcredit,inthour){ this.course=course; this.credit=credit; this.hour=hour; } publicvoidModifyCredit(floatcredit){ this.credit=credit; } publicvoidModifyHour(inthour){ this.hour=hour; } publicvoidCourseInf(){ System.out.println("Course:\n"+"\tName:"+course+ "\n\tCredit:"+credit+"\n\tHours:"+hour); }}創(chuàng)建包程序(2):packagedemo.information;publicclassClassStudent{ Stringname; charsex; intage; publicClassStudent(Stringname,charsex,intage){ =name; this.sex=sex; this.age=age; } publicvoidStudy(Stringcourse,intscore){ System.out.println(name+"\t"+course+"\t"+score); } publicvoidStudentInf(){ System.out.println("Student:"+"\n\tName:"+name+ "\n\tSex:"+sex+"\n\tAge:"+age); }}在包目錄rmation下創(chuàng)建一個(gè)ClassStudent.class的字節(jié)碼文件importdemo.ClassCourse;importrmation.ClassStudent;publicclassManagement{publicstaticvoidmain(Stringargs[]){ClassStudentstu=newClassStudent("ZhangYang",'F',21);ClassCoursecur=newClassCourse("OperatingSystem",3.5f,64);cur.CourseInf();stu.StudentInf();}}導(dǎo)入自建包:導(dǎo)入在chengyi目錄包的ClassCourse.class節(jié)碼文件,在這里直接指定一個(gè)字節(jié)碼文件。導(dǎo)入在rmation目錄包的ClassStudent.class節(jié)碼文件,同樣也是直接指定一個(gè)字節(jié)碼文件。值得注意的是:放在包中供其他程序?qū)氲念?,其引用?quán)限必須是“public”,否則將無法導(dǎo)入。發(fā)布如果需要發(fā)布,可以通過jar命令把它們打成school.jar包,放在當(dāng)前目錄中,命令如下:cvf—命令參數(shù),要求jar命令創(chuàng)建一個(gè)jar包,且顯示創(chuàng)建過程;school.jar—要生成的jar包;demo—需要打包的位置。jarcvfschool.jardemo其中:總結(jié)包:package,主要用于解決類名沖突引入的,用目錄結(jié)構(gòu)實(shí)現(xiàn);包的創(chuàng)建:包的導(dǎo)入:在程序的第一個(gè)語句:package包名1.包名2.包名3;在編譯時(shí),javac–d路徑源程序編譯程序會(huì)根據(jù)package語句設(shè)置額報(bào)名結(jié)構(gòu),在指定的路徑上創(chuàng)建相應(yīng)的目錄結(jié)構(gòu),并把編譯好的字節(jié)碼文件(.class)保存到package語句指定的最后一級的目錄中。創(chuàng)建包后:運(yùn)行程序必須帶包名。在java程序中,引用某個(gè)類,必須在程序的前面導(dǎo)入對應(yīng)的包;

自動(dòng)導(dǎo)入包:java.lang.*包是編譯程序自動(dòng)導(dǎo)入的,不需要程序中加入導(dǎo)入語句;

自建包必須導(dǎo)入,才能引用包中的類。第3章類和對象3.2常用訪問修飾符訪問權(quán)限一、類中成員變量與方法的訪問權(quán)限所謂“訪問權(quán)限”,是指對象訪問自己類中的成員變量、方法的權(quán)限。一個(gè)對象,經(jīng)過定義、用構(gòu)造方法實(shí)例化后,可以通過這個(gè)對象操作類中的變量和方法。在類中哪些變量、哪些方法允許對象通過“.”運(yùn)算符進(jìn)行訪問,是由定義類時(shí)給定的訪問權(quán)限修飾符類體現(xiàn)的。Java的訪問權(quán)限修飾符包括:public、private和protected。private—私有的。用private修飾的變量和方法,只允許類中的方法訪問;在其他類中創(chuàng)建的對象,無權(quán)訪問私有變量和方法;public—公共的。用public修飾的變量和方法,不僅允許類中的方法訪問,也允許在其他類中創(chuàng)建的對象、通過“.”操作符進(jìn)行訪問;protected—受保護(hù)的。用protected修飾的變量和方法,允許在同一個(gè)包中的其他類中的方法通過該類的類名訪問這些變量和方法。訪問權(quán)限所謂“訪問權(quán)限”,是指對象訪問自己類中的成員變量、方法的權(quán)限。一個(gè)對象,經(jīng)過定義、用構(gòu)造方法實(shí)例化后,可以通過這個(gè)對象操作類中的變量和方法。在類中哪些變量、哪些方法允許對象通過“.”運(yùn)算符進(jìn)行訪問,是由定義類時(shí)給定的訪問權(quán)限修飾符類體現(xiàn)的。Java的訪問權(quán)限修飾符包括:public、private和protected。一、成員變量與方法的訪問權(quán)限友好的—沒有用private、public或者protected修飾的變量和方法,被稱為友好變量和友好方法。友好變量和友好方法允許在同一個(gè)包中,不同類中用該類創(chuàng)建的對象,通過“.”運(yùn)算符訪問。如上一節(jié)中,我們把ClassStudent類放在“rmation”包中,把ClassCourse類放在“chengyi”包中,而應(yīng)用這兩個(gè)類的Management類放在當(dāng)前目錄中,它們?nèi)叨疾辉谝粋€(gè)包中,因此,ClassStudent和ClassCourse類中,Management要訪問的方法和變量都必須是public權(quán)限。訪問權(quán)限權(quán)限控制修飾符本類同一包中的類繼承類不同包中的類private√×××缺省(友好的)√√××protected√√√×public√√√√成員訪問權(quán)限是控制本類、同一個(gè)包的類、繼承類和其他類的訪問成員變量和成員方法的權(quán)限。父類的protected成員是包內(nèi)可見的,并且對子類可見;若子類與父類不在同一包中,在子類中,子類實(shí)例可以訪問其從父類繼承而來的protected方法,而不能訪問父類實(shí)例的protected方法。protected權(quán)限:訪問權(quán)限類權(quán)限修飾包內(nèi)可以訪問包外可以訪問default(空)√×public√√缺省自建包:在同一文件夾中的類,被視作是同一自建包中的類,這個(gè)包叫做缺省自建包;Java缺省包:java.lang包。二、類的訪問權(quán)限外部類的權(quán)限修飾為:public和default(空);類用default(空)修飾時(shí),該類僅在包內(nèi)可見、可以訪問,在包外不可訪問;類用public修飾時(shí),則同一包內(nèi)可以訪問、包外同樣訪問。三、類的權(quán)限修飾符與成員的權(quán)限修飾符的關(guān)聯(lián)首先根據(jù)成員所在類的修飾符,可以確定該類的對象是包內(nèi)可訪問、還是包外可訪問。再根據(jù)成員的權(quán)限修飾符,可以確定成員在哪些類中可以訪問。packageEduAdmin;importjava.util.ArrayspublicclassTeachingPlan{publicStringcourseName;protectedintHours;floatcredit;privateintsemester;publicstaticvoidmain(Stringargs[]){TeachingPlaned=newTeachingPlan("JavaProgramming",75,3.5f);ed.semester=5;//在第5學(xué)期開課ed.adjustHours(16);ed.infOfTeachingPlan();Teachingteaching=newTeaching("LiFeiPeng","JavaProgramming");teaching.dayOfWeek=newint[]{3,5};//教學(xué)安排

teaching.InfoTeaching();}訪問權(quán)限例:編寫一個(gè)包“EduAdmin”,包含兩個(gè)類,一個(gè)為教學(xué)計(jì)劃管理、另一個(gè)為教學(xué)管理。課程名稱courseName為public權(quán)限,所有類都可以訪問;課時(shí)數(shù)Hours為protected權(quán)限只能在同一包的類對象訪問;學(xué)分?jǐn)?shù)credit為友好成員變量,只能在同一包有訪問權(quán)限;而開課學(xué)期semester為private權(quán)限只能是本類對象訪問。publicTeachingPlan(Stringcourse,intHours,floatcredit){this.courseName=course;this.Hours=Hours;this.credit=credit;}protectedvoidmakePlan(intsemester){this.semester=semester;}privatevoidadjustHours(inthoursPerCredit){this.Hours=(int)this.credit*hoursPerCredit; }publicvoidinfOfTeachingPlan(){System.out.println("Course:"+courseName+"\nHours:"+Hours+"\nCredit:"+credit+"\nSemester:"+semester);}}訪問權(quán)限練習(xí)—編寫一個(gè)包“EduAdmin”定義一個(gè)訪問權(quán)限為protected的方法makPlan。由于是在類中的方法,可以訪問類中的所有成員變量:包括private訪問權(quán)限的成員變量semester。定義一個(gè)訪問權(quán)限為private的方法adjustHours。由于是在類中的方法,可以訪問類中的所有成員變量。定義一個(gè)訪問權(quán)限為public的方法infOfTeachingPlan。由于是在類中的方法,可以訪問類中的所有成員變量。定義本類的構(gòu)造方法。由于是在類中的方法,可以訪問類中的所有成員變量:包括public權(quán)限的courseName、protected權(quán)限的Hours、或者是友好成員變量credit。classTeaching{publicStringteacher;publicStringcourse;protectedintdayOfWeek[];publicTeaching(Stringteacher,Stringcourse){this.teacher=teacher;this.course=course;}publicstaticvoidmain(Stringargs[]){TeachingPlantp=newTeachingPlan("OperatingSystem",54,2.5f); tp.makePlan(5); //tp.adjustHours(16); //不能訪問 //tp.semester=5; //不能訪問

tp.credit=3.0f; //合法的 tp.Hours=60; tp.infOfTeachingPlan();}訪問權(quán)限練習(xí)—編寫一個(gè)包“EduAdmin”上課教師teacher和承擔(dān)課程course為public訪問權(quán)限,所有類的對象都可以訪問;每周那一天上課dayOfWeek為protected訪問權(quán)限,只能同一包中的類對象、也就是TeachingPlan類的對象可以訪問。訪問權(quán)限練習(xí)—編寫一個(gè)包“EduAdmin”上述訪問權(quán)限設(shè)置后:在Teaching類中的main()方法中,可以訪問TeahingPlan類對象的makePlan()和infOfTeahingPlan()方法、以及Hours成員變量,但不能訪問adjustHours()方法。在TeachingPlan類對象中,可以訪問Teaching類對象的infOfTeahing()方法和dayOfWeek成員變量。publicvoidInfoTeaching(){System.out.println("Teacher:"+teacher+"\nCourse:"+course+"\nDayofweek:"+Arrays.toString(dayOfWeek));}}importEduAdmin.TeachingPlan;publicclasseduAdminstration{Stringmanager;intposLevel;publiceduAdminstration(Stringname,intlevel){this.manager=name;this.posLevel=level;}publicvoidinfOfManager(){System.out.println("Manager:"+manager+"\nPositionlevel:"+posLevel);}publicstaticvoidmain(Stringargs[]){eduAdminstrationeduAdm=neweduAdminstration("ZhangQing",11);TeachingPlantp=newTeachingPlan("DataStructure",80,4.5f);Tp.courseName=”UserInterfaceDesign”;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論