CheckStyle、FindBugs和PMD的安裝與使用_第1頁
CheckStyle、FindBugs和PMD的安裝與使用_第2頁
CheckStyle、FindBugs和PMD的安裝與使用_第3頁
CheckStyle、FindBugs和PMD的安裝與使用_第4頁
CheckStyle、FindBugs和PMD的安裝與使用_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、CheckStyle 、FindBugs和PMD一、 三個(gè)插件的安裝方法一:1. Eclipse中,選擇Help->Install New Software2.點(diǎn)擊Add來新增一個(gè)安裝 3.輸入安裝名稱和地址a) CheckStyle: b) Findbugs:/eclipsec) PMD:如果安裝地址不對,會報(bào)錯(cuò),如下圖:如果安裝地址正確,如下:4. 安裝后重啟即可 5.安裝好之后,右擊項(xiàng)目選擇屬性,可以看到安裝是否成功方法二:1.下載eclipse插件下載后,把里面的兩個(gè)文件夾plugins和 features下面

2、的文件分別拷貝到eclipse目錄下面對應(yīng)的plugins和features目錄2.如果你就這樣直接啟動eclipse 可能會出現(xiàn)ClassNotFoundExceptions 等錯(cuò)誤,所以必須在啟動eclipse的時(shí)候加上一個(gè)參數(shù) -clean. 這樣eclipse就可以更新它當(dāng)前安裝的許多插件信息比如你得eclipse在d盤 那么就是 d:eclipseeclipse.exe -clean二、 CheckStyle的介紹和使用1、 介紹 Checkstyle是一款檢查java程序代碼樣式的工具,可以有效的幫助我們檢視代碼以便更好的遵循代碼編寫標(biāo)準(zhǔn),特別適用于小組開發(fā)時(shí)彼此間的樣式規(guī)范和統(tǒng)一

3、。Checkstyle提供了高可配置性,以便適用于各種代碼規(guī)范,所以除了可以使用它提供的sun的代碼標(biāo)準(zhǔn)外,你也可以定制自己的標(biāo)準(zhǔn)。我們可以在eclipse中安裝checkstyle的插件,來方便我們的使用。 Checkstyle可以讓我們養(yǎng)成書寫良好代碼風(fēng)格的習(xí)慣,代碼的整潔也減少了很多bad smell的產(chǎn)生。使用checkstyle的過程中可能需要經(jīng)常的調(diào)整配置文件,有些check過于嚴(yán)格,可以根據(jù)實(shí)際情況取消一些代碼檢查。2、 使用2.1CheckStyle使用樣例I配置好項(xiàng)目的checkstyle屬性II .右擊項(xiàng)目,點(diǎn)擊Checkstyle中的Check code with Che

4、ckstyle選擇某個(gè)項(xiàng)目,點(diǎn)擊右鍵選擇“Checkstyle”,會出現(xiàn)如下菜單:1) Configure project(s) from blueprint:指定工程加入Checkstyle檢查;2) Activate Checkstyle:激活Checkstyle;3) Deactivate Checkstyle:取消激活Checkstyle;4) Check code with Checkstyle:使用Checkstyle檢查代碼;5) Clear Checkstyle violations:去掉Checkstyle的檢查提示。6) Create Formatter-Profile:創(chuàng)

5、建格式化文件。III .運(yùn)行結(jié)果選擇“Check code with Checkstyle”對所選中的項(xiàng)目進(jìn)行檢查,檢查后對有問題的類會使用警告或錯(cuò)誤標(biāo)識。參考提示信息如下:                 左側(cè)會顯示小圓圈,將鼠標(biāo)移動到上面時(shí)將給出提示信息。  使用Checkstyle后,注釋、變量命名規(guī)范性、類中變量、構(gòu)造函數(shù)、方法的順序的檢查、行的長度、文件的長度、方法的長度等都不需要手工進(jìn)行檢查,只

6、需要在代碼評審時(shí)使用Checkstyle檢查即可。因此,讓代碼評審人員將側(cè)重點(diǎn)放在Checkstyle檢查不出來的一些代碼的優(yōu)化問題。IIII . 自己添加規(guī)則新建一個(gè)文本文檔,保存為xml格式,寫入如下內(nèi)容:在項(xiàng)目的Checkstyle屬性里,添加自己的規(guī)則:選擇使用自己的規(guī)則:選中自己的規(guī)則:重新運(yùn)行Check code with Checkstyle:可以看到,當(dāng)我定義規(guī)則if層次最大為3時(shí),如果代碼的if層次超過了3,則會提示錯(cuò)誤。IIV .Checkstyle violations chart視圖點(diǎn)擊Windows的Perferences下的other項(xiàng),選中Checkstyle中的

7、Checkstyle violations chart:選擇Checksty violations chart視圖,會把每種不規(guī)范的信息做下統(tǒng)計(jì),繪制成圖表:2.2CheckStyle常見錯(cuò)誤提醒錯(cuò)誤提示錯(cuò)誤說明missing a javadoc comment缺少類注釋Line longer than X characters行長度超過X個(gè)字符(包括空格)Return count is X(max allowed 3)一個(gè)方法內(nèi)的返回?cái)?shù)量是X(最大值只能為3)Nested if-else depth is X(max allowed is 3)最大的if-else嵌套層數(shù)為X(最大只能為3)

8、Array brackets at illegal position數(shù)組的方括號“”的位置不正確(檢查數(shù)組類型的定義是String args,而不是String args)Line matchs the illegal pattern 'System.out.println'本行包含System.out.println語句ctor def modifier at indentation level 8 not at corrent indentation 4縮進(jìn)不正確,一般是因?yàn)闆]有在Eclipse中使用4個(gè)空格代替tab鍵引起。'static' modifie

9、r out of order with the JLS suggestionsstatic修飾符沒有按照J(rèn)LS的建議來排序(eg.寫成public final static.應(yīng)該改成public static final)Name 'X' must match pattern 'A-ZA-Z0-9_A-Z0-9+$'(正則表達(dá)式)名稱不符合正則表達(dá)式'A-ZA-Z0-9_A-Z0-9+$'(即為大寫字母,數(shù)字、下劃線等)。一般在靜態(tài)變量沒有大寫時(shí)提示,包名不是全部消息時(shí)提示,類名不是大寫開頭時(shí)提示,方法名不是小寫開頭時(shí)提示Variable acc

10、ess definition in wrong order變量定義順序不正確(例如在類成員變量定義時(shí),將private類型的變量定義在public類型的變量之前)Static variable definition in wrong order靜態(tài)變量定義順序不正確(例如在構(gòu)造函數(shù)之后定義靜態(tài)變量)Instance variable definition in wrong order成員變量定義順序不正確(例如在構(gòu)造函數(shù)之后定義成員變量)X is a magic numberX是一個(gè)魔術(shù)數(shù)字(非0、1、2的數(shù)字)if construct must use ''if結(jié)構(gòu)必須使用&

11、#39;'Got an exception - Unexpected character 0xfffd in identifier因?yàn)闆]有設(shè)置checkstyle配置文件的charset為UTF-8,而類文件使用UTF-8編碼,并且含有中文“” should be on the previous line“” 應(yīng)該位于前一行Methods is missing a javadoc comment方法前面缺少javadoc注釋Expected throws tag for “Exception”在注釋中希望有throws的說明“.” Is prec

12、eeded with whitespace“.” 前面不能有空格“.” Is followed by whitespace“.” 后面不能有空格“=” is not preceeded with whitespace“=”前面缺少空格“=” is not followed with whitespace“=” 后面缺少空格“” should be on the same line“” 應(yīng)該與下條語句位于同一行Unused param tag for “unused”沒有參數(shù)“unused”,不需注釋Var

13、iable “X” missing javadoc變量“CA”缺少javadoc注釋Line contains a tab character行含有”tab” 字符Redundant “Public” modifier冗余的“public” modifierfinal modifier out of order with the JSL suggestionfinal修飾符的順序錯(cuò)誤Avoid using the “.*” form of importImport格式避免使用“.*”Redundant import

14、 from the same package從同一個(gè)包中Import內(nèi)容Unused import-X Importimport的X類沒有被使用Duplicate import to line X重復(fù)Import同一個(gè)內(nèi)容Import from illegal package從非法包中 Import內(nèi)容“while” construct must use “”“while” 語句缺少“”Variable “X” must be private and have accessor method變量“X”應(yīng)該是private的,

15、并且有調(diào)用它的方法Variable “X” must match pattern “a-za-zA-Z0-9*$”變量“X”不符合命名規(guī)則“a-za-zA-Z0-9*$”“(” is followed by whitespace“(” 后面不能有空格“)” is proceeded by whitespace“)” 前面不能有空格2.3CheckStyle默認(rèn)提供的檢查內(nèi)容Javadoc注釋 命名約定 標(biāo)題 Import語句 體積大小 空白 修飾符  塊&

16、#160;代碼問題 類設(shè)計(jì) 混合檢查(包活一些有用的比如非必須的 System.out和printstackTrace) 從上面可以看出,CheckStyle提供了大部分功能都是對于代碼規(guī)范 的檢查,而沒有提供象PMD和Jalopy那么多的增強(qiáng)代碼質(zhì)量和修改代碼的功能。但是,對于團(tuán)隊(duì)開發(fā),尤其是強(qiáng)調(diào)代碼規(guī)范的公司來說,它的功能已經(jīng)足夠強(qiáng)大。三、 FindBugs的介紹和使用1、 介紹Findbugs是一個(gè)在java程序中查找bug的程序,它查找bug模式的實(shí)例,也就是可能出錯(cuò)的代碼實(shí)例,注意Findbugs是檢查java字節(jié)碼,也就是*.class文件。其實(shí)準(zhǔn)確的

17、說,它是尋找代碼缺陷的,很多我們寫的不好的地方,可以優(yōu)化的地方,它都能檢查出來。例如:未關(guān)閉的數(shù)據(jù)庫連接,缺少必要的null check,多余的 null check,多余的if后置條件,相同的條件分支,重復(fù)的代碼塊,錯(cuò)誤的使用了"=",建議使用StringBuffer代替字符串連加等等。而且我們還可以自己配置檢查規(guī)則(做哪些檢查,不做哪些檢查),也可以自己來實(shí)現(xiàn)獨(dú)有的校驗(yàn)規(guī)則(用戶自定義特定的bug模式需要繼承它的接口,編寫自己的校驗(yàn)類,屬于高級技巧)。2、 使用2.1 Findbugs使用樣例I. 同樣先設(shè)置項(xiàng)目的FindBugs屬性當(dāng)運(yùn)行插件沒有反應(yīng)的時(shí)候,可能是Mi

18、nimum confidence to report 屬性設(shè)置問題,這個(gè)屬性是設(shè)置報(bào)錯(cuò)等級的,如果設(shè)置為Medium,那么Low級別的錯(cuò)誤則不會提示。a. Run FindBugs Automatically開關(guān)當(dāng)此項(xiàng)選中后,F(xiàn)indBugs將會在你修改Java類時(shí)自動運(yùn)行,如你設(shè)置了Eclipse自動編譯開關(guān)后,當(dāng)你修改完Java文件保存,F(xiàn)indBugs就會運(yùn)行,并將相應(yīng)的信息顯示出來。當(dāng)此項(xiàng)沒有選中,你只能每次在需要的時(shí)候自己去運(yùn)行FindBugs來檢查你的代碼。b. Minimum priority to report選擇項(xiàng)這個(gè)選擇項(xiàng)是讓你選擇哪個(gè)級別的信息進(jìn)行顯示,有Low、Medi

19、um、High三個(gè)選擇項(xiàng)可以選擇,很類似于Log4J的級別設(shè)置啦。 比如:你選擇了High選擇項(xiàng),那么只有是High級別的提示信息才會被顯示。你選擇了Medium選擇項(xiàng),那么只有是Medium和High級別的提示信息才會被顯示。你選擇了Low選擇項(xiàng),那么所有級別的提示信息都會被顯示。c. Enable bug categories選擇項(xiàng)在這里是一些顯示Bug分類的選擇:Correctness關(guān)于代碼正確性相關(guān)方面的Performance關(guān)于代碼性能相關(guān)方面的Internationalization關(guān)于代碼國際化相關(guān)方面的Multithreaded correctness關(guān)于代碼多線程正確性相關(guān)

20、方面的Style關(guān)于代碼樣式相關(guān)方面的Malicious code vulnerability關(guān)于惡意破壞代碼相關(guān)方面的比如:如果你把Style的檢查框去掉不選擇中它,那么與Style分類相關(guān)的警告信息就不會顯示了。其它的類似。d. Select bug patterns to check for選擇項(xiàng)在這里你可以選擇所要進(jìn)行檢查的相關(guān)的Bug Pattern條目可以從Bug codes、Detector name、Detector description中看到相應(yīng)的是要檢查哪些方面的內(nèi)容,你可以根據(jù)需要選擇或去掉相應(yīng)的檢查條件。II. 右擊項(xiàng)目選擇Find Bugs的FindBugs選擇項(xiàng)目

21、,點(diǎn)擊右鍵選擇“Checkstyle”,會出現(xiàn)如下菜單:1) Find Bugs:使用Findbugs代碼中的錯(cuò)誤;2) Clear Bug Markers:清除bug 標(biāo)記;3) Save XML:保存XML;4) Open Analysis Results in Editor:在編輯器中打開分析結(jié)果;5) Load XML:下載XML。III. 運(yùn)行結(jié)果項(xiàng)目和文件后面括號中的數(shù)字代表其包含的錯(cuò)誤數(shù),在Java文件中,編輯框邊上的綠色瓢蟲代表了低級錯(cuò)誤,鼠標(biāo)放在上面會提示錯(cuò)誤具體信息,同時(shí)也可右擊瓢蟲,選擇show bug info 來查看具體錯(cuò)誤信息。IV. Bugs Info、Bugs

22、Explorer和Bugs Reviewer同樣在Windows的Show View中可以調(diào)出Bugs Info、Bugs Explorer和Bugs Reviewer工具調(diào),可以方便查看錯(cuò)誤信息。 2.2 錯(cuò)誤詳細(xì)說明Findbugs是一個(gè)靜態(tài)分析工具,它檢查類或者JAR 文件,將字節(jié)碼與一組缺陷模式進(jìn)行對比以發(fā)現(xiàn)可能的問題。Findbugs自帶檢測器,其中有60余種Bad practice,80余種Correctness,1種 Internationalization,12種Malicious code vulnerability,27種Multithreaded correctness,

23、23種Performance,43種Dodgy。Bad practice 壞的實(shí)踐一些不好的實(shí)踐,下面列舉幾個(gè):HE: 類定義了equals(),卻沒有hashCode();或類定義了equals(),卻使用Object.hashCode();或類定義了hashCode(),卻沒有equals();或類定義了hashCode(),卻使用Object.equals();類繼承了equals(),卻使用Object.hashCode()。SQL:Statement 的execute方法調(diào)用了非常量的字符串;或Prepared Statement是由一個(gè)非常量的字符串產(chǎn)生。DE: 方法終止或不處理異

24、常,一般情況下,異常應(yīng)該被處理或報(bào)告,或被方法拋出。Correctness 一般的正確性問題可能導(dǎo)致錯(cuò)誤的代碼,下面列舉幾個(gè):NP: 空指針被引用;在方法的異常路徑里,空指針被引用;方法沒有檢查參數(shù)是否null;null值產(chǎn)生并被引用;null值產(chǎn)生并在方法的異常路徑被引用;傳給方法一個(gè)聲明為NonNull的null參數(shù);方法的返回值聲明為NonNull實(shí)際是null。Nm: 類定義了hashcode()方法,但實(shí)際上并未覆蓋父類Object的hashCode();類定義了tostring()方法,但實(shí)際上并未覆蓋父類Object的toString();很明顯的方法和構(gòu)造器混淆;方法名容易混淆

25、。SQL:方法嘗試訪問一個(gè)Prepared Statement的0索引;方法嘗試訪問一個(gè)ResultSet的0索引。UwF:所有的write都把屬性置成null,這樣所有的讀取都是null,這樣這個(gè)屬性是否有必要存在;或?qū)傩詮臎]有被write。Internationalization 國際化當(dāng)對字符串使用upper或lowercase方法,如果是國際的字符串,可能會不恰當(dāng)?shù)霓D(zhuǎn)換。Malicious code vulnerability 可能受到的惡意攻擊如果代碼公開,可能受到惡意攻擊的代碼,下面列舉幾個(gè):FI: 一個(gè)類的finalize()應(yīng)該是protected,而不是public的。MS:

26、屬性是可變的數(shù)組;屬性是可變的Hashtable;屬性應(yīng)該是package protected的。Multithreaded correctness 多線程的正確性多線程編程時(shí),可能導(dǎo)致錯(cuò)誤的代碼,下面列舉幾個(gè):ESync:空的同步塊,很難被正確使用。MWN:錯(cuò)誤使用notify(),可能導(dǎo)致IllegalMonitorStateException異常;或錯(cuò)誤的使用wait()。No: 使用notify()而不是notifyAll(),只是喚醒一個(gè)線程而不是所有等待的線程。SC: 構(gòu)造器調(diào)用了Thread.start(),當(dāng)該類被繼承可能會導(dǎo)致錯(cuò)誤。Performance 性能問題可能導(dǎo)致性能

27、不佳的代碼,下面列舉幾個(gè):DM:方法調(diào)用了低效的Boolean的構(gòu)造器,而應(yīng)該用Boolean.valueOf();用類似Integer.toString(1) 代替new Integer(1).toString();方法調(diào)用了低效的float的構(gòu)造器,應(yīng)該用靜態(tài)的valueOf方法。SIC:如果一個(gè)內(nèi)部類想在更廣泛的地方被引用,它應(yīng)該聲明為static。SS: 如果一個(gè)實(shí)例屬性不被讀取,考慮聲明為static。UrF:如果一個(gè)屬性從沒有被read,考慮從類中去掉。UuF:如果一個(gè)屬性從沒有被使用,考慮從類中去掉。Dodgy 危險(xiǎn)的具有潛在危險(xiǎn)的代碼,可能運(yùn)行期產(chǎn)生錯(cuò)誤,下面列舉幾個(gè):CI:

28、類聲明為final但聲明了protected的屬性。DLS:對一個(gè)本地變量賦值,但卻沒有讀取該本地變量;本地變量賦值成null,卻沒有讀取該本地變量。ICAST: 整型數(shù)字相乘結(jié)果轉(zhuǎn)化為長整型數(shù)字,應(yīng)該將整型先轉(zhuǎn)化為長整型數(shù)字再相乘。INT:沒必要的整型數(shù)字比較,如X <= Integer.MAX_VALUE。NP: 對readline()的直接引用,而沒有判斷是否null;對方法調(diào)用的直接引用,而方法可能返回null。REC:直接捕獲Exception,而實(shí)際上可能是RuntimeException。ST: 從實(shí)例方法里直接修改類變量,即static屬性。 四、 PMD的介紹和使用1、

29、 介紹PMD是一種開源分析Java代碼錯(cuò)誤的工具。與其他分析工具不同的是,PMD通過靜態(tài)分析獲知代碼錯(cuò)誤。也就是說,在不運(yùn)行Java程序的情況下報(bào)告錯(cuò)誤。PMD的核心是JavaCC解析器生成器。PMD結(jié)合運(yùn)用JavaCC和EBNF(擴(kuò)展巴科斯-諾爾范式,Extended Backus-Naur Formal)語法,再加上JJTree,把Java源代碼解析成抽象語法樹(AST,Abstract Syntax Tree)。從根本上看,Java源代碼只是一些普通的文本。不過,為了讓解析器承認(rèn)這些普通的文本是合法的Java代碼,它們必須符合某種特定的結(jié)構(gòu)要求。這種結(jié)構(gòu)可以用一種稱為EBNF的句法元語言

30、表示,通常稱為“語法” (Grammar)。JavaCC根據(jù)語法要求生成解析器,這個(gè)解析器就可以用于解析用Java編程語言編寫的程序。 不過實(shí)際運(yùn)行 中的PMD還要經(jīng)過JJTree的一次轉(zhuǎn)換。JJTree是一個(gè)JavaCC的插件,通過AST擴(kuò)充JavaCC生成的解析器。AST是一個(gè)Java符號 流之上的語義層。有了JJTree,語法分析的結(jié)果不再是“System, ., out, ., . println”之類的符號序列,而是一個(gè)由對象構(gòu)成的樹型層次結(jié)構(gòu)。2、 使用2.1 PMD使用樣例I. 配置項(xiàng)目屬性,選擇Enable PMDII. 右擊項(xiàng)目,選擇PMD中的Check Code選

31、擇項(xiàng)目,點(diǎn)擊右鍵選擇“PMD”,會出現(xiàn)如下菜單:1) Generate Reports:生成報(bào)告2) Clear Violation Reviews:清除違反檢查3) Find Suspect Cut And Paste:查找可能的剪切粘貼4) Clear Violations:清除違反5) Check Code:檢查代碼III. 運(yùn)行結(jié)果運(yùn)行完后,會有一個(gè)違反大綱:右擊每條違反都可以查看具體違反的規(guī)則,例如查看第一條具體信息:IV. 在Windows 的show view 中調(diào)出Dataflow View通過Dataflow View 可以查看整段代碼的結(jié)構(gòu):V. 右擊一個(gè)類文件,選擇Gen

32、erate Abstract Syntax Tree可以生成這個(gè)類文件的抽象語法樹:2.2PMD 規(guī)則說明PMD 包含 16 個(gè)規(guī)則集,涵蓋了 Java 的各種常見問題,其中一些規(guī)則要比其他規(guī)則更有爭議:基本(rulesets/basic.xml) 規(guī)則的一個(gè)基本合集,可能大多數(shù)開發(fā)人員都不認(rèn)同它: catch 塊不該為空,無論何時(shí)重寫 equals(),都要重寫 hashCode(),等等。命名(rulesets/naming.xml) 對標(biāo)準(zhǔn) Java 命令規(guī)范的測試:變量名稱不應(yīng)太短;方法名稱不應(yīng)過長;類名稱應(yīng)當(dāng)以小寫字母開頭;方法和字段名應(yīng)當(dāng)以小寫字母開頭,等等。未使用的代碼(rule

33、sets/unusedcode.xml) 查找從未使用的私有字段和本地變量、執(zhí)行不到的語句、從未調(diào)用的私有方法,等等。 設(shè)計(jì)(rulesets/design.xml) 檢查各種設(shè)計(jì)良好的原則,例如: switch 語句應(yīng)當(dāng)有 default 塊,應(yīng)當(dāng)避免深度嵌套的 if 塊,不應(yīng)當(dāng)給參數(shù)重新賦值,不應(yīng)該對 double 值進(jìn)行相等比較。 導(dǎo)入語句(rulesets/imports.xml) 檢查 import 語句的問題,比如同一個(gè)類被導(dǎo)入兩次或者被導(dǎo)入 java.lang 的類中。 JUnit 測試(rulesets/junit.xml) 查找測試用例和測試方法的特定問題,例如方法名稱的正確

34、拼寫,以及 suite() 方法是不是 static 和 public。 字符串(rulesets/string.xml) 找出處理字符串時(shí)遇到的常見問題,例如重復(fù)的字符串標(biāo)量,調(diào)用 String 構(gòu)造函數(shù),對 String 變量調(diào)用 toString() 方法。 括號(rulesets/braces.xml) 檢查 for、 if、 while 和 else 語句是否使用了括號。 代碼尺寸(rulesets/codesize.xml) 測試過長的方法、有太多方法的類以及重構(gòu)方面的類似問題。 Javabean(rulesets/javabeans.xml) 查看 JavaBean 組件是否違反 JavaBean 編碼規(guī)范,比如沒有序列化的 bean 類。 終結(jié)函數(shù)(finalizer) 因?yàn)樵?Java 語言中, finalize() 方法不是那么普遍(我上次編

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論