java開發(fā)學(xué)習(xí)編碼_第1頁
java開發(fā)學(xué)習(xí)編碼_第2頁
java開發(fā)學(xué)習(xí)編碼_第3頁
java開發(fā)學(xué)習(xí)編碼_第4頁
java開發(fā)學(xué)習(xí)編碼_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JAVA開發(fā)編碼規(guī)范公司管理規(guī)范JAVA開發(fā)編碼規(guī)范江蘇七葫蘆信息科技有限公司研發(fā)部二零一五年四月二十二日

1. 引言 21.1. 目的 21.2. 文檔概述 21.3. 概念和術(shù)語 21.4. 參考文檔 22. 命名規(guī)范 32.1. 總則 32.2. 類、接口、包命名 32.3. 成員函數(shù)命名 32.4. 字段命名 32.5. 常量的命名 32.6. 局部變量命名 32.7. 函數(shù)參數(shù)的命名 33. 注釋規(guī)范 33.1 注釋的方式 33.2 注釋的內(nèi)容 33.3 注釋的規(guī)則 34. 書寫規(guī)范 34.1 基本格式 34.2 對(duì)齊 34.3 空行空格 34.4 斷行 34.5 局部變量的聲明 34.6 類成員的聲明順序 34.7 表達(dá)式與語句 35 數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范 35.1 通用規(guī)范 35.2 表的命名 35.3 表的設(shè)計(jì)表 35.4 列的設(shè)計(jì) 3引言目的本規(guī)范的用于指導(dǎo)公司所有Java應(yīng)用程序開發(fā)編碼。制定編碼規(guī)范的首要考慮的目標(biāo)是:提高代碼的可讀性。從而使現(xiàn)有的項(xiàng)目成員能夠互相快速地讀懂代碼;使后加入的程序員很快熟悉已有代碼;使維護(hù)人員容易、高效地維護(hù)代碼。規(guī)范編碼的同時(shí)要考慮的目標(biāo)還有:代碼質(zhì)量、生產(chǎn)效率、調(diào)式效率、維護(hù)效率。但當(dāng)可讀性和編寫效率在某些局部問題上沖突時(shí),可讀性優(yōu)先。因?yàn)榭勺x性是調(diào)式效率、維護(hù)效率的基礎(chǔ),是保證代碼質(zhì)量的前提。文檔概述本規(guī)范的制定前提是盡量與行業(yè)規(guī)范一致,主要是sun的java規(guī)范,同時(shí)吸收了一些實(shí)用的公司級(jí)規(guī)范,例如Ambysoft公司提出的一套比較實(shí)用的規(guī)范。附錄中的編程技巧僅供參考和作為技巧積累的開始。概念和術(shù)語塊(block):成對(duì)括號(hào){}中的代碼。包(package) 局部包(localpackage):一個(gè)開發(fā)組織內(nèi)部使用的包,不在開發(fā)組織之外分發(fā)和使用。 全局包(globepackage):分發(fā)給多個(gè)組織使用的包。類(class)接口(interface)常量(constant)局部變量(localvariable)參考文檔《WritingRobustJavaCode,TheAmbySoftInc.C》,ScottW.Ambler《CodeConventionsfortheJavaTMProgrammingLanguage》《ThinkinginJava》命名規(guī)范總則好的命名規(guī)則能極大地增加可讀性和可維護(hù)性。同時(shí),對(duì)于一個(gè)有上百個(gè)人共同完成的。大項(xiàng)目來說,統(tǒng)一命名約定也是一項(xiàng)必不可少的內(nèi)容。本章對(duì)程序中的所有標(biāo)識(shí)符(包括包、變量名、常量名、方法名、類名、接口等)的命名做出約定。三種命名規(guī)范說明:Pascal規(guī)范:第1個(gè)字符大寫,目標(biāo)名中的每個(gè)單詞的第1個(gè)字母也大寫,比如:InvoiceNumber或者PrintInvoice。其他的所有字符都小寫。Camel規(guī)范:第1個(gè)字符不大寫,但目標(biāo)名中的每個(gè)單詞的第1個(gè)字母大寫,比如:invoiceNumber。其他的所有字符都小寫。匈牙利規(guī)范:在目標(biāo)名中加入表示類型的前綴,如strName。長(zhǎng)度適宜。最好小于15個(gè)字符,測(cè)試類/函數(shù)的命名例外。類、接口、包命名包的命名對(duì)于包的聲明,要遵循統(tǒng)一的命名規(guī)范來對(duì)包的聲明進(jìn)行說明。包名總是小寫,不要出現(xiàn)下劃線等符號(hào),名詞用有意義的縮寫,并且前綴是一個(gè)頂級(jí)域名(如當(dāng)前的com,edu,gov,mil,net,org)。包名稱的隨后部分根據(jù)織自身的命名規(guī)范變化。這樣的規(guī)范可通過指定分公司、項(xiàng)目等來確定。樣例:com.項(xiàng)目名稱.模塊名.類的命名類名采用大小寫結(jié)合的方法,構(gòu)成類名的每個(gè)單詞的首字母的首字母也必須大寫,即采用Pascal規(guī)范。在構(gòu)成類名的單詞之間不用下劃線。接口命名接口命名和類命名規(guī)范相同。以“I”作為前綴,標(biāo)識(shí)此類為接口“Interface”。成員函數(shù)命名動(dòng)賓結(jié)構(gòu)或動(dòng)詞,函數(shù)的目的很明確。動(dòng)詞小寫,其它詞首字母大寫。例如: openAccount() printMailingLabel() delete() save()存取函數(shù)setter和getter存取函數(shù)getter和setter分別用于讀取或設(shè)置字段的值。一般字段的存取函數(shù)名稱的格式如下: set+字段名、get+字段名例如:setAccountNumber()、getCustomerIDbool型字段的存取函數(shù)的命名根據(jù)字段內(nèi)容可用is作前綴。例如:isClosed(),setClose()。Constructor的命名必須與class同名。此規(guī)范由Sun規(guī)定,必須嚴(yán)格遵守。字段命名用英文全拼,表明字段內(nèi)容。集合字段(數(shù)組、向量)用復(fù)數(shù)。舉例: orderItems customers discountRate unitPrice zipCode常量的命名 常量名都要使用大寫字母,用下劃線‘_’分割單詞例如:staticfinalintMIN_WIDTH=4;staticfinalintMAX_WIDTH=999;staticfinalintGET_THE_CPU=1;局部變量命名第一個(gè)字母小寫,中間單詞的第一個(gè)字母大寫。不要用_或&作為第一個(gè)字母。盡量使用短而且具有意義的單詞。一般變量名不得取單個(gè)字符(如i、j、k等)作為變量名,單個(gè)字符一般用于局部循環(huán)變量。如果變量是集合,則變量名應(yīng)用復(fù)數(shù)。命名組件采用匈牙利命名法,所有前綴均應(yīng)遵循同一個(gè)組件名稱縮寫列表。局部變量及輸入?yún)?shù)不要與類成員變量同名(get/set方法與構(gòu)造函數(shù)除外)函數(shù)參數(shù)的命名函數(shù)參數(shù)的命名約定與局部變量的相同。用正確的反義詞命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。說明:下面是一些在軟件中常用的反義詞。add/remove;begin/end;create/destroy;insert/delete;first/last;get/set;increment/decrement;put/get;add/delete;lock/unlock;open/close;min/max;old/new;start/stop;next/previous;source/target;show/hide;send/receive;source/destination;cut/paste;up/down;

如下單詞的縮寫能夠被大家認(rèn)可:argumentargOperatingsystemOSbufferbufparameterparamclearclrpreviousprevclockclkprioritypriocomparecmpreadrdconfigurationcfgreadyrdycontextctxregisterregdelaydlyschedulescheddevicedevsemaphoresemdisabledisstackstkdisplaydispsynchronizesyncenableentimertmrerrorerrtriggertrigfunctionfnctwritewrhexadecimalhexmaximummaxinitializeinitmessagemsgmailboxmboxminimumminmanagermgrmultiplexmux注釋規(guī)范注釋有于理解代碼,有效的注釋是指在代碼的功能、意圖層次上進(jìn)行注釋,提供有用、額外的信息,而不是代碼表面意義的簡(jiǎn)單重復(fù)。注釋的方式行注釋:“//注釋內(nèi)容”和“/**注釋內(nèi)容*/”兩種注釋形式。文檔型注釋:“/**注釋內(nèi)容*/”分成多行書寫的形式,注釋內(nèi)容里包含標(biāo)簽。一般類公共變量的聲明采用行注釋。類、接口、構(gòu)造函數(shù)、方法等的聲明采用文檔型注釋。注釋的內(nèi)容注釋使用中文注釋。與doc有關(guān)的標(biāo)準(zhǔn)文單詞標(biāo)簽保留。說明:文檔型注釋描述了Java類(Javaclasses),接口(interfaces),構(gòu)造函數(shù)(constructors)、方法(methods)和域(fields)。每一個(gè)文檔注釋都包含在/**…*/分隔符中,每一個(gè)類(class)、接口(interface)或成員(member)都有一個(gè)注釋。這些注釋應(yīng)該只出現(xiàn)在聲明(declaration)。標(biāo)簽用處用途@author作者的名稱類、接口說明特定某一段程序代碼的作者。每一個(gè)作者各有一個(gè)標(biāo)記。@deprecated類、方法說明該類的應(yīng)用程序程接口(API)已被廢棄,因此應(yīng)不再使用。@exceptionname方法說明由方法發(fā)出的異常。一個(gè)異常采用一個(gè)標(biāo)記,description并要給出異常的完整類名。@paramname參數(shù)名的描述方法用來說明傳遞給一個(gè)方法的參數(shù),其中包括參數(shù)的類型/類和用法。每個(gè)參數(shù)各有一個(gè)標(biāo)記。@return方法返回值的描述方法若方法有返回值,對(duì)該返回值進(jìn)行說明。應(yīng)說明返回值的類型/類和可能的用途。@since類、方法例如:sinceJDK1.1:說明自從有JDK1.1以來,該項(xiàng)已存在了多長(zhǎng)時(shí)間。@see類名類、接口、方法、字段在文檔中生成指向特定類的超文本鏈接??梢圆⑶覒?yīng)該采用完全合法的類名。@seeClassName#memberfunctionName類、接口、方法、字段在文檔中生成指向特定方法的超文本鏈接??梢圆⑶覒?yīng)該采用完全合法的類名。@version版本號(hào)類、接口說明特定一段代碼的版本信息。注釋的規(guī)則類、接口頭部必須進(jìn)行注釋。說明:注釋必須列出:類、接口的名稱、內(nèi)容摘及作者等。/***類名稱:*內(nèi)容摘要://說明主要功能。*@author*/公共方法前面應(yīng)進(jìn)行文檔型注釋。說明:注釋必須列出:方法編號(hào)、主要功能、參數(shù)類型、輸入?yún)?shù)、返回值、調(diào)用的前置條件和后置條件、異常說明、關(guān)鍵算法、可見性決策等。下面是公共方法頭部的注釋:/***方法名稱:*內(nèi)容摘要:<列出主要功能、調(diào)用說明、異常說明、業(yè)務(wù)邏輯等>*@param*@return*@throws*/publicStringgetName(Stringname){returnname;}注釋應(yīng)與其描述的代碼相近說明:在使用縮寫時(shí)或之前,應(yīng)對(duì)縮寫進(jìn)行必要的說明。避免在代碼行的末尾添加注釋;對(duì)代碼的注釋應(yīng)放在其上方(需與其上面的代碼用空行隔開)或右方(對(duì)單條語句的注釋)相鄰位置,不可放在下面。如下書寫結(jié)構(gòu)比較清晰//獲得子系統(tǒng)索引subSysIndex=data.getSysIndex;//代碼段1注釋[代碼段1]/*代碼段2注釋*/[代碼段2]注釋與所描述內(nèi)容進(jìn)行同樣的縮進(jìn)。說明:這樣可使程序排版整齊,并方便注釋的閱讀與理解。如下注釋結(jié)構(gòu)比較清晰intdoSomething(){/*代碼段1注釋*/[代碼段1]/*代碼段2注釋*/[代碼段2]}包含在{}中代碼塊的結(jié)束處要加注釋,便于閱讀。特別是多分支、多重嵌套的條件語句或循環(huán)語句。說明:此時(shí)注釋可以用文,方便查找對(duì)應(yīng)的語句。voiddoSomething(){if(…){…while(…){…}//endofwhile(…)//指明該條while語句結(jié)束…}//endofif(…)//指明是哪條語句結(jié)束}//endofvoidmain()//指明函數(shù)的結(jié)束對(duì)分支語句(條件分支、循環(huán)語句等)必須寫注釋。說明:這些語句往往是程序?qū)崿F(xiàn)某一特殊功能的關(guān)鍵,對(duì)于維護(hù)人員來說,良好的注釋有于更好的理解程序,有時(shí)甚至優(yōu)于看設(shè)計(jì)文檔。書寫規(guī)范基本格式源代碼文件(.java)的布局順序是:包、import語句、類。遵循統(tǒng)一的布局順序來書寫import語句,不同類別的import語句之間用空行分隔。說明:package語句其后可跟import語句,而且與package間隔一個(gè)空行。import包的排列順序?yàn)閖ava開頭的包在最前面,接下來是引自外部的包,再接下來是應(yīng)用程序自身的包,即import中標(biāo)準(zhǔn)的包名要在本地的包名之前,而且按照字母順序排列。 packagecom.zte; importjava.awt.peer.CanvasPeer;//java自身的包 importjava.io.*; importcom.klg.field.*;//第三方的包 importcom.zte.ums.uep.*;//程序自身的包if、else、elseif、for、while、do等語句獨(dú)占一行,執(zhí)行語句不得緊跟其后。不論執(zhí)行語句有多少都要加{}。說明:這樣可以防止書寫失誤,也易于閱讀。if(varible1<varible2){varible1=varible2;}源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。說明:這樣便于程序閱讀和查找。length=10;width=5;//矩形的長(zhǎng)與寬關(guān)系較密切,放在一起。strCaption=Test”;對(duì)齊一般禁止使用制表符,必須使用空格進(jìn)行縮排??s進(jìn)為4個(gè)空格。程序的分界符‘{’緊隨類名、方法名和判斷條件之后,‘}’應(yīng)獨(dú)占一行,‘}’同時(shí)與引用它們的語句左對(duì)齊。{}之內(nèi)的代碼塊使用縮進(jìn)規(guī)則對(duì)齊。說明:這樣使代碼便于閱讀,并且方便注釋。do…while語句可以例外,while條件可與}在同一行。voidfunction(intvar){while(condition){doSomething();//與{}縮進(jìn)4格}//與引用它們的模塊左對(duì)齊}多維的數(shù)如果在定義時(shí)初始化,按照數(shù)的矩陣結(jié)構(gòu)分行書寫。int[][]number={{1,1,1},{2,4,8},{3,9,27},{4,16,64}};相關(guān)的賦值語句等號(hào)對(duì)齊。width=50;length=20;height=40;空行空格不同邏輯程序塊之間要使用空行分隔。說明:空行起著分隔程序段落的作用。適當(dāng)?shù)目招锌梢允钩绦虻牟季指忧逦?。voiddoSomething(){Connectioncon=null;//數(shù)據(jù)庫(kù)連接booleanreturnParameter=false;//返回//空一行//if代碼的注釋if(reconsign==null){returnfalse;}一元操作符如“++”、“--”、“!”、“~”、(類型)等前后不加空格。“[]”“.”這類操作符前后不加空格。!value~value++countnumber[i]=5;box.getWidth();多元運(yùn)算符和它們的操作數(shù)之間至少需要一個(gè)空格。說明:空格的多少根據(jù)上下文調(diào)整。value=oldValue;total+value;number+=2;方法名之后不要留空格。說明:方法名后緊跟左括號(hào)‘(’?!?’向后緊跟,‘)’、‘,’、‘;’向前緊跟,緊跟處不留空格?!?’之后要留空格。‘;’不是行結(jié)束符號(hào)時(shí)其后要留空格。例子中的凵代表空格。for(i凵=凵0;凵i凵<凵MAX_BSC_NUM;凵i++){doSomething(width,凵height);}斷行長(zhǎng)表達(dá)式(超過120列)要在低優(yōu)先級(jí)操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊。斷行方法:1.在逗號(hào)后斷行2.在操作符前斷行3.在低優(yōu)先級(jí)操作符處斷行對(duì)齊方法:1.將新行與同一級(jí)別的先前行的表達(dá)式的起始端對(duì)齊。2.條件表達(dá)式的續(xù)行在第一個(gè)條件處對(duì)齊。3.for循環(huán)語句的續(xù)行在初始化條件語句處對(duì)齊。4.函數(shù)調(diào)用和函數(shù)聲明的續(xù)行在第一個(gè)參數(shù)處對(duì)齊。5.賦值語句的續(xù)行應(yīng)在賦值號(hào)處對(duì)齊。6.如果上述規(guī)則導(dǎo)致代碼排列混亂或代碼左邊界少于兩個(gè)縮進(jìn),可用兩倍縮進(jìn)替代。方法聲明時(shí),修飾符、類型與名稱不允許分行書寫。publicstaticdoublecalculateArea(doublewidth,doubleheight);局部變量的聲明在JAVA中,局部變量可以隨用隨聲明,也可以在成員函數(shù)的代碼段之前集中聲明。前者用起來比較方便,但很難控制程序的易讀性,有可能聲明語句和首次使用它的語句中間有一些其它代碼,成員函數(shù)用到哪些變量也很難一下看出來。建議使用后者,這樣程序易讀性更好。無論使用哪種方式,一個(gè)人在一個(gè)項(xiàng)目的代碼風(fēng)格應(yīng)該一致。堅(jiān)持一個(gè)局部變量只代表一個(gè)事物。循環(huán)變量可例外。一行只聲明一個(gè)變量。一個(gè)變量有且只有一個(gè)功能,不能把一個(gè)變量用于多種用途。類成員的聲明順序靜態(tài)成員變量/StaticFields靜態(tài)初始化塊/StaticInitializers成員變量/Fields初始化塊/Initializers構(gòu)造器/Constructors靜態(tài)成員方法/StaticMethods成員方法/Methods重載自O(shè)bject的方法如toString(),hashCode()和main方法類型(內(nèi)部類)/Types(InnerClasses)

注意:同等的類型,按public,protected,默認(rèn),private的順序排列,實(shí)現(xiàn)同一功能的多個(gè)方法應(yīng)放在一起,如果兩個(gè)規(guī)則有沖突,以后一條為準(zhǔn)。表達(dá)式與語句表達(dá)式是語句的一部分,它們是不可分割的。表達(dá)式和語句雖然看起來比較簡(jiǎn)單,但使用時(shí)隱患比較多。本章歸納了正確使用表達(dá)式和if、for、while、switch等基本語句的一些每一行應(yīng)該只包括一個(gè)語句。說明:復(fù)雜的語句閱讀起來難于理解,并容易隱含錯(cuò)誤。在表達(dá)式中使用括號(hào),使表達(dá)式的運(yùn)算順序更清晰。說明:由于將運(yùn)算符的優(yōu)先級(jí)與結(jié)合律熟記是比較困難的,為了防止產(chǎn)生歧義并提高可讀性,即使不加括號(hào)時(shí)運(yùn)算順序不會(huì)改變,也應(yīng)當(dāng)用括號(hào)確定表達(dá)式的操作順序。if(((iYear%4==0)&&(iYear%100!=0))||(iYear%400==0))當(dāng)復(fù)合語句作為控制流程的一部分時(shí),應(yīng)該用‘{}’把所有的復(fù)合語句括起來,即使只有一句簡(jiǎn)單語句。說明:這樣可以更方便地加入語句而不會(huì)由于忘掉加括號(hào)而引起的偶然性的錯(cuò)誤。intcount;...myMethod(){if(condition){count=1;}}不可將浮點(diǎn)變量用“==”或“!=”與任何數(shù)字比較。說明:無論是float還是double類型的變量,都有精度限制。所以一定要避免將浮點(diǎn)變量用“==”或“!=”與數(shù)字比較,應(yīng)該轉(zhuǎn)化成“>=”或“<=”形式。if((fResult>=-EPSINON)&&(fResult<=EPSINON))if(fResult==0.0)//隱含錯(cuò)誤的比較其中EPSINON是允許的誤差(即精度)。在switch語句中,每一個(gè)case分支必須使用break結(jié)尾,最后一個(gè)分支必須是default分支。說明:避免漏掉break語句造成程序錯(cuò)誤。有時(shí)編程邏輯需要,可以幾個(gè)case語句共用一個(gè)語句塊,對(duì)這種情況必須加注釋進(jìn)行說明。switch(iMessage){caseSPAN_ON:[處理語句]break;caseSPAN_OFF:[處理語句]break;default:[處理語句]break;}避免在“if”條件中賦值。說明:Java編譯器對(duì)boolean型變量在if條件語句中的賦值時(shí)合法的,對(duì)整型變量的賦值是不合法的。帶值的返回語句不需要用括號(hào)‘()’。說明:除非有時(shí)不得不用括號(hào)使返回結(jié)構(gòu)更加明顯。return;returnmyDisk.size();return(size?size:defaultSize);//用括號(hào)使返回結(jié)構(gòu)更加明顯。循環(huán)嵌套次數(shù)不大于3次。禁止在循環(huán)語句對(duì)數(shù)據(jù)進(jìn)行操作(CRUD)。dowhile語句和while語句僅使用一個(gè)條件。說明:保持程序簡(jiǎn)潔。如果需要判斷的條件較多,建議用臨時(shí)布爾變量先計(jì)算是否滿足條件。booleanbCondition;do{……..bCondition=((tAp[iPortNo].bStateAcpActivity!=PASSIVE)||(tAp[iPortNo].bStateLacpActivity!=PASSIVE))&&(abLacpEnabled[iPortNo])&&(abPortEenabled[iPortNo])}while(bCondition);在多重循環(huán)中,如果有可能,應(yīng)當(dāng)將最長(zhǎng)的循環(huán)放在最內(nèi)層,最短的循環(huán)放在最外層,以減少CPU跨切循環(huán)層的次數(shù)。編程慣例常量位于for循環(huán)中作為計(jì)數(shù)器值的數(shù)字常量,除了-1,0和1之外,不應(yīng)被直接寫入代碼。變量賦值避免在一個(gè)語句中給多個(gè)變量賦相同的值,它很難讀懂。例如: fooBar.fChar=barFoo.lchar='c';//AVOID!不要將賦值運(yùn)算符用在容易與相等關(guān)系運(yùn)算符混淆的地方。例如: if(c++=d++){//AVOID!(Javadisallows) ... }應(yīng)該寫成: if((c++=d++)!=0){ ... } 不要使用內(nèi)嵌(embedded)賦值運(yùn)算符試圖提高運(yùn)行時(shí)的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(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)論