java開(kāi)發(fā)日常總結(jié)_第1頁(yè)
java開(kāi)發(fā)日??偨Y(jié)_第2頁(yè)
java開(kāi)發(fā)日??偨Y(jié)_第3頁(yè)
java開(kāi)發(fā)日常總結(jié)_第4頁(yè)
java開(kāi)發(fā)日??偨Y(jié)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(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、Java開(kāi)發(fā)日常總結(jié)Java開(kāi)發(fā)日??偨Y(jié)撰寫(xiě)作者:王 浩編寫(xiě)日期:2015年4月28日目錄 TOC o 1-3 h z u HYPERLINK l _Toc418115613 1JavaWeb前端技術(shù) PAGEREF _Toc418115613 h 4 HYPERLINK l _Toc418115614 1.1超文本標(biāo)記語(yǔ)言(HTML) PAGEREF _Toc418115614 h 4 HYPERLINK l _Toc418115615 1.1.1常用標(biāo)簽 PAGEREF _Toc418115615 h 4 HYPERLINK l _Toc418115616 1.2CSS樣式+DIV布局 P

2、AGEREF _Toc418115616 h 4 HYPERLINK l _Toc418115617 1.2.1CSS選擇器說(shuō)明 PAGEREF _Toc418115617 h 4 HYPERLINK l _Toc418115618 1.2.2DIV布局技巧 PAGEREF _Toc418115618 h 4 HYPERLINK l _Toc418115619 1.3JS+AJAX+Jquery PAGEREF _Toc418115619 h 4 HYPERLINK l _Toc418115620 1.3.1JS常用說(shuō)明 PAGEREF _Toc418115620 h 4 HYPERLINK

3、l _Toc418115621 1.3.2AJAX PAGEREF _Toc418115621 h 4 HYPERLINK l _Toc418115622 1.3.3Jquery PAGEREF _Toc418115622 h 4 HYPERLINK l _Toc418115623 2Java基礎(chǔ) PAGEREF _Toc418115623 h 5 HYPERLINK l _Toc418115624 2.1java基礎(chǔ) PAGEREF _Toc418115624 h 5 HYPERLINK l _Toc418115625 2.1.1配置jdk環(huán)境變量 PAGEREF _Toc418115625

4、 h 5 HYPERLINK l _Toc418115626 2.1.2java基本數(shù)據(jù)類型 PAGEREF _Toc418115626 h 6 HYPERLINK l _Toc418115627 2.1.3Java的三大特征 PAGEREF _Toc418115627 h 6 HYPERLINK l _Toc418115628 2.2集合 PAGEREF _Toc418115628 h 7 HYPERLINK l _Toc418115629 2.3多線程 PAGEREF _Toc418115629 h 7 HYPERLINK l _Toc418115630 2.4設(shè)計(jì)模式 PAGEREF _

5、Toc418115630 h 7 HYPERLINK l _Toc418115631 3Javaweb開(kāi)發(fā) PAGEREF _Toc418115631 h 7 HYPERLINK l _Toc418115632 3.1JSP PAGEREF _Toc418115632 h 7 HYPERLINK l _Toc418115633 3.1.1三級(jí)標(biāo)題 PAGEREF _Toc418115633 h 7 HYPERLINK l _Toc418115634 3.2常用框架(SSH) PAGEREF _Toc418115634 h 7 HYPERLINK l _Toc418115635 3.2.1Str

6、uts PAGEREF _Toc418115635 h 7 HYPERLINK l _Toc418115636 3.2.2Spring PAGEREF _Toc418115636 h 7 HYPERLINK l _Toc418115637 3.2.3Hibernate PAGEREF _Toc418115637 h 7 HYPERLINK l _Toc418115638 3.2.4Mybatis PAGEREF _Toc418115638 h 7 HYPERLINK l _Toc418115639 4數(shù)據(jù)庫(kù)(DB) PAGEREF _Toc418115639 h 7 HYPERLINK l _

7、Toc418115640 4.1基本SQL語(yǔ)法 PAGEREF _Toc418115640 h 7 HYPERLINK l _Toc418115641 4.1.1三級(jí)標(biāo)題 PAGEREF _Toc418115641 h 8 HYPERLINK l _Toc418115642 4.2MySQL數(shù)據(jù)庫(kù) PAGEREF _Toc418115642 h 8 HYPERLINK l _Toc418115643 4.3Oracle數(shù)據(jù)庫(kù) PAGEREF _Toc418115643 h 8 HYPERLINK l _Toc418115644 4.4DB2數(shù)據(jù)庫(kù) PAGEREF _Toc418115644 h

8、 8 HYPERLINK l _Toc418115645 4.5Sqlserver2000數(shù)據(jù)庫(kù) PAGEREF _Toc418115645 h 8 HYPERLINK l _Toc418115646 4.6Informix數(shù)據(jù)庫(kù) PAGEREF _Toc418115646 h 8 HYPERLINK l _Toc418115647 5web服務(wù)器 PAGEREF _Toc418115647 h 8 HYPERLINK l _Toc418115648 5.1Tomcat PAGEREF _Toc418115648 h 8 HYPERLINK l _Toc418115649 5.1.1三級(jí)標(biāo)題

9、PAGEREF _Toc418115649 h 8 HYPERLINK l _Toc418115650 5.2Weblogic服務(wù)器 PAGEREF _Toc418115650 h 8 HYPERLINK l _Toc418115651 5.3Websphere(WAS)服務(wù)器 PAGEREF _Toc418115651 h 8 HYPERLINK l _Toc418115652 6系統(tǒng)操作說(shuō)明 PAGEREF _Toc418115652 h 9 HYPERLINK l _Toc418115653 6.1在windows下安裝虛擬機(jī) PAGEREF _Toc418115653 h 9 HYPE

10、RLINK l _Toc418115654 6.2Linux系統(tǒng) PAGEREF _Toc418115654 h 9 HYPERLINK l _Toc418115655 6.2.1三級(jí)標(biāo)題 PAGEREF _Toc418115655 h 9 HYPERLINK l _Toc418115656 6.3Windows系統(tǒng) PAGEREF _Toc418115656 h 9 HYPERLINK l _Toc418115657 6.3.1在dos下常用命令及含義 PAGEREF _Toc418115657 h 9 HYPERLINK l _Toc418115658 7常用開(kāi)發(fā)工具 PAGEREF _T

11、oc418115658 h 10 HYPERLINK l _Toc418115659 7.1java開(kāi)發(fā)工具 PAGEREF _Toc418115659 h 10 HYPERLINK l _Toc418115660 7.1.1三級(jí)標(biāo)題 PAGEREF _Toc418115660 h 10 HYPERLINK l _Toc418115661 7.2頁(yè)面設(shè)計(jì)工具 PAGEREF _Toc418115661 h 10 HYPERLINK l _Toc418115662 7.3數(shù)據(jù)庫(kù)客戶端工具 PAGEREF _Toc418115662 h 10 HYPERLINK l _Toc418115663 7

12、.4數(shù)據(jù)建模工具 PAGEREF _Toc418115663 h 10 HYPERLINK l _Toc418115664 7.5流程設(shè)計(jì)工具 PAGEREF _Toc418115664 h 10 HYPERLINK l _Toc418115665 7.6演示編輯工具 PAGEREF _Toc418115665 h 10 HYPERLINK l _Toc418115666 8日常開(kāi)發(fā)異常 PAGEREF _Toc418115666 h 10 HYPERLINK l _Toc418115667 8.1Java程序開(kāi)發(fā)中的異常 PAGEREF _Toc418115667 h 10 HYPERLIN

13、K l _Toc418115668 8.1.1三級(jí)標(biāo)題 PAGEREF _Toc418115668 h 10 HYPERLINK l _Toc418115669 8.2前端頁(yè)面異常收集 PAGEREF _Toc418115669 h 11 HYPERLINK l _Toc418115670 8.3服務(wù)器異常收集 PAGEREF _Toc418115670 h 11 HYPERLINK l _Toc418115671 8.4數(shù)據(jù)庫(kù)異常收集 PAGEREF _Toc418115671 h 11 HYPERLINK l _Toc418115672 8.5操作系統(tǒng)操作時(shí)遇到的問(wèn)題和出現(xiàn)的異常 PAGE

14、REF _Toc418115672 h 11 HYPERLINK l _Toc418115673 8.5.1Windows系統(tǒng)下 PAGEREF _Toc418115673 h 11 HYPERLINK l _Toc418115674 8.5.2Linux系統(tǒng)下 PAGEREF _Toc418115674 h 11JavaWeb前端技術(shù)超文本標(biāo)記語(yǔ)言(HTML)常用標(biāo)簽四級(jí)標(biāo)題五級(jí)標(biāo)題CSS樣式+DIV布局 CSS選擇器說(shuō)明 DIV布局技巧JS+AJAX+JqueryJS常用說(shuō)明AJAXJqueryJava基礎(chǔ)java基礎(chǔ)配置jdk環(huán)境變量具體操作如下:1.以jdk安裝在D:java目錄下為例

15、。點(diǎn)擊我的電腦/計(jì)算機(jī)屬性高級(jí)系統(tǒng)設(shè)置環(huán)境變量如圖:2. 系統(tǒng)變量新建 JAVA_HOME 變量,變量值填寫(xiě)jdk的安裝目錄(本人是 D:Javajdk1.6.0_10);3. 系統(tǒng)變量尋找 Path 變量編輯, 在變量值最后輸入 %JAVA_HOME%bin;%JAVA_HOME%jrebin;4. 系統(tǒng)變量新建 CLASSPATH 變量, 變量值填寫(xiě) .;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar;注意:最前面有一點(diǎn)5.檢驗(yàn)是否安裝配置成功,運(yùn)行cmd輸入java version, 若如圖所示 顯示版本信息 則說(shuō)明安裝和配置成功。如圖:Jdk(java d

16、evelopment kit )java開(kāi)發(fā)和運(yùn)行環(huán)境。Jvm:java虛擬機(jī)其中javac是用來(lái)編譯java程序,java是運(yùn)行java程序在dos下演示java程序運(yùn)行dosjavac java文件(Test.java)java 編譯后的文件(不帶后綴如:java)java基本數(shù)據(jù)類型java中的數(shù)據(jù)類型基本數(shù)據(jù)類型(8種):布爾類型(boolean)字節(jié)類型(byte)短整型(short)整形(int)長(zhǎng)整形(long)字符型(char)單精度浮點(diǎn)類型(float)雙精度浮點(diǎn)類型(double)引用數(shù)據(jù)類型:數(shù)組,類,接口Java中的語(yǔ)句分支語(yǔ)句if:單分支語(yǔ)句,有多個(gè)判斷條件比如學(xué)習(xí)成

17、績(jī)(cj80&cj=90),還有更復(fù)雜的判斷等。if().else.2.switch語(yǔ)句,多分支語(yǔ)句,但入口判斷只有一個(gè)即判斷條件比較單一如下:public static String month(int strs)String str=;switch (4)case 0:str=strs+星期日;break;case 1:str=strs+星期一;break;case 2:str=strs+星期二;break;case 3:str=strs+星期三;break;case 4:str=strs+星期四;break;case 5:str=strs+星期五;break;case 6:str=str

18、s+星期六;break;return str;For循環(huán)ForeachWhile迭代器ItoratorJava的三大特征繼承(extends):即之類重用父類的代碼,之類可以繼承父類,抽象類,以及接口;注意:接口可以繼承接口,但其他類(包括抽象類不能繼承接口,只能實(shí)現(xiàn)(implements)接口,接口可以繼承接口);封裝:封裝隱藏了類的內(nèi)部實(shí)現(xiàn)機(jī)制,從而可以在不影響使用者的前提下改變類的內(nèi)部結(jié)構(gòu),同時(shí)保護(hù)了數(shù)據(jù)。多態(tài):接口實(shí)現(xiàn),繼承父類進(jìn)行方法重寫(xiě),同一個(gè)類中進(jìn)行方法重載重載:方法名一致,方法中的參數(shù)不同,如某一類中的構(gòu)造方法。調(diào)用時(shí)通過(guò)調(diào)用不同的參數(shù)的方法。(靜態(tài)多態(tài)性)重寫(xiě)(Overrid

19、ing):子類繼承父類同時(shí)覆蓋的方法,但記住一點(diǎn)方法名相同,參數(shù)也相同。(動(dòng)態(tài)多態(tài)性)集合集合和數(shù)組的區(qū)別數(shù)組的長(zhǎng)度是固定的,如圖(String strs=“1”,”2”,”3”,”4”,” 5” ).集合的長(zhǎng)度是可變的,可以動(dòng)態(tài)增加比如(一個(gè)用戶信息列表)。集合關(guān)系圖:Collectin接口實(shí)現(xiàn)類中存放的元素,Map接口實(shí)現(xiàn)的是類中的鍵值對(duì)如(1,”zhangsanfeng”).Set:特點(diǎn)是無(wú)順序,無(wú)重復(fù)public static Set sets()Set st=new HashSet();st.add(2);st.add(2);st.add(24);st.add(23);st.add(

20、24);st.add(1);Iterator it=st.iterator();while(it.hasNext()System.out.println(it.next();return st;運(yùn)行結(jié)果:22324/注意:將重復(fù)的數(shù)據(jù)刪除,僅保留一個(gè)相同的值。List:有順序(按插入的先后順序執(zhí)行),可重復(fù)(同時(shí)保留重復(fù)的數(shù)據(jù))如public static List lists()List ls=new ArrayList();ls.add(2);ls.add(2);ls.add(24);ls.add(23);ls.add(24);ls.add(1);Iterator it=ls.iterat

21、or();while(it.hasNext()System.out.println(it.next();return ls;執(zhí)行結(jié)果:222423241HashSet和LinkedHashSet:HashSet,為快速查找而設(shè)計(jì)的Set。存入HashSet的對(duì)象必須實(shí)現(xiàn)hashCode()和equals()。LinkedHashSet,具有HashSet的查詢速度,且內(nèi)部使用鏈表維護(hù)元素的順序(插入的次序),于是在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。TreeSet: 提供排序功能的Set,底層為樹(shù)結(jié)構(gòu)。相比較HashSet其查詢速度低,如果只是進(jìn)行元素的查詢,我們一般使用Has

22、hSet。ArrayList和LinkedList:ArrayList底層采用數(shù)組實(shí)現(xiàn),具有較高的查詢速度。LinkedList底層采用雙向循環(huán)列表實(shí)現(xiàn),進(jìn)行插入和刪除操作時(shí)具有較高的速度,我們還可以使用LinkedList來(lái)實(shí)現(xiàn)隊(duì)列和棧。TreeMap和HashMap:HashMap具有較高的速度(查詢?cè)鰟h),TreeMap則提供了按照鍵進(jìn)行排序的功能。public static Map maps()Map hm=new HashMap();hm.put(1, 22);hm.put(2, 33);hm.put(3, 44);hm.put(4, 55);Set st=hm.entrySet()

23、;Iterator it=st.iterator();while(it.hasNext()System.out.println(it.next();return hm;運(yùn)行結(jié)果:1=222=333=444=55多線程設(shè)計(jì)模式Javaweb開(kāi)發(fā)JSP三級(jí)標(biāo)題四級(jí)標(biāo)題五級(jí)標(biāo)題六級(jí)標(biāo)題常用框架(SSH)StrutsSpringHibernateMybatis數(shù)據(jù)庫(kù)(DB)DML,DDL,DCL,DQL區(qū)別SQL語(yǔ)言包括三種主要程序設(shè)計(jì)語(yǔ)言類別的語(yǔ)句:數(shù)據(jù)定義語(yǔ)言(DDL),數(shù)據(jù)操作語(yǔ)言(DML)及數(shù)據(jù)控制語(yǔ)言(DCL), 數(shù)據(jù)庫(kù)查詢(DQL)。DML(Data Manipulation Langua

24、ge): 數(shù)據(jù)操縱語(yǔ)言命令使用戶能夠查詢數(shù)據(jù)庫(kù)以及操作已有數(shù)據(jù)庫(kù)中的數(shù)據(jù)的計(jì)算機(jī)語(yǔ)言。DML分成交互型DML和嵌入型DML兩類。 依據(jù)語(yǔ)言的級(jí)別,DML又可分成過(guò)程性DML和非過(guò)程性DML兩種。 如insert,delete,update,select(插入、刪除、修改、檢索)等都是DML. 交互型DML:這類DML自成系統(tǒng),可在終端上直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。嵌入型DML:這類DML是嵌入在主語(yǔ)言中使用。此時(shí)主語(yǔ)言是經(jīng)過(guò)擴(kuò)充能處理DML語(yǔ)句的語(yǔ)言。過(guò)程性DML:用戶編程時(shí),不僅需要指出“做什么”(需要什么樣的數(shù)據(jù)),還需要指出“怎么做”(怎么獲得數(shù)據(jù))。層狀、網(wǎng)狀的DML屬于過(guò)程性語(yǔ)言。非過(guò)程性

25、DML:用戶編程時(shí),只需要指出“做什么”,不需要指出“怎么做”。關(guān)系型DML屬于非過(guò)程性語(yǔ)言。DDL(DataDefinition Language)數(shù)據(jù)庫(kù)模式定義語(yǔ)言是用于描述數(shù)據(jù)庫(kù)中要存儲(chǔ)的現(xiàn)實(shí)世界實(shí)體的語(yǔ)言。一個(gè)數(shù)據(jù)庫(kù)模式包含該數(shù)據(jù)庫(kù)中所有實(shí)體的描述定義。這些定義包括結(jié)構(gòu)定義、操作方法定義等。創(chuàng)建表create table tabname,drop,alter,創(chuàng)建視圖,創(chuàng)建存儲(chǔ)過(guò)程,索引等操作。DCL(DataControl Language)是數(shù)據(jù)庫(kù)控制語(yǔ)言。是用來(lái)設(shè)置或更改數(shù)據(jù)庫(kù)用戶或角色權(quán)限的語(yǔ)句,包括(grant,deny,revoke等)語(yǔ)句。在默認(rèn)狀態(tài)下,只有sysadmi

26、n,dbcreator,db_owner或db_securityadmin等人員才有權(quán)力執(zhí)行DCLDCL數(shù)據(jù)庫(kù)控制語(yǔ)言不同于程序設(shè)計(jì)語(yǔ)言,SQL語(yǔ)言(結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言)的組成部分包括了DCL數(shù)據(jù)庫(kù)控制語(yǔ)言.DQL(Data QueryLanguage SELECT) 數(shù)據(jù)查詢語(yǔ)言。是在DML中insert ,update,delete,select中拆出來(lái)的select查詢語(yǔ)言?;維QL語(yǔ)法創(chuàng)建表創(chuàng)建部門(mén)表:-創(chuàng)建表CREATE TABLE t_dept ( dept_id integer not NULL, dept_code varchar (100), dept_name VARCH

27、AR(100), t_p_dept varchar(100), t_deptdesc varchar(256), PRIMARY KEY(dept_id);-修改表名-增加表字段alter table t_user add dept_id integer; -刪除字段alter table t_dept drop column bak1; 三級(jí)標(biāo)題四級(jí)標(biāo)題五級(jí)標(biāo)題六級(jí)標(biāo)題MySQL數(shù)據(jù)庫(kù)分頁(yè)數(shù)據(jù)庫(kù)分頁(yè)使用關(guān)鍵字“l(fā)imit”其中第一個(gè)參數(shù):從多少行開(kāi)始,第二個(gè)參數(shù):顯示多少行。如student表select * from student order by id desc limint 20,1

28、0Mysql中的存儲(chǔ)過(guò)程的寫(xiě)法DELIMITER $USE demodb$DROP PROCEDURE IF EXISTS insrtData$CREATE DEFINER=rootlocalhost PROCEDURE insrtData(idINT,NAME VARCHAR(20),score DOUBLE)BEGIN SELECT * FROM student WHERE 1=1 ORDER BY id DESC; END$DELIMITER ;告訴mysql解釋器,該段命令是否已經(jīng)結(jié)束了,mysql是否可以執(zhí)行了。默認(rèn)情況下,delimiter是分號(hào);。使用call來(lái)執(zhí)行存儲(chǔ)過(guò)程CAL

29、L insrtData(14,lisi,60.00);Oracle數(shù)據(jù)庫(kù)分頁(yè)Oracle分頁(yè)使用關(guān)鍵字rownum ,示例是查詢30到40之間的10條數(shù)據(jù)。select * from (select rownum r,* from t where r30DB2數(shù)據(jù)庫(kù)分頁(yè)Db2分頁(yè)使用函數(shù)rownumber(),over(),如示例:select * from( select id,user_id,procduce,rownumber() over(order by id asc) rowsid from t_order) as a where a.rowsid=2 and a.rowsid右鍵

30、-屬性-高級(jí)-環(huán)境變量在系統(tǒng)變量中找到Path選項(xiàng),點(diǎn)擊編輯,增加變量值:%SystemRoot%/system32;%SystemRoot%;%SystemRoot%/system32/WBEM即可。win7 telnet命令無(wú)法開(kāi)啟的解決方案(不是內(nèi)部命令或外部命令)原因:在Wingdows XP上telnet都是已經(jīng)安裝好的,直接就可用,但是Win7是沒(méi)有這個(gè)功能的,都需要后來(lái)自己安裝的,下面就看一看步驟。解決方法:控制面板程序打開(kāi)或關(guān)閉windows功能”,在里面你可以看到許多服務(wù)項(xiàng),選擇“telnet服務(wù)器”和“telnet客戶端”確定即可。Linux系統(tǒng)下附錄資料:如何處理Java

31、異常及常見(jiàn)異常六種異常處理的陋習(xí)你覺(jué)得自己是一個(gè)Java專家嗎?是否肯定自己已經(jīng)全面掌握了Java的異常處理機(jī)制?在下面這段代碼中,你能夠迅速找出異常處理的六個(gè)問(wèn)題嗎? 1 OutputStreamWriter out = . 2 java.sql.Connection conn = . 3 try / 4 Statement stat = conn.createStatement(); 5 ResultSet rs = stat.executeQuery( 6 select uid, name from user); 7 while (rs.next() 8 9 out.println(ID

32、: + rs.getString(uid) / 10 ,姓名: + rs.getString(name); 11 12 conn.close(); / 13 out.close(); 14 15 catch(Exception ex) / 16 17 ex.printStackTrace(); /, 18 作為一個(gè)Java程序員,你至少應(yīng)該能夠找出兩個(gè)問(wèn)題。但是,如果你不能找出全部六個(gè)問(wèn)題,請(qǐng)繼續(xù)閱讀本文。 本文討論的不是Java異常處理的一般性原則,因?yàn)檫@些原則已經(jīng)被大多數(shù)人熟知。我們要做的是分析各種可稱為“反例”(anti-pattern)的違背優(yōu)秀編碼規(guī)范的常見(jiàn)壞習(xí)慣,幫助讀者熟悉這些典

33、型的反面例子,從而能夠在實(shí)際工作中敏銳地察覺(jué)和避免這些問(wèn)題。 反例之一:丟棄異常 代碼:15行-18行。 這段代碼捕獲了異常卻不作任何處理,可以算得上Java編程中的殺手。從問(wèn)題出現(xiàn)的頻繁程度和禍害程度來(lái)看,它也許可以和C/C+程序的一個(gè)惡名遠(yuǎn)播的問(wèn)題相提并論?不檢查緩沖區(qū)是否已滿。如果你看到了這種丟棄(而不是拋出)異常的情況,可以百分之九十九地肯定代碼存在問(wèn)題(在極少數(shù)情況下,這段代碼有存在的理由,但最好加上完整的注釋,以免引起別人誤解)。 這段代碼的錯(cuò)誤在于,異常(幾乎)總是意味著某些事情不對(duì)勁了,或者說(shuō)至少發(fā)生了某些不尋常的事情,我們不應(yīng)該對(duì)程序發(fā)出的求救信號(hào)保持沉默和無(wú)動(dòng)于衷。調(diào)用一下

34、printStackTrace算不上“處理異?!薄2诲e(cuò),調(diào)用printStackTrace對(duì)調(diào)試程序有幫助,但程序調(diào)試階段結(jié)束之后, printStackTrace就不應(yīng)再在異常處理模塊中擔(dān)負(fù)主要責(zé)任了。 丟棄異常的情形非常普遍。打開(kāi)JDK的ThreadDeath類的文檔,可以看到下面這段說(shuō)明:“特別地,雖然出現(xiàn)ThreadDeath是一種正常的情形,但ThreadDeath類是Error而不是Exception的子類,因?yàn)樵S多應(yīng)用會(huì)捕獲所有的Exception然后丟棄它不再理睬?!边@段話的意思是,雖然ThreadDeath代表的是一種普通的問(wèn)題,但鑒于許多應(yīng)用會(huì)試圖捕獲所有異常然后不予以適當(dāng)

35、的處理,所以JDK把 ThreadDeath定義成了Error的子類,因?yàn)镋rror類代表的是一般的應(yīng)用不應(yīng)該去捕獲的嚴(yán)重問(wèn)題。可見(jiàn),丟棄異常這一壞習(xí)慣是如此常見(jiàn),它甚至已經(jīng)影響到了Java本身的設(shè)計(jì)。 那么,應(yīng)該怎樣改正呢?主要有四個(gè)選擇: 1、處理異常。針對(duì)該異常采取一些行動(dòng),例如修正問(wèn)題、提醒某個(gè)人或進(jìn)行其他一些處理,要根據(jù)具體的情形確定應(yīng)該采取的動(dòng)作。再次說(shuō)明,調(diào)用printStackTrace算不上已經(jīng)“處理好了異?!?。 2、重新拋出異常。處理異常的代碼在分析異常之后,認(rèn)為自己不能處理它,重新拋出異常也不失為一種選擇。 3、把該異常轉(zhuǎn)換成另一種異常。大多數(shù)情況下,這是指把一個(gè)低級(jí)的異

36、常轉(zhuǎn)換成應(yīng)用級(jí)的異常(其含義更容易被用戶了解的異常)。 4、不要捕獲異常。 結(jié)論一:既然捕獲了異常,就要對(duì)它進(jìn)行適當(dāng)?shù)奶幚?。不要捕獲異常之后又把它丟棄,不予理睬。 反例之二:不指定具體的異常 代碼:15行。 許多時(shí)候人們會(huì)被這樣一種“美妙的”想法吸引:用一個(gè)catch語(yǔ)句捕獲所有的異常。最常見(jiàn)的情形就是使用catch(Exception ex)語(yǔ)句。但實(shí)際上,在絕大多數(shù)情況下,這種做法不值得提倡。為什么呢? 要理解其原因,我們必須回顧一下catch語(yǔ)句的用途。catch語(yǔ)句表示我們預(yù)期會(huì)出現(xiàn)某種異常,而且希望能夠處理該異常。異常類的作用就是告訴 Java編譯器我們想要處理的是哪一種異常。由于絕

37、大多數(shù)異常都直接或間接從java.lang.Exception派生,catch (Exception ex)就相當(dāng)于說(shuō)我們想要處理幾乎所有的異常。 再來(lái)看看前面的代碼例子。我們真正想要捕獲的異常是什么呢?最明顯的一個(gè)是SQLException,這是JDBC操作中常見(jiàn)的異常。另一個(gè)可能的異常是IOException,因?yàn)樗僮鱋utputStreamWriter。顯然,在同一個(gè)catch塊中處理這兩種截然不同的異常是不合適的。如果用兩個(gè)catch塊分別捕獲SQLException和IOException就要好多了。這就是說(shuō),catch語(yǔ)句應(yīng)當(dāng)盡量指定具體的異常類型,而不應(yīng)該指定涵蓋范圍太廣的E

38、xception類。 另一方面,除了這兩個(gè)特定的異常,還有其他許多異常也可能出現(xiàn)。例如,如果由于某種原因,executeQuery返回了null,該怎么辦?答案是讓它們繼續(xù)拋出,即不必捕獲也不必處理。實(shí)際上,我們不能也不應(yīng)該去捕獲可能出現(xiàn)的所有異常,程序的其他地方還有捕獲異常的機(jī)會(huì)?直至最后由JVM處理。 結(jié)論二:在catch語(yǔ)句中盡可能指定具體的異常類型,必要時(shí)使用多個(gè)catch。不要試圖處理所有可能出現(xiàn)的異常。 反例之三:占用資源不釋放 代碼:3行-14行。 異常改變了程序正常的執(zhí)行流程。這個(gè)道理雖然簡(jiǎn)單,卻常常被人們忽視。如果程序用到了文件、Socket、JDBC連接之類的資源,即使遇到

39、了異常,也要正確釋放占用的資源。為此,Java提供了一個(gè)簡(jiǎn)化這類操作的關(guān)鍵詞finally。 finally是樣好東西:不管是否出現(xiàn)了異常,F(xiàn)inally保證在try/catch/finally塊結(jié)束之前,執(zhí)行清理任務(wù)的代碼總是有機(jī)會(huì)執(zhí)行。遺憾的是有些人卻不習(xí)慣使用finally。 當(dāng)然,編寫(xiě)finally塊應(yīng)當(dāng)多加小心,特別是要注意在finally塊之內(nèi)拋出的異常?這是執(zhí)行清理任務(wù)的最后機(jī)會(huì),盡量不要再有難以處理的錯(cuò)誤。 結(jié)論三:保證所有資源都被正確釋放。充分運(yùn)用finally關(guān)鍵詞。反例之四:不說(shuō)明異常的詳細(xì)信息 代碼:3行-18行。 仔細(xì)觀察這段代碼:如果循環(huán)內(nèi)部出現(xiàn)了異常,會(huì)發(fā)生什么事

40、情?我們可以得到足夠的信息判斷循環(huán)內(nèi)部出錯(cuò)的原因嗎?不能。我們只能知道當(dāng)前正在處理的類發(fā)生了某種錯(cuò)誤,但卻不能獲得任何信息判斷導(dǎo)致當(dāng)前錯(cuò)誤的原因。 printStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類的執(zhí)行流程,但只提供了一些最基本的信息,未能說(shuō)明實(shí)際導(dǎo)致錯(cuò)誤的原因,同時(shí)也不易解讀。 因此,在出現(xiàn)異常時(shí),最好能夠提供一些文字信息,例如當(dāng)前正在執(zhí)行的類、方法和其他狀態(tài)信息,包括以一種更適合閱讀的方式整理和組織printStackTrace提供的信息。 結(jié)論四:在異常處理模塊中提供適量的錯(cuò)誤原因信息,組織錯(cuò)誤信息使其易于理解和閱讀。 反例之五:過(guò)于龐大的try塊 代碼:3行-14行。

41、 經(jīng)常可以看到有人把大量的代碼放入單個(gè)try塊,實(shí)際上這不是好習(xí)慣。這種現(xiàn)象之所以常見(jiàn),原因就在于有些人圖省事,不愿花時(shí)間分析一大塊代碼中哪幾行代碼會(huì)拋出異常、異常的具體類型是什么。把大量的語(yǔ)句裝入單個(gè)巨大的try塊就象是出門(mén)旅游時(shí)把所有日常用品塞入一個(gè)大箱子,雖然東西是帶上了,但要找出來(lái)可不容易。 一些新手常常把大量的代碼放入單個(gè)try塊,然后再在catch語(yǔ)句中聲明Exception,而不是分離各個(gè)可能出現(xiàn)異常的段落并分別捕獲其異常。這種做法為分析程序拋出異常的原因帶來(lái)了困難,因?yàn)橐淮蠖未a中有太多的地方可能拋出Exception。 結(jié)論五:盡量減小try塊的體積。 反例之六:輸出數(shù)據(jù)不完

42、整 代碼:7行-11行。 不完整的數(shù)據(jù)是Java程序的隱形殺手。仔細(xì)觀察這段代碼,考慮一下如果循環(huán)的中間拋出了異常,會(huì)發(fā)生什么事情。循環(huán)的執(zhí)行當(dāng)然是要被打斷的,其次, catch塊會(huì)執(zhí)行?就這些,再也沒(méi)有其他動(dòng)作了。已經(jīng)輸出的數(shù)據(jù)怎么辦?使用這些數(shù)據(jù)的人或設(shè)備將收到一份不完整的(因而也是錯(cuò)誤的)數(shù)據(jù),卻得不到任何有關(guān)這份數(shù)據(jù)是否完整的提示。對(duì)于有些系統(tǒng)來(lái)說(shuō),數(shù)據(jù)不完整可能比系統(tǒng)停止運(yùn)行帶來(lái)更大的損失。 較為理想的處置辦法是向輸出設(shè)備寫(xiě)一些信息,聲明數(shù)據(jù)的不完整性;另一種可能有效的辦法是,先緩沖要輸出的數(shù)據(jù),準(zhǔn)備好全部數(shù)據(jù)之后再一次性輸出。 結(jié)論六:全面考慮可能出現(xiàn)的異常以及這些異常對(duì)執(zhí)行流程的

43、影響。 改寫(xiě)后的代碼 根據(jù)上面的討論,下面給出改寫(xiě)后的代碼。也許有人會(huì)說(shuō)它稍微有點(diǎn)?嗦,但是它有了比較完備的異常處理機(jī)制。 OutputStreamWriter out = . java.sql.Connection conn = . try Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery( select uid, name from user); while (rs.next() out.println(ID: + rs.getString(uid) + ,姓名: + rs.getString

44、(name); catch(SQLException sqlex) out.println(警告:數(shù)據(jù)不完整); throw new ApplicationException(讀取數(shù)據(jù)時(shí)出現(xiàn)SQL錯(cuò)誤, sqlex); catch(IOException ioex) throw new ApplicationException(寫(xiě)入數(shù)據(jù)時(shí)出現(xiàn)IO錯(cuò)誤, ioex); finally if (conn != null) try conn.close(); catch(SQLException sqlex2) System.err(this.getClass().getName() + .myme

45、thod - 不能關(guān)閉數(shù)據(jù)庫(kù)連接: + sqlex2.toString(); if (out != null) try out.close(); catch(IOException ioex2) System.err(this.getClass().getName() + .mymethod - 不能關(guān)閉輸出文件 + ioex2.toString(); 本文的結(jié)論不是放之四海皆準(zhǔn)的教條,有時(shí)常識(shí)和經(jīng)驗(yàn)才是最好的老師。如果你對(duì)自己的做法沒(méi)有百分之百的信心,務(wù)必加上詳細(xì)、全面的注釋。 另一方面,不要笑話這些錯(cuò)誤,不妨問(wèn)問(wèn)你自己是否真地徹底擺脫了這些壞習(xí)慣。即使最有經(jīng)驗(yàn)的程序員偶爾也會(huì)誤入歧途,原因

46、很簡(jiǎn)單,因?yàn)樗鼈兇_確實(shí)實(shí)帶來(lái)了“方便”。所有這些反例都可以看作Java編程世界的惡魔,它們美麗動(dòng)人,無(wú)孔不入,時(shí)刻誘惑著你。也許有人會(huì)認(rèn)為這些都屬于雞皮蒜毛的小事,不足掛齒,但請(qǐng)記?。何鹨詯盒《鵀橹鹨陨菩《粸?。下面是一些 java異常集 算術(shù)異常類:ArithmeticExecption空指針異常類:NullPointerException類型強(qiáng)制轉(zhuǎn)換異常:ClassCastException數(shù)組負(fù)下標(biāo)異常:NegativeArrayException數(shù)組下標(biāo)越界異常:ArrayIndexOutOfBoundsException違背安全原則異常:SecturityException文件已

47、結(jié)束異常:EOFException文件未找到異常:FileNotFoundException字符串轉(zhuǎn)換為數(shù)字異常:NumberFormatException操作數(shù)據(jù)庫(kù)異常:SQLException輸入輸出異常:IOException方法未找到異常:NoSuchMethodExceptionjava.lang.AbstractMethodError抽象方法錯(cuò)誤。當(dāng)應(yīng)用試圖調(diào)用抽象方法時(shí)拋出。java.lang.AssertionError斷言錯(cuò)。用來(lái)指示一個(gè)斷言失敗的情況。java.lang.ClassCircularityError類循環(huán)依賴錯(cuò)誤。在初始化一個(gè)類時(shí),若檢測(cè)到類之間循環(huán)依賴則拋出

48、該異常。java.lang.ClassFormatError類格式錯(cuò)誤。當(dāng)Java虛擬機(jī)試圖從一個(gè)文件中讀取Java類,而檢測(cè)到該文件的內(nèi)容不符合類的有效格式時(shí)拋出。java.lang.Error錯(cuò)誤。是所有錯(cuò)誤的基類,用于標(biāo)識(shí)嚴(yán)重的程序運(yùn)行問(wèn)題。這些問(wèn)題通常描述一些不應(yīng)被應(yīng)用程序捕獲的反常情況。java.lang.ExceptionInInitializerError初始化程序錯(cuò)誤。當(dāng)執(zhí)行一個(gè)類的靜態(tài)初始化程序的過(guò)程中,發(fā)生了異常時(shí)拋出。靜態(tài)初始化程序是指直接包含于類中的static語(yǔ)句段。java.lang.IllegalAccessError違法訪問(wèn)錯(cuò)誤。當(dāng)一個(gè)應(yīng)用試圖訪問(wèn)、修改某個(gè)類的

49、域(Field)或者調(diào)用其方法,但是又違反域或方法的可見(jiàn)性聲明,則拋出該異常。java.lang.IncompatibleClassChangeError不兼容的類變化錯(cuò)誤。當(dāng)正在執(zhí)行的方法所依賴的類定義發(fā)生了不兼容的改變時(shí),拋出該異常。一般在修改了應(yīng)用中的某些類的聲明定義而沒(méi)有對(duì)整個(gè)應(yīng)用重新編譯而直接運(yùn)行的情況下,容易引發(fā)該錯(cuò)誤。java.lang.InstantiationError實(shí)例化錯(cuò)誤。當(dāng)一個(gè)應(yīng)用試圖通過(guò)Java的new操作符構(gòu)造一個(gè)抽象類或者接口時(shí)拋出該異常.java.lang.InternalError內(nèi)部錯(cuò)誤。用于指示Java虛擬機(jī)發(fā)生了內(nèi)部錯(cuò)誤。java.lang.Link

50、ageError鏈接錯(cuò)誤。該錯(cuò)誤及其所有子類指示某個(gè)類依賴于另外一些類,在該類編譯之后,被依賴的類改變了其類定義而沒(méi)有重新編譯所有的類,進(jìn)而引發(fā)錯(cuò)誤的情況。java.lang.NoClassDefFoundError未找到類定義錯(cuò)誤。當(dāng)Java虛擬機(jī)或者類裝載器試圖實(shí)例化某個(gè)類,而找不到該類的定義時(shí)拋出該錯(cuò)誤。java.lang.NoSuchFieldError域不存在錯(cuò)誤。當(dāng)應(yīng)用試圖訪問(wèn)或者修改某類的某個(gè)域,而該類的定義中沒(méi)有該域的定義時(shí)拋出該錯(cuò)誤。java.lang.NoSuchMethodError方法不存在錯(cuò)誤。當(dāng)應(yīng)用試圖調(diào)用某類的某個(gè)方法,而該類的定義中沒(méi)有該方法的定義時(shí)拋出該錯(cuò)誤。

51、java.lang.OutOfMemoryError內(nèi)存不足錯(cuò)誤。當(dāng)可用內(nèi)存不足以讓Java虛擬機(jī)分配給一個(gè)對(duì)象時(shí)拋出該錯(cuò)誤。java.lang.StackOverflowError堆棧溢出錯(cuò)誤。當(dāng)一個(gè)應(yīng)用遞歸調(diào)用的層次太深而導(dǎo)致堆棧溢出時(shí)拋出該錯(cuò)誤。java.lang.ThreadDeath線程結(jié)束。當(dāng)調(diào)用Thread類的stop方法時(shí)拋出該錯(cuò)誤,用于指示線程結(jié)束。java.lang.UnknownError未知錯(cuò)誤。用于指示Java虛擬機(jī)發(fā)生了未知嚴(yán)重錯(cuò)誤的情況。java.lang.UnsatisfiedLinkError未滿足的鏈接錯(cuò)誤。當(dāng)Java虛擬機(jī)未找到某個(gè)類的聲明為native方

52、法的本機(jī)語(yǔ)言定義時(shí)拋出。java.lang.UnsupportedClassVersionError不支持的類版本錯(cuò)誤。當(dāng)Java虛擬機(jī)試圖從讀取某個(gè)類文件,但是發(fā)現(xiàn)該文件的主、次版本號(hào)不被當(dāng)前Java虛擬機(jī)支持的時(shí)候,拋出該錯(cuò)誤。java.lang.VerifyError驗(yàn)證錯(cuò)誤。當(dāng)驗(yàn)證器檢測(cè)到某個(gè)類文件中存在內(nèi)部不兼容或者安全問(wèn)題時(shí)拋出該錯(cuò)誤。java.lang.VirtualMachineError虛擬機(jī)錯(cuò)誤。用于指示虛擬機(jī)被破壞或者繼續(xù)執(zhí)行操作所需的資源不足的情況。java.lang.ArithmeticException算術(shù)條件異常。譬如:整數(shù)除零等。java.lang.ArrayI

53、ndexOutOfBoundsException數(shù)組索引越界異常。當(dāng)對(duì)數(shù)組的索引值為負(fù)數(shù)或大于等于數(shù)組大小時(shí)拋出。java.lang.ArrayStoreException數(shù)組存儲(chǔ)異常。當(dāng)向數(shù)組中存放非數(shù)組聲明類型對(duì)象時(shí)拋出。java.lang.ClassCastException類造型異常。假設(shè)有類A和B(A不是B的父類或子類),O是A的實(shí)例,那么當(dāng)強(qiáng)制將O構(gòu)造為類B的實(shí)例時(shí)拋出該異常。該異常經(jīng)常被稱為強(qiáng)制類型轉(zhuǎn)換異常。java.lang.ClassNotFoundException找不到類異常。當(dāng)應(yīng)用試圖根據(jù)字符串形式的類名構(gòu)造類,而在遍歷CLASSPAH之后找不到對(duì)應(yīng)名稱的class文件

54、時(shí),拋出該異常。java.lang.CloneNotSupportedException不支持克隆異常。當(dāng)沒(méi)有實(shí)現(xiàn)Cloneable接口或者不支持克隆方法時(shí),調(diào)用其clone()方法則拋出該異常。java.lang.EnumConstantNotPresentException枚舉常量不存在異常。當(dāng)應(yīng)用試圖通過(guò)名稱和枚舉類型訪問(wèn)一個(gè)枚舉對(duì)象,但該枚舉對(duì)象并不包含常量時(shí),拋出該異常。java.lang.Exception根異常。用以描述應(yīng)用程序希望捕獲的情況。java.lang.IllegalAccessException違法的訪問(wèn)異常。當(dāng)應(yīng)用試圖通過(guò)反射方式創(chuàng)建某個(gè)類的實(shí)例、訪問(wèn)該類屬性、調(diào)用

55、該類方法,而當(dāng)時(shí)又無(wú)法訪問(wèn)類的、屬性的、方法的或構(gòu)造方法的定義時(shí)拋出該異常。java.lang.IllegalMonitorStateException違法的監(jiān)控狀態(tài)異常。當(dāng)某個(gè)線程試圖等待一個(gè)自己并不擁有的對(duì)象(O)的監(jiān)控器或者通知其他線程等待該對(duì)象(O)的監(jiān)控器時(shí),拋出該異常。java.lang.IllegalStateException違法的狀態(tài)異常。當(dāng)在Java環(huán)境和應(yīng)用尚未處于某個(gè)方法的合法調(diào)用狀態(tài),而調(diào)用了該方法時(shí),拋出該異常。java.lang.IllegalThreadStateException違法的線程狀態(tài)異常。當(dāng)縣城尚未處于某個(gè)方法的合法調(diào)用狀態(tài),而調(diào)用了該方法時(shí),拋出異

56、常。java.lang.IndexOutOfBoundsException索引越界異常。當(dāng)訪問(wèn)某個(gè)序列的索引值小于0或大于等于序列大小時(shí),拋出該異常。java.lang.InstantiationException實(shí)例化異常。當(dāng)試圖通過(guò)newInstance()方法創(chuàng)建某個(gè)類的實(shí)例,而該類是一個(gè)抽象類或接口時(shí),拋出該異常。java.lang.InterruptedException被中止異常。當(dāng)某個(gè)線程處于長(zhǎng)時(shí)間的等待、休眠或其他暫停狀態(tài),而此時(shí)其他的線程通過(guò)Thread的interrupt方法終止該線程時(shí)拋出該異常。java.lang.NegativeArraySizeException數(shù)組

57、大小為負(fù)值異常。當(dāng)使用負(fù)數(shù)大小值創(chuàng)建數(shù)組時(shí)拋出該異常。java.lang.NoSuchFieldException屬性不存在異常。當(dāng)訪問(wèn)某個(gè)類的不存在的屬性時(shí)拋出該異常。java.lang.NoSuchMethodException方法不存在異常。當(dāng)訪問(wèn)某個(gè)類的不存在的方法時(shí)拋出該異常。java.lang.NullPointerException空指針異常。當(dāng)應(yīng)用試圖在要求使用對(duì)象的地方使用了null時(shí),拋出該異常。譬如:調(diào)用null對(duì)象的實(shí)例方法、訪問(wèn)null對(duì)象的屬性、計(jì)算null對(duì)象的長(zhǎng)度、使用throw語(yǔ)句拋出null等等。java.lang.NumberFormatException

58、數(shù)字格式異常。當(dāng)試圖將一個(gè)String轉(zhuǎn)換為指定的數(shù)字類型,而該字符串確不滿足數(shù)字類型要求的格式時(shí),拋出該異常。java.lang.RuntimeException運(yùn)行時(shí)異常。是所有Java虛擬機(jī)正常操作期間可以被拋出的異常的父類。java.lang.SecurityException安全異常。由安全管理器拋出,用于指示違反安全情況的異常。java.lang.StringIndexOutOfBoundsException字符串索引越界異常。當(dāng)使用索引值訪問(wèn)某個(gè)字符串中的字符,而該索引值小于0或大于等于序列大小時(shí),拋出該異常。java.lang.TypeNotPresentException類型

59、不存在異常。當(dāng)應(yīng)用試圖以某個(gè)類型名稱的字符串表達(dá)方式訪問(wèn)該類型,但是根據(jù)給定的名稱又找不到該類型是拋出該異常。該異常與 ClassNotFoundException的區(qū)別在于該異常是unchecked(不被檢查)異常,而ClassNotFoundException 是checked(被檢查)異常。java.lang.UnsupportedOperationException不支持的方法異常。指明請(qǐng)求的方法不被支持情況的異常。異常javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的

60、action名字) 可能原因action沒(méi)有再struts-config.xml 中定義,或沒(méi)有找到匹配的action,例如在JSP文件中使用 html:form action=Login.do.將表單提交給Login.do處理,如果出現(xiàn)上述異常,請(qǐng)查看struts-config.xml中的定義部分,有時(shí)可能是打錯(cuò)了字符或者是某些不符合規(guī)則,可以使用strutsconsole工具來(lái)檢查。異常org.apache.jasper.JasperException: Cannot retrieve definition for form bean null可能原因 這個(gè)異常是因?yàn)镾truts根據(jù)str

溫馨提示

  • 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)論