面向?qū)ο蟪绦蛟O(shè)計(jì)GxwJavapart.ppt_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)GxwJavapart.ppt_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)GxwJavapart.ppt_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)GxwJavapart.ppt_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)GxwJavapart.ppt_第5頁(yè)
已閱讀5頁(yè),還剩260頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1 面向?qū)ο蟪绦蛟O(shè)計(jì) ForJAVA 教材 JAVA語(yǔ)言導(dǎo)學(xué)出版 機(jī)械工業(yè)出版社編著 MaryCampione KathyWalrathet al參考文獻(xiàn) JAVA語(yǔ)言程序設(shè)計(jì) 基礎(chǔ)篇編著 Y DanielLiang出版 機(jī)械工業(yè)出版社 2 第11章Java起步 3 Java簡(jiǎn)史 Internet迅猛發(fā)展Java語(yǔ)言正式問(wèn)世被美國(guó)著名雜志PCMagazine評(píng)為1995年十大優(yōu)秀科技產(chǎn)品之一 JamesGosling領(lǐng)導(dǎo)的Green小組開(kāi)發(fā)了面向數(shù)字家電的Oak語(yǔ)言 推出了Java2平臺(tái) 性能上有所提高 而且對(duì)Java的基本模式進(jìn)行了完善 并提供了更為豐富的API 1991 1995 1998 4 Java2版本劃分 5 Java語(yǔ)言主要特性 WriteOnceRunAnywhere JVM 在語(yǔ)言級(jí)支持多線程 C 必須第三方庫(kù) 取消了多重繼承 指針 自動(dòng)地內(nèi)存垃圾回收 分布式 Java程序可以在多臺(tái)機(jī)器上協(xié)同計(jì)算 RMI 動(dòng)態(tài)性 JVM的ClassLoader支持類的動(dòng)態(tài)裝載 甚至允許動(dòng)態(tài)地重新裝入已修改的代碼 同時(shí)應(yīng)用程序繼續(xù)執(zhí)行 反射機(jī)制 可靠性 由于取消指針 內(nèi)存自動(dòng)回收 使得程序更為健壯 安全性 ClassLoader將類裝載入JVM運(yùn)行前會(huì)進(jìn)行安全檢查 用戶可以配置安全策略 6 Java程序及其運(yùn)行機(jī)制 Java虛擬機(jī) 在真實(shí)機(jī)器中用軟件模擬實(shí)現(xiàn)的一種抽象的機(jī)器 Java虛擬機(jī)規(guī)范 負(fù)責(zé)解釋和執(zhí)行Java程序編譯后產(chǎn)生的字節(jié)碼 JavaAPI是Java系統(tǒng)提供的預(yù)先定義好的軟件組件的集合 它們提供許多可供程序員調(diào)用的常用功能豐富的API為程序員提供了極大的方便 但也是學(xué)習(xí)的難點(diǎn) 7 Java語(yǔ)言規(guī)范 API JDK IDE Java語(yǔ)言規(guī)范 JavaLanguageSpecification JLS Java語(yǔ)言的語(yǔ)法和語(yǔ)義技術(shù)性定義 應(yīng)用程序接口 ApplicationProgramInterface API Java預(yù)定義類和接口 Java開(kāi)發(fā)工具包 JavaDevelopmentKit JDK 包含軟件庫(kù) 編譯器 解釋器以及其它工具 集成開(kāi)發(fā)環(huán)境 IntegratedDevelopmentEnvironment IDE 在圖形界面中 完成編輯 編譯 調(diào)試和在線幫助等功能 8 JavaAPI手冊(cè)及JDK 9 Java程序運(yùn)行機(jī)制 操作系統(tǒng) 源代碼 可執(zhí)行代碼 目標(biāo)碼 編譯 連接 運(yùn)行 源代碼 字節(jié)碼 編譯 解釋執(zhí)行 Java解釋器 傳統(tǒng)語(yǔ)言的運(yùn)行機(jī)制 Java語(yǔ)言的運(yùn)行機(jī)制 10 Java程序類型 Java應(yīng)用程序 JavaApplication 是獨(dú)立完整的程序在命令行調(diào)用獨(dú)立的解釋器軟件即可運(yùn)行主類必須有main方法 這也是程序的入口Java小程序JavaApplet 是指在瀏覽器里運(yùn)行的Java小程序 一般來(lái)說(shuō)客戶端是指用戶所使用的瀏覽器 JavaServlet 是在服務(wù)器端執(zhí)行的Java程序 為了能夠支持Servlet的運(yùn)行 服務(wù)器端必須安裝包含Java虛擬機(jī)的服務(wù)器軟件 Tomcat WebLogic WebSphere 這種能夠支持服務(wù)端小程序的服務(wù)器一般被稱為應(yīng)用服務(wù)器 Servlet容器 11 Java開(kāi)發(fā)環(huán)境 JDK J2SDK JavaDeveloperKit JDK1 2 J2SDK1 3 J2SDK1 4 JDK5 0 J2SDK1 5 JDK6 0Java集成開(kāi)發(fā)環(huán)境 IDE VisualJ 不再支持 不要使用 NetBeansJBuilderEclipseWSAD JCreator 建議開(kāi)始不要使用IDE 使用JDK 通過(guò)命令行方式編譯和運(yùn)行Java程序 不要過(guò)度依賴IDE 12 JDK的安裝與設(shè)置 從 13 Java運(yùn)行環(huán)境配置 建議創(chuàng)建一個(gè)批處理文件 bat文件 在批處理文件里設(shè)置環(huán)境變量rem假設(shè)JDK安裝在D JDK6目錄下setJAVA HOME D JDK6 binsetpath path JAVA HOME setclasspath classpath E ch05 bin 14 Java實(shí)用程序簡(jiǎn)介 javac Java編譯器 將Java源代碼編譯為字節(jié)碼 java Java解釋器 用來(lái)解釋執(zhí)行Java程序的字節(jié)碼文件 class appletviewer 小程序?yàn)g覽器 一種執(zhí)行HTML文件上的Java小程序類的Java瀏覽器 javadoc 根據(jù)Java源代碼及其說(shuō)明語(yǔ)句生成的HTML文檔 jdb Java調(diào)試器 可以逐行地執(zhí)行程序 設(shè)置斷點(diǎn)和檢查變量 javah 產(chǎn)生可以調(diào)用Java過(guò)程的C過(guò)程 或建立能被Java程序調(diào)用的C過(guò)程的頭文件 Javap Java反匯編器 顯示編譯類文件中的可訪問(wèn)功能和數(shù)據(jù) 同時(shí)顯示字節(jié)代碼含義 所有這些命令可以列出幫助信息command help 15 編輯源代碼 一般情況下 我們可以使用系統(tǒng)平臺(tái)下的任何文本編輯器進(jìn)行源代碼的編輯 在Windows平臺(tái)下常用的是Window系統(tǒng)自帶的 記事本 程序或 寫(xiě)字板 程序Java源碼大小寫(xiě)敏感Java源碼文件的擴(kuò)展名 javaJava源程序文件也不能隨意命名 其文件名必須與程序中主類 public 的類名完全相同 包括大小寫(xiě)在內(nèi)一個(gè)Java源文件里只能有一個(gè)public類 16 創(chuàng)建 編譯和執(zhí)行Java程序 創(chuàng)建和編輯源代碼可以使用任何文本編譯器創(chuàng)建和編輯源代碼 文件名必須與公共的類名一致 文件后綴為 java編譯在控制臺(tái)中執(zhí)行 javac源文件名生成 class字節(jié)碼文件執(zhí)行在控制臺(tái)中執(zhí)行 java類名 17 MyFirstJavaApp java 注意類名和文件名相同 含main的類必須用public Java也支持多行注釋 包含在 中的為javadoc注釋 在每個(gè)包 Package 每個(gè)類 及屬性方法前加上javadoc注釋可以自動(dòng)生成基于HTML的幫助文檔packageCh11 defineapackagecontainingalldemosourcecodeofchapter11 TheMyFirstJavaAppclassimplements ansimpleapplicationthatdisplay HelloWorld totheconsole authorXiwuGu publicclassMyFirstJavaApp paramargs commandlinearguments publicstaticvoidmain String args JAVA是純OOP 沒(méi)有全局函數(shù) main也必須 封裝在類里System out println HelloWorld out是System的類變量 靜態(tài)數(shù)據(jù)成員 PrintStream類型 println是out的方法 18 編譯JAVA程序 設(shè)置好path及classpath在JAVA源文件所在目錄下輸入javacMyFirstJavaApp java在當(dāng)前目錄下會(huì)生成MyFirstJavaApp class可以指定輸出的 class文件保存的目錄javacMyFirstJavaApp java dbin 將輸出的 class文件保存在當(dāng)前目錄的子目錄bin下 19 運(yùn)行Java程序 要執(zhí)行一個(gè)Java程序非常簡(jiǎn)單 只需在字節(jié)碼文件所在目錄下輸入下列命令就可以了 java字節(jié)碼文件名注意不要 class后綴 20 Suggestionfordevelopingprogrammingskill Thebestwaytostartprogrammingistohaveaterminalrunninganinteractivelanguageandafriendsittingnearbywhoalreadyknowsthelanguageandhassomethingelsetodobutcanbeinterruptedwithquestions Andyoujusttrystuff tillmoreandmoreyougetthefeelofit Andyoufindyourselfwritingprogramsthatwork Nelson Ted ComputerLib MicrosoftPress 1987 21 第12章面向?qū)ο缶幊?22 面向?qū)ο蟮木幊谈拍?對(duì)象和類類和對(duì)象的UML表示面向過(guò)程vs面向?qū)ο笙⒗^承接口 23 什么是對(duì)象 對(duì)象 軟件對(duì)象 是變量和相關(guān)方法的軟件組合 是對(duì)現(xiàn)實(shí)世界世界對(duì)象的抽象對(duì)象具有狀態(tài)和行為同一類對(duì)象的行為一致 但狀態(tài)不同 24 什么是類 類 class 定義了同一類對(duì)象共有的屬性和方法 類是對(duì)象的模板 藍(lán)圖 對(duì)象是類的實(shí)例 25 類的示例 下面是一個(gè)圓類 classCircle doubleradius 1 0 Circle radius 1 0 Circle doubler radius r doublefindArea returnradius radius 3 14159 數(shù)據(jù)字段 方法 構(gòu)造函數(shù) Circle c1radius 1 0 Circle c2radius 10 0 Circle c3radius 15 0 26 類和對(duì)象的UML表示 類的UML表示 類名 數(shù)據(jù)字段 方法 對(duì)象的UML表示 對(duì)象名 類名 數(shù)據(jù)字段值 構(gòu)造函數(shù) 27 面向過(guò)程vs面向?qū)ο?面向過(guò)程以數(shù)據(jù)結(jié)構(gòu)來(lái)描述問(wèn)題以過(guò)程 函數(shù) 來(lái)描述算法數(shù)據(jù)結(jié)構(gòu)和算法是分離的 不易維護(hù)及軟件復(fù)用面向?qū)ο髷?shù)據(jù)結(jié)構(gòu)及算法描述被封裝在類里用類的繼承來(lái)實(shí)現(xiàn)軟件復(fù)用支持多態(tài)只要接口不變 父類的具體實(shí)現(xiàn)改變了不會(huì)影響子類 易于維護(hù) 28 消息及其組成 消息的發(fā)送者A及目的對(duì)象B希望對(duì)象B要執(zhí)行的方法的名稱 ChangeGears方法所需參數(shù) lowerGear 汽車(chē) 駕駛員 ChangeGears lowerGear 單獨(dú)的一個(gè)對(duì)象沒(méi)什么作用 一個(gè)復(fù)雜的軟件系統(tǒng)的功能通過(guò)多個(gè)對(duì)象間的交互實(shí)現(xiàn) 對(duì)象之間的交互是通過(guò)相互發(fā)送消息實(shí)現(xiàn)的 當(dāng)對(duì)象A 駕駛員 希望對(duì)象B 汽車(chē) 執(zhí)行時(shí)方法 切換到低檔 時(shí) 對(duì)象A發(fā)送消息給對(duì)象B 消息包括 消息發(fā)送具體實(shí)現(xiàn) 在對(duì)象A的某個(gè)方法里調(diào)用對(duì)象B的ChangeGears lowerGear 29 繼承 繼承是子類能自動(dòng)地共享父類中定義的數(shù)據(jù)和方法的機(jī)制 30 單重繼承和多重繼承 單重繼承 一個(gè)子類只有一個(gè)直接父類多重繼承 一個(gè)子類可以有多個(gè)直接父類JAVA只支持單重繼承JAVA繼承都是public繼承 因此在JAVA術(shù)語(yǔ)里只有子類 父類 沒(méi)有基類和派生類 java lang Object類是所有JAVA類的祖先類 31 接口 interface 接口interface也是一種類 包含常量和方法的定義 無(wú)論如何 接口定義的所有變量都是publicstaticfinal類型 所有方法都是publicabstract方法 注意 abstract方法即C 的純虛函數(shù) 因此 接口相當(dāng)于抽象類 不能擁有對(duì)象 接口是無(wú)關(guān)對(duì)象進(jìn)行彼此交互的協(xié)議 無(wú)關(guān)對(duì)象是指在類的層次結(jié)構(gòu)中沒(méi)有相關(guān)性 32 接口示例 publicinterfaceFlyer voidtakeOff voidland voidfly classAirplaneimplementsFlyer publicvoidtakeOff 加速直到離地升空 收起起落架 publicvoidland 放下起落架 減速并降低副翼直到降落 剎車(chē) publicvoidfly 保持引擎運(yùn)轉(zhuǎn) 接口方法的訪問(wèn)Flyerf newAirPlane f takeOff f fly f land 33 接口和繼承 34 接口 Java類可以實(shí)現(xiàn)多個(gè)接口 若要能產(chǎn)生實(shí)例對(duì)象 則必須覆蓋定義每個(gè)接口的函數(shù) 接口中的常量也可以被隱藏 可使用接口名限定訪問(wèn)被隱藏的接口常量 如果類被定義為public的 通常要求存儲(chǔ)在與類同名的Java文件 35 Main java 因classMain為public的interfaceI1 ints 1 t 2 缺省是且只能是publicstaticfinal的intf 缺省是publicabstract interfaceI2 ints 1 缺省是且只能是publicstaticfinal的intf 缺省是publicabstract classTestimplementsI1 I2 intt 隱藏了I1 注意這里的t是實(shí)例變量publicintf returnI1 t I2 s publicclassMain publicstaticvoidmain String args System out println newTest f 36 Java程序結(jié)構(gòu) Java程序由若干包構(gòu)成 可以使用無(wú)名的缺省包 JAVA里的包作用相當(dāng)于C 的namespace包由package定義 包由一系列的類和接口構(gòu)成同一個(gè)包不能定義同名類和接口 一個(gè)包可以引用其它包定義的公共類和接口 import 包必須和目錄名建立對(duì)應(yīng) 而類名則和該目錄下的java文件的主文件名對(duì)應(yīng) 程序的入口main函數(shù)必須位于一個(gè)public類中main 且main函數(shù)必須在類中必須是publicstatic的 37 第13章Java語(yǔ)言基礎(chǔ) 38 數(shù)據(jù)類型 原子類型和引用類型 原子類型為值類型 39 原子類型 類型char 采用unicode編碼 每字符2字節(jié)類型byte 一字節(jié)有符號(hào)整型類型short 兩字節(jié)有符號(hào)整型類型int 4字節(jié)有符號(hào)整型類型long 8字節(jié)有符號(hào)整型類型float 4字節(jié)單精度浮點(diǎn)數(shù)類型double 8字節(jié)雙精度浮點(diǎn)數(shù)類型boolean 1字節(jié)布爾類型 實(shí)際使用1位二進(jìn)制 常量有true和false整數(shù)常量后帶L或l表示long類型 浮點(diǎn)數(shù)后帶D或d表示雙精度浮點(diǎn)數(shù) 帶F或f表示單精度浮點(diǎn)數(shù) 40 引用類型 相當(dāng)于C 的指針類型 在堆上上分配內(nèi)存 但內(nèi)存分配與回收由java自己完成由class interface和數(shù)組構(gòu)成的類型都是引用類型與C 指針不同的是 每次訪問(wèn)Java的引用類型變量時(shí) 訪問(wèn)的是 相當(dāng)于C 指針?biāo)赶虻?存儲(chǔ)單元的值或內(nèi)容 所有引用類型都是從Object對(duì)象派生的 引用類型變量必須用new進(jìn)行實(shí)例化 即在堆上分配內(nèi)存和調(diào)用構(gòu)造函數(shù)初始化 Objectx newObject 原子類型自動(dòng)在棧上分配內(nèi)存 只需要初始化 例如 intx 3 41 原子類型變量 值類型 和引用類型變量的區(qū)別 變量表示存儲(chǔ)數(shù)據(jù)的內(nèi)存單元 原子類型變量存儲(chǔ)的是原子類型的值 引用類型變量存儲(chǔ)的是對(duì)象的引用 當(dāng)變量未引用任何對(duì)象時(shí) 它是值為null 42 標(biāo)識(shí)符 Java中使用標(biāo)識(shí)符 identifier 來(lái)命名變量 常量 方法 類 包等實(shí)體 標(biāo)識(shí)符命名規(guī)則標(biāo)識(shí)符是由字母 數(shù)字 下劃線 美元符號(hào) 組成的字符序列 標(biāo)識(shí)符必須以字母 下劃線 美元符號(hào) 開(kāi)頭 不能以數(shù)字開(kāi)頭 標(biāo)識(shí)符不能是保留字 標(biāo)識(shí)符不能為true false或null 標(biāo)識(shí)符可以為任意長(zhǎng)度 43 Java保留字 44 變量名 變量名使用合法的表示符做變量名稱 變量名可以被對(duì)象名 類名中或包名 類名限定 必要時(shí)要多級(jí)限定 如類變量System out java lang Math PI 這類變量叫成員變量 局部變量通常指的是函數(shù)中聲明的變量 其作用范圍就是該函數(shù) 成員變量是指類的成員 可分為類變量和實(shí)例變量 實(shí)例變量必須依賴于對(duì)象的存在而存在 在類的函數(shù)成員以外訪問(wèn)時(shí) 通常需要實(shí)例變量是可見(jiàn)的 且需要使用 對(duì)象 實(shí)例變量 進(jìn)行限定訪問(wèn) 只讀變量使用final關(guān)鍵字聲明 finaldatatypeCONSTANT NAME value 約定 變量名 方法名以小寫(xiě)字母開(kāi)始 若后面連接單詞 則單詞首字母大寫(xiě) 如radius getRaidus 常量全部使用大寫(xiě)字母 約定 類名每個(gè)單詞的首字母大寫(xiě) 如AirPlane 45 運(yùn)算符 operator 包括單目 雙目和三目的 三目運(yùn)算符為 算術(shù)運(yùn)算符 單目 雙目 單目 也分前置和后置 其意義和C 一致但 不允許出現(xiàn)在 左邊如 i 1 錯(cuò)關(guān)系運(yùn)算符 op2 op1右移op2位 左邊填符號(hào)位 即最高位 op1 op2 op1右移op2位 左邊填0 無(wú)符號(hào)右移 46 運(yùn)算符 位邏輯運(yùn)算符 按位與 按位或 按位求反 按位異或 位邏輯運(yùn)算符只能用于整數(shù)類型 byte short int long 賦值及簡(jiǎn)捷賦值運(yùn)算符 Java要求賦值運(yùn)算符左邊必須是變量 不能是表達(dá)式 算術(shù)簡(jiǎn)寫(xiě) 位簡(jiǎn)寫(xiě) 移位簡(jiǎn)寫(xiě) 三目運(yùn)算符 數(shù)組下標(biāo)運(yùn)算符 成員訪問(wèn)運(yùn)算符 對(duì)象創(chuàng)建運(yùn)算符 newRTTI類型識(shí)別運(yùn)算符 instanceof函數(shù)調(diào)用運(yùn)算符 以逗號(hào)分開(kāi)的參數(shù)列表 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 目標(biāo)類型 47 運(yùn)算符 JAVA里布爾值的結(jié)果為true和false 而不像C 是0或1 并且不能將其他類型強(qiáng)制轉(zhuǎn)換為布爾類型instanceof用于判定前一個(gè)變量 或?qū)ο?是否為后面的類型 類 的實(shí)例 48 表達(dá)式 expression 表達(dá)式由字面量 literal 變量 操作符和方法調(diào)用構(gòu)成 用于求出單個(gè)值Java的表達(dá)式?jīng)]有C 的左值概念 表達(dá)式求值 evaluate 要注意操作符優(yōu)先級(jí)和結(jié)合性 見(jiàn)書(shū)P62表20 49 語(yǔ)句 statements 語(yǔ)句是完整的可執(zhí)行單元 以分號(hào)結(jié)束以下表達(dá)式加上 就成為了語(yǔ)句賦值表達(dá)式 方法調(diào)用對(duì)象創(chuàng)建表達(dá)式 new表達(dá)式 Java的語(yǔ)句基本同C 除異??捎衒inally外 無(wú)論出現(xiàn)異常與否 都必須執(zhí)行finally的部分 C 實(shí)際上也有 不過(guò)保留字為 finally 條件語(yǔ)句 if if else if elseif switch循環(huán) while do while for異常處理 try catch finally 50 第14章對(duì)象基礎(chǔ)和簡(jiǎn)單數(shù)據(jù)對(duì)象 51 對(duì)象的生命周期 對(duì)象的生命周期 創(chuàng)建 使用 清除 52 對(duì)象的創(chuàng)建 創(chuàng)建 類型名引用變量 new類名 構(gòu)造器的參數(shù) 必須用new創(chuàng)建 new會(huì)自動(dòng)地調(diào)用類的構(gòu)造函數(shù) 一個(gè)類可以定義多個(gè)重載的構(gòu)造器 如果new創(chuàng)建的對(duì)象沒(méi)有賦給任何變量 該對(duì)象除當(dāng)時(shí)訪問(wèn)外 將無(wú)法在以后訪問(wèn) 構(gòu)造器沒(méi)有返回類型 構(gòu)造器的名字與類名相同 即使將返回類型說(shuō)明為void 也會(huì)導(dǎo)致其成為非構(gòu)造函數(shù) 每個(gè)Java類 不含接口 都至少有一個(gè)構(gòu)造器 如果類沒(méi)有顯示定義 系統(tǒng)會(huì)默認(rèn)地為該類提供一個(gè)不包含任何參數(shù)的無(wú)參構(gòu)造器 53 對(duì)象的創(chuàng)建 CirclemyCircle newCircle 1 聲明一個(gè)引用變量 變量類型為Circle 變量名為myCircle 2 創(chuàng)建對(duì)象 返回對(duì)象的引用 3 將對(duì)象的引用賦值給變量myCircle 以上語(yǔ)句等價(jià)于 CirclemyCircle 聲明一個(gè)Circle類型的引用 變量 其值為null 稱為空引用myCircle newCircle 創(chuàng)建對(duì)象 并將 該對(duì)象的引用賦給myCircle 使myCircle引用被創(chuàng)建的對(duì)象 null 引用類型CirclemyCircle myCircle 對(duì)象的引用 myCircle newCircle myCircle 54 對(duì)象的使用 對(duì)象的使用有兩種方式 操作或者檢查它的變量 數(shù)據(jù)成員 調(diào)用它的方法要使用對(duì)象的實(shí)例成員 首先要得到該對(duì)象的引用 對(duì)于基于RMI的分布式對(duì)象 可以通過(guò)名字透明地得到一個(gè)運(yùn)程對(duì)象的引用 屏蔽了網(wǎng)絡(luò)協(xié)議 網(wǎng)絡(luò)地址 端口號(hào)等細(xì)節(jié) 當(dāng)獲得一個(gè)對(duì)象 不管是本地的還是運(yùn)程的 的引用后 就可以訪問(wèn)對(duì)象的屬性或調(diào)用其方法 55 對(duì)象的使用 類的成員分兩種 實(shí)例成員與類成員 實(shí)例成員包括實(shí)例變量與實(shí)例方法實(shí)例成員依賴于實(shí)例 即對(duì)象 存在 同一個(gè)類的不同實(shí)例都擁有一份實(shí)例變量的拷貝 對(duì)某個(gè)實(shí)例變量的操作不影響到其它實(shí)例變量 實(shí)例變量與對(duì)象生命周期一樣 隨對(duì)象的創(chuàng)建而創(chuàng)建 隨對(duì)象的消亡而消亡 必須通過(guò)實(shí)例的引用來(lái)調(diào)用實(shí)例方法 所謂的依賴 類成員包括類變量與類方法類成員不依賴于實(shí)例存在 無(wú)任何對(duì)象時(shí)也可訪問(wèn) 即值已存在 同一個(gè)類的不同實(shí)例共享同一個(gè)類變量 對(duì)類變量的改變會(huì)影響所有實(shí)例 類變量的生存期不依賴于對(duì)象 其它類可以不用通過(guò)該類的實(shí)例 直接通過(guò)類名就訪問(wèn)它們 同樣 類方法也可直接通過(guò)類名訪問(wèn) 56 實(shí)例變量與靜態(tài)變量 實(shí)例變量 instancevariable 未用static修飾的成員變量 屬于類的具體實(shí)例 對(duì)象 只能通過(guò)引用變量訪問(wèn) 即 對(duì)象名 變量名 類變量 staticvariable 是用static修飾的變量 在一個(gè)類的所有實(shí)例間共享 也稱類變量 靜態(tài)變量可以通過(guò)類名訪問(wèn) 即類名 變量名 也可用對(duì)象名訪問(wèn) 二個(gè)對(duì)象的radius實(shí)例變量存儲(chǔ)于不同空間 彼此不影響 所有對(duì)象共享靜態(tài)成員變量存貯在公共內(nèi)存某個(gè)對(duì)象對(duì)其修改會(huì)影響其他對(duì)象 57 靜態(tài)常量 靜態(tài)常量是用staticfinal修飾的變量 例如 Math類中的常量PI定義為 publicstaticfinaldoublePI 3 14159265358979323846 58 類方法 類方法 staticmethod 是用static修飾的方法 例如 mainMath random類方法可以通過(guò)類名和對(duì)象名調(diào)用 類方法只能訪問(wèn)類的靜態(tài)成員 不能訪問(wèn)類中的實(shí)例成員 59 實(shí)例方法 實(shí)例方法 staticmethod 是沒(méi)有用static修飾的方法 實(shí)例方法只能通過(guò)對(duì)象名 引用 調(diào)用 實(shí)例方法可以訪問(wèn)類的靜態(tài)成員和實(shí)例成員 60 成員的訪問(wèn) 實(shí)例成員通過(guò)對(duì)象限定使用 類成員可通過(guò)類名限定使用 也可通過(guò)對(duì)象限定使用 提倡用第一種使用形式 classTest 等價(jià)于classTestextendsObject 即Test繼承自O(shè)bject對(duì)象 intt staticintw 3 定義及初始化wpublicTest intx t x 在構(gòu)造函數(shù)中初始化w與否根據(jù)需要確定 注意JAVA在類的定義結(jié)束后不要 同時(shí)JAVA類的方法都必須在類體里實(shí)現(xiàn)publicclassMain publicstaticvoidmain String args Testx newTest 3 inty x t t的訪問(wèn)權(quán)限不是private 是defaulty x w 不提倡以這種形式使用 為什么 y Test w 61 Object對(duì)象 所有類都直接或間接繼承自O(shè)bject類 Object為父類 所有可實(shí)例化類的內(nèi)存管理都是由Object通過(guò)引用計(jì)數(shù)完成的 A繼承自B的關(guān)系使用extends說(shuō)明 如classAextendsB 子類在其構(gòu)造器的第一條語(yǔ)句缺省調(diào)用父類無(wú)參構(gòu)造函數(shù) 如果子類中沒(méi)有顯式地調(diào)用父類的構(gòu)造函數(shù) 編譯器會(huì)自動(dòng)地在子類構(gòu)造函數(shù)第一條語(yǔ)句前加上super 也可以顯示地調(diào)用 必須是子類構(gòu)造函數(shù)的第一條語(yǔ)句 62 Object對(duì)象 Object對(duì)象負(fù)責(zé)了對(duì)象內(nèi)存管理 包括垃圾自動(dòng)回收 Object類定義了所有類都必須有的基本狀態(tài)和行為 clone 對(duì)象克隆 缺省是淺拷貝 一般需要覆蓋 finalize 相當(dāng)于析構(gòu) equals 比較二個(gè)對(duì)象是否相等 hashCodetoString 將對(duì)象轉(zhuǎn)換為字符串 getClass 得到一個(gè)對(duì)象的類別信息 RTTI notify notifyAll以及wait 線程同步 其中clone finalize的訪問(wèn)權(quán)限是protected 其它為public 此外 getClass notify notifyAll及wait被定義為final方法 不能被子類覆蓋 63 classA Object對(duì)象負(fù)責(zé)管理內(nèi)存 通過(guò)對(duì)象的引用次數(shù)判定內(nèi)存可否回收intx publicA intx this x x publicclassMain 注意生命期和作用域的不一致staticAf Aa newA 3 Ab a Ac newA 4 returna 對(duì)象2生命起止在f內(nèi)publicstaticvoidmain String args Ax f f返回 c的作用域結(jié)束導(dǎo)致對(duì)象2的引用計(jì)數(shù)為0 f返回 a b的作用域結(jié)束 返回值賦給x 導(dǎo)致對(duì)象1引用計(jì)數(shù)為1 main返回 x的作用域結(jié)束對(duì)象1的引用計(jì)數(shù) 0 64 對(duì)象的生命周期 由于JAVA在對(duì)象的引用計(jì)數(shù) 0時(shí)才清除對(duì)象 導(dǎo)致作用域和生命周期的不一致 在上例中 引用a的作用域在f內(nèi) 但a引用的對(duì)象的生命周期在函數(shù)f結(jié)束后還沒(méi)結(jié)束這是JAVA和C 的一個(gè)重要區(qū)別 C 如果函數(shù)返回一個(gè)引用 該引用了函數(shù)內(nèi)的局部對(duì)象 則函數(shù)返回的引用引用的是一個(gè)失效的對(duì)象 編譯沒(méi)問(wèn)題 但會(huì)產(chǎn)生runtimeerror JAVA 函數(shù)返回一個(gè)引用可以引用函數(shù)內(nèi)生成的對(duì)象 函數(shù)返回后通過(guò)該引用還是可以訪問(wèn)該對(duì)象 因?yàn)樵搶?duì)象的生命周期沒(méi)結(jié)束 65 finalize 方法 finalize 方法在Object中有缺省實(shí)現(xiàn) 在用戶自定義的類中 它可以被覆蓋 但一般在最后要調(diào)用父類的finalize 方法 來(lái)清除對(duì)象所使用的所有資源 相當(dāng)于C 的析構(gòu)函數(shù) 在對(duì)對(duì)象進(jìn)行垃圾收集前 Java運(yùn)行時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用對(duì)象的finalize 方法來(lái)釋放系統(tǒng)資源 注意 finalize 是protected 不可在類外通過(guò)對(duì)象進(jìn)行調(diào)用 在變量的生命期結(jié)束時(shí) 例如前例中的變量c 系統(tǒng)并不一定馬上調(diào)用垃圾收集程序 即與C 的析構(gòu)函數(shù)立即執(zhí)行有所不同 某些情況下 程序員可能需要實(shí)現(xiàn)finalize 方法來(lái)釋放不由垃圾收集器所控制的資源 例如 需要關(guān)閉對(duì)象打開(kāi)的文件 考慮到finalize 只在垃圾收集前被調(diào)用 而垃圾收集可能被延遲 在急需關(guān)閉文件以供其它任務(wù)打開(kāi)時(shí) 最好強(qiáng)制系統(tǒng)進(jìn)行垃圾收集 即調(diào)用System gc 從而引起finalize 執(zhí)行 一般情況下 如果自定義的對(duì)象僅使用了內(nèi)存 而且不是通過(guò)native函數(shù) 例如通過(guò)C Java不自動(dòng)回收C 分配的內(nèi)存 申請(qǐng)的 就沒(méi)有必要自己實(shí)現(xiàn)finalize 方法 66 對(duì)象相等的判定 用來(lái)判定是否引用同一個(gè)對(duì)象 如上例中判定a b的結(jié)果為true 如果存在另一個(gè)對(duì)象Ad newA 3 判定a d 則結(jié)果為false 即兩個(gè)對(duì)象的地址不同 Object提供了函數(shù)equals 來(lái)判斷對(duì)象是否相等 但其實(shí)現(xiàn)是比較二個(gè)引用是否指向同一個(gè)對(duì)象 因此往往需要在自定義類型中覆蓋該函數(shù) 一般來(lái)說(shuō) 如果自定義類型中包含了引用類型的實(shí)例變量 成員 則需要覆蓋equals hashCode clone 缺省行為是淺拷貝賦值 toString 通常是必須覆蓋的 用于將當(dāng)前對(duì)象轉(zhuǎn)化為可打印的字符串 67 Object類的equals方法 Object是所有Java類的祖先類 它實(shí)現(xiàn)了一些有用的方法 如前面介紹的eauals方法publicbooleanequals Objectobject 檢驗(yàn)兩個(gè)對(duì)象是否相等語(yǔ)法 object1 equals object2 該方法只是比較二個(gè)引用變量是否相等 即object1和object2是否指向同一個(gè)對(duì)象 而不是比較二個(gè)引用變量指向的對(duì)象的內(nèi)容是否相等 所以子類很有必要覆蓋該方法 classCircle privatedoubleradius 1 0 Circle Circle doubler radius r publicbooleanequals Objecto if oinstanceofCircle returnthis radius Circle o radius elsereturnfalse 例如二個(gè)Circle對(duì)象 如果半徑相等就相等 我們可以在Circle類里覆蓋該方法 68 Object類中的clone方法 protectedObjectclone 復(fù)制對(duì)象 缺省為淺拷貝 對(duì)象引用變量的賦值是不能復(fù)制對(duì)象的 要?jiǎng)?chuàng)建有單獨(dú)內(nèi)存空間的新對(duì)象 使用clone 方法newobject someobjet clone newobject someobject子類要實(shí)現(xiàn)clone方法 首先應(yīng)該實(shí)現(xiàn)Cloneable接口 同時(shí)覆蓋從Object類繼承的clone方法 并將該方法改為public 69 Object類中的toString方法 publicStringtoString 返回代表這個(gè)對(duì)象的字符串 Object類的默認(rèn)實(shí)現(xiàn)是返回由 包名 類名 hashCode組成 Circlecircle newCircle circle toString Circle 15037e5Object的toString方法提供的信息不是很有用 因此通常子類應(yīng)該覆蓋該方法 提供更有意義的信息 classCircle privatedoubleradius 1 0 Circle Circle doubler radius r publicStringtoString return Acirclewithradius radius 字符串 數(shù)值結(jié)果為字符串 70 簡(jiǎn)單數(shù)據(jù)對(duì)象 除了提供原子類型如char int等原子類型外 Java還提供了這些類型的包裝類 Wrapper 如Character Integer等 作用包裝提供了額外的信息 例如通過(guò)Integer類型 我們能夠獲知最小或最大的整數(shù)值是多少 由值類型變成了引用類型 用于需要對(duì)象引用的場(chǎng)合 比如函數(shù)需要引用參數(shù)voidswap inti1 inti2 callbyvaluevoidswap Integero1 Integero2 callbyref這些類還定義了一些有用的方法 用于將值轉(zhuǎn)換為其他類型 轉(zhuǎn)換為字符串等等 BigInteger和BigDecimal從精度上擴(kuò)展了原始數(shù)據(jù)類型 這些類可用于反射 Reflection 反射機(jī)制允許程序收集JVM中任何對(duì)象或類的信息 71 簡(jiǎn)單數(shù)據(jù)對(duì)象 Number Byte Short Integer Long Float Double Character Boolean Object 每個(gè)Wrapper類對(duì)應(yīng)一種原子數(shù)據(jù)類型 每個(gè)Wrapper類實(shí)現(xiàn)了接口Comparable BigInteger BigDecimal 72 包裝類的構(gòu)造函數(shù) 構(gòu)造函數(shù)以一個(gè)對(duì)應(yīng)的基本數(shù)據(jù)類型為參數(shù)以字符串為參數(shù) 除了Character 如Integer類和Double類的構(gòu)造函數(shù)如下 publicDouble doublevalue publicDouble Stringvalue 例如DoubledoubleObject newDouble 5 0 DoubledoubleObject newDouble 5 0 包裝類沒(méi)有無(wú)參構(gòu)造方法 73 數(shù)值包裝類的常量 每一個(gè)數(shù)值包裝類都有常量MAX VALUE和MIN VALUE MAX VALUE對(duì)應(yīng)本數(shù)據(jù)類型的最大值 對(duì)Byte Short Integer和Long MIN VALUE對(duì)應(yīng)最小值對(duì)Float和Double MIN VALUE對(duì)應(yīng)最小正值如System out println Themaximumintegeris Integer MAX VALUE System out println Theminimumpositivefloatis Float MIN VALUE 74 從包裝類對(duì)象 基本數(shù)據(jù)類型 Byte Short Integer Long Float Double類都分別實(shí)現(xiàn)方法byteValue shortValue intValue longValue floatValue doubleValue 這些方法原型如下publicbytebyteValue Byte類實(shí)例方法publicshortshortValue Short類實(shí)例方法publicintintValue Integer類實(shí)例方法publiclonglongValue Long類實(shí)例方法publicfloatfloatValue Float類實(shí)例方法publicdoubledoubleValue Double類實(shí)例方法如inti newInteger 10 intValue 另外每個(gè)類的toString 方法將數(shù)值轉(zhuǎn)換成字符串 75 字符串轉(zhuǎn)換成數(shù)值 Byte Short Integer Long Float DoublepublicstatictypeparseType Strings publicstatictypeparseType Strings intradix 如inti Integer parseInt 11 2 3inti Integer parseInt 12 8 10inti Integer parseInt 1A 16 26doubled Double parseDouble 3 14 3 14 76 靜態(tài)方法valueOf 該方法創(chuàng)建一個(gè)新的對(duì)象 并將它初始化為指定字符串的值如 DoubledoubleObject Double valueOf 12 4 IntegerintegerObject Integer valueOf 12 77 基本類型與包裝類之間的自動(dòng)轉(zhuǎn)換 JDK1 5允許基本類型和包裝類之間的自動(dòng)轉(zhuǎn)換 將基本類型的值轉(zhuǎn)換為包裝類對(duì)象 稱為裝箱 boxing 將包裝類對(duì)象轉(zhuǎn)換為基本類型的值 稱為開(kāi)箱 unboxing IntegerintObject 2 裝箱IntegerintObject1 2 intObject2 3 inti intObject1 開(kāi)箱 78 數(shù)據(jù)的格式化 高級(jí)算術(shù)功能 自學(xué) 79 字符 字符串對(duì)象 JavaAPI提供了三個(gè)處理字符數(shù)據(jù)的類 Character String StringBuffer String是一個(gè)finalclass 不能被其它類繼承 Character用于處理單個(gè)字符 String用于處理字符串常量 而StringBuffer用于可變字符串的處理 80 Character類 Character類的作用將char類型的數(shù)據(jù)封裝成對(duì)象包含處理字符的方法和常量Character char 構(gòu)造函數(shù)靜態(tài)方法isDigit方法判斷一個(gè)字符是否是數(shù)字isLetter方法判斷一個(gè)字符是否是字母isLetterOrDigit方法判斷一個(gè)字符是否是字母或數(shù)字isLowerCase方法判斷一個(gè)字符是否是小寫(xiě)isUpperCase方法判斷一個(gè)字符是否是大寫(xiě)toLowerCase方法將一個(gè)字符轉(zhuǎn)換成小寫(xiě)toUpperCase方法將一個(gè)字符轉(zhuǎn)換成大寫(xiě) 81 Character類 實(shí)例例方法compareTo Character 比較兩個(gè)字符對(duì)象包含的值 該實(shí)例方法返回一個(gè)整數(shù)值 表示當(dāng)前對(duì)象中的值是大于 等于還是小于參數(shù)所包含的值 equals Object 比較當(dāng)前對(duì)象包含的值與參數(shù)對(duì)象包含的值 如果兩個(gè)對(duì)象包含的值相等 那么這個(gè)實(shí)例方法返回true Character類覆蓋了該方法 因此比較的是對(duì)象的內(nèi)容 toString 這個(gè)實(shí)例方法將當(dāng)前對(duì)象轉(zhuǎn)換為字符串 charValue 這個(gè)實(shí)例方法以原始char值的形式返回當(dāng)前字符對(duì)象包含的值 82 Character類示例 Charactera newCharacter a Characterb newCharacter b intdiff pareTo b 比較大小 1booleanb1 a equals b falseStrings a toString a booleanb2 Character isDigit a falseCharacterc Character toUpperCase b B booleanb3 Character isUpperCase c truecharc a charValue 83 字符串 String Java提供兩個(gè)類用于存儲(chǔ)和操作字符串String用于其值不能改變的字符串StringBuffer用于可被修改的字符串由于String對(duì)象存貯的是不可變的字符串 因此比StringBuffer更高效 對(duì)于程序任何位置出現(xiàn)的雙引號(hào)標(biāo)記的字符串常量 系統(tǒng)都會(huì)自動(dòng)創(chuàng)建一個(gè)String對(duì)象 相同字符串常量?jī)H建立一個(gè)共享對(duì)象 可通過(guò)String對(duì)象的方法對(duì)字符串常量進(jìn)行操作 84 String的構(gòu)造函數(shù)很多 85 創(chuàng)建字符串對(duì)象 第一種方法是用new運(yùn)算符如 StringstrRef newString stringLiteral Stringmessage newString WelcometoJava 調(diào)用String String 構(gòu)造函數(shù) 這種方法不推薦第二種方法是直接用賦值形式StringstrRef stringLiteral 如 Stringmessage WelcometoJava 但 這二種方法有著本質(zhì)的不同 第二種方法效率高的多 86 二種方式的區(qū)別 對(duì)于程序任何位置出現(xiàn)的雙引號(hào)標(biāo)記的字符串常量 系統(tǒng)都會(huì)自動(dòng)創(chuàng)建一個(gè)String對(duì)象 因此Stringmessage newString WelcometoJava 實(shí)際上創(chuàng)建了另一個(gè)完全相同的對(duì)象 而且需要調(diào)用構(gòu)造函數(shù) 其過(guò)程為 1 以字符串對(duì)象 WelcometoJava 為參數(shù)調(diào)用構(gòu)造函數(shù)String String 產(chǎn)生新的字符串對(duì)象 2 將新對(duì)象的引用賦給引用變量message WelcometoJava WelcometoJava newString message 87 二種方式的區(qū)別 Stringmessage WelcometoJava 由于字符串常量 WelcometoJava 已經(jīng)是一個(gè)字符串對(duì)象 因此上面的語(yǔ)句的語(yǔ)義是將對(duì)象 WelcometoJava 的引用賦值給message 導(dǎo)致message也該對(duì)引用了該對(duì)象這個(gè)過(guò)程中沒(méi)有調(diào)用構(gòu)造函數(shù)產(chǎn)生新的第二個(gè)字符串對(duì)象 WelcometoJava message 88 小測(cè)試 代碼1Stringsa newString Helloworld Stringsb newString Helloworld System out println sa sb 代碼2Stringsc Helloworld Stringsd Helloworld System out println sc sd false true 相同字符串常量?jī)H建立一個(gè)共享對(duì)象 89 字符串 String 對(duì)任何可包裝類型如Character String等的常量 其常量對(duì)象 字面量 Literal 的引用被共享 地址相同 Characterc1 a a 為Character類型的字面量 常量 Characterc2 a System out println c1 c2 trueIntegerintObj1 1 1為Integer類型的字面量 常量 IntegerintObj2 1 System out println intObj1 intObj1 true可通過(guò)String對(duì)象的方法對(duì)字符串常量進(jìn)行操作 如 inti Hello length 5 90 String對(duì)象是不可變的 字符串對(duì)象創(chuàng)建之后 其內(nèi)容是不可修改的 Strings abc s s defg System out println s 程序運(yùn)行的結(jié)果是什么 abcdefg s的內(nèi)容不是改變了嗎 不是s的內(nèi)容變了 而是s引用了新的字符串對(duì)象 91 調(diào)用intlength 方法可以獲取字符串的長(zhǎng)度 Stringmessage WelcometoJava message length 返回15charcharAt index 方法可以獲取指定位置的字符 index的值必須在0到length 1之間 message charAt 0 返回字符 W 字符串長(zhǎng)度和獲取單個(gè)字符 92 截取子串 substring用于截取字符串的一部分 返回新字符串 publicStringsubstring intbeginIndex intendIndex 返回字符串的子串 子串從beginIndex開(kāi)始 直到endIndex 1publicStringsubstring intbeginIndex 返回字符串的子串 子串從beginIndex開(kāi)始 直到字符串的結(jié)尾 Strings message subString 0 11 s內(nèi)容為 Welcometo Strings message subString 11 s內(nèi)容為 Java 93 搜索字符或子字符串 String類提供的indexOf 和lastIndexOf 方法返回字符串中特定字符或子字符串在字符串中的位置 indexOf 返回字符或字串第一次出現(xiàn)的位置索引值lastIndexOf 返回字符或字串最后一次出現(xiàn)的位置索引值 94 搜索字符或字符串 indexOf返回字符串中字符或字符串匹配的位置 返回 1表示未找到 WelcometoJava indexOf W returns0 WelcometoJava indexOf x returns 1 WelcometoJava indexOf o 5 returns9 WelcometoJava indexOf come returns3 WelcometoJava indexOf Java 5 returns11 WelcometoJava indexOf java 5 returns 1 WelcometoJava lastIndexOf a returns14 95 比較字符串 booleanequals Object 方法用于比較兩個(gè)字符串是否包含相同的內(nèi)容 兩個(gè)字符串內(nèi)容相同 返回true兩個(gè)字符串內(nèi)容不同 返回falsebooleanequalsIgnoreCase String 忽略大小寫(xiě)比較內(nèi)容是否相同booleanstartsWith String 判斷是否以某個(gè)字符串開(kāi)始booleanendsWith String 判斷是否以某個(gè)字符串結(jié)束 96 比較字符串 booleanregionMatch booleanignoreCase intthisOffset Stringother intotherOffset intlen 比較部分內(nèi)容是否相同boolean 是否忽略大小寫(xiě)thisOffset 要比較的this字符串從索引thisOffset開(kāi)始比較other 要比較的另外一個(gè)字符串otherOffset 要比較的other字符串從索引otherOffset開(kāi)始比較len 要比較的字符數(shù)intcompareTo String 方法用于比較兩個(gè)字符串的大小 即第一個(gè)不同字符的差值 pareTo s2 的返回值 當(dāng)兩個(gè)字符串相同時(shí) 返回 當(dāng)s1按字典排序在s2之前 返回小于 的值當(dāng)s1按字典排序在s2之后 返回大于 的值 97 比較字符串 Strings0 Java Strings1 Welcometo s0 Strings2 WelcometoJava Strings3 welcometojava booleanb s1 s2 false 用于比較兩個(gè)變量是否引用同一個(gè)對(duì)象b s1 equals s2 true equals用于比較兩個(gè)字符串的內(nèi)容是否相同b s2 equals s3 falseb s2 equalsIgnoreCase s3 true equalsIgnoreCase忽略大小寫(xiě)b s2 regionMatches 11 s0 0 4 true regionMatches比較部分字符串b s3 regionMatches 11 s0 0 4 falseb s3 regionMatches true 11

溫馨提示

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