項目開發(fā)中遇到的問題及解決方法V1.1版_第1頁
項目開發(fā)中遇到的問題及解決方法V1.1版_第2頁
項目開發(fā)中遇到的問題及解決方法V1.1版_第3頁
項目開發(fā)中遇到的問題及解決方法V1.1版_第4頁
項目開發(fā)中遇到的問題及解決方法V1.1版_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、瀚博微創(chuàng)公司項目開發(fā)中遇到的問題及解決方法版本號:V1.1版本日期:2010-8-241、多用戶同時增加,如何保證不進入重復數(shù)據(jù)。(總結人:何麗麗總結日期:2010-7-21)(修改人:孫宏旭修改日期:2010-8-23)這個問題主要是指在增加某條記錄時,而該記錄有類似自動生成的訂單號(有特殊含義)的字段時怎么避免向數(shù)據(jù)庫中添加的記錄有重復訂單號的問題。下面是解決該問題的方法:1)首先,應將訂單號字段在數(shù)據(jù)庫中設定成唯一索引(unique);2)然后,在獲取訂單號的方法上添加同步機制synchronized,添加同步機制的位置如下圖所示:3)最后,在執(zhí)行增加方法的時候調用獲取訂單號的方法得到一

2、個訂單號,建議先對該訂單號的唯一性進行判斷,即檢查數(shù)據(jù)庫中是否已有該訂單號的記錄,若沒有,則執(zhí)行增加方法,否則返回重新增加。2、多用戶同時操作,如何保證修改刪除不報錯。(總結人:何麗麗總結日期:2010-7-21)由于修改和刪除數(shù)據(jù)時都要先查詢該數(shù)據(jù),所以在底層實現(xiàn)類里查詢方法盡量返回List類型,即使是返回一條數(shù)據(jù)時也應如此。例如:public List getOwnerEI(String ownerEI) return hibernateTemplate().find(from ElseInfo where ownerEI=?,ownerEI);3、 同一用戶不能在多臺機器上同時登錄,不同

3、用戶不做限制。(總結人:何麗麗總結日期:2010-7-21)可以在數(shù)據(jù)庫表里增加一個登錄標識字段,例如用戶已登錄則將該字段可以標識為“1”,未登錄則將該字段標識為“0”。每次用戶登錄時都要對登錄標識字段進行判斷,以便控制同一用戶不能在多臺機器上同時登錄。4、退出系統(tǒng)、關閉IE、session過期銷毀時,都要將相應的用戶解鎖。(總結人:何麗麗總結日期:2010-7-21)(1) 關閉IE:$(document).ready(function()當關閉瀏覽器時自動退出系統(tǒng)$(window).unload(function()$.get(/HanbManageSys/logout.action?se

4、rialId= + new Date().toString();););(2) 正常退出系統(tǒng):/ 退出系統(tǒng)public String logout() throws Exception String userCode = (String)session.get(userCode);if(userCode!=null)User user = userManager.getUser(userCode);user.setIsLogin(否);userManager.updateUser(user);session.clear();return SUCCESS;(3) session過期銷毀時:寫一個

5、session監(jiān)聽器,在里面加一個session銷毀的方法。在web.xml中 com.Hanb.HanbManageSys.Util.SessionTimeOut寫一個工具類,該類要實現(xiàn)接口HttpSessionListener,并重寫下面兩個方法:public void sessionCreated(HttpSessionEvent se) System.out.println(session已建立.);public void sessionDestroyed(HttpSessionEvent se) String userCode= (String)se.getSession().get

6、Attribute(userCode);/ 數(shù)據(jù)庫連接對象Connection conn = null;try Context ctx = new InitialContext();DataSource ds = (DataSource) ctx.lookup(java:comp/env/jdbc/HanbManageSys);conn = ds.getConnection();conn.setAutoCommit(false);Statement stmt = conn.createStatement();String sql = update YW_PSWD set PSWD_SFDL=否

7、 where PSWD_YHDM=+userCode+;stmt.executeUpdate(sql);mit();se.getSession().removeAttribute(userCode);System.out.println(session已銷毀.); catch (NamingException e1) e1.printStackTrace(); catch (SQLException e1) e1.printStackTrace();finallyif(conn!=null)try /關閉數(shù)據(jù)庫連接對象conn.close(); catch (SQLExcept

8、ion e) e.printStackTrace();5、顯示記錄時,有多少行顯示多少行,不要顯示一堆空行。(總結人:何麗麗總結日期:2010-7-21)這是flex中會遇到的問題,一般來說用js不會遇到此問題,但要注意的是:如果是用json傳的數(shù)據(jù),應該首先清空,然后再插入問題。6、Session過期時間在什么地方改?(總結人:曲東旭總結日期:2010-7-21)在/WEB-INF目錄下的web.xml文件中進行如下設置(最好跟在session監(jiān)聽器后):30這里的30是指30分鐘。7、Session過期后,再進行操作應重新登錄。(總結人:曲東旭總結日期:2010-7-21修改日期:2010

9、-8-24)action頁面跳轉,設置攔截器:建立授權攔截器AutenticationInterceptor.javapackage com.Hanb.MessManageSys.Interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.Hanb.MessManageSys.Model.User;import com.opensymphony.xwo

10、rk2.Action;import com.opensymphony.xwork2.ActionInvocation;import erceptor.AbstractInterceptor;public class AuthenticationInterceptor extends AbstractInterceptor /* * */private static final long serialVersionUID = L;Overridepublic String intercept(ActionInvocation invocati

11、on) throws Exception HttpServletRequest request = (HttpServletRequest)ServletActionContext.getRequest();HttpSession session = request.getSession();User user = (User) session.getAttribute(user);String path = request.getServletPath();String paths = path.split(/);String postAction = pathspaths.length -

12、 1;if(postAction.contains(Ajax)if(user = null)return ajaxLogin;elsereturn invocation.invoke();elseif(user = null)return Action.LOGIN;elsereturn invocation.invoke(); 這樣,當session中的user為空時,將直接結束action處理過程,并返回結果“l(fā)ogin”然后在struts2的xml配置文件中配置攔截器以及設置全局變量: /jsp/result.jsp /jsp/builder.jsp /jsp/login.jsp /jsp

13、/ajaxLogin.jsp 這里的login.jsp應為登陸頁面,在每個action中引入權限攔截器的同時不要忘記引入默認的攔截器棧。如果是Ajax提交,注意Ajax提交時處理action的命名規(guī)則,必須包含Ajax字符串,在提交時權限攔截器才能正確處理,此時返回結果集 ajaxLogin ,映射到頁面ajaxLogin.jsp。此頁面只包含如下字符串notLogin用來在JavaScript中判斷是否有權限,從而進行跳轉。ajaxLogin.jsp其頁面代碼如下:notLoginJavaScript的處理代碼如下,這里以jquery的post方法為例:$.post(url,postData

14、,function(data)if ($.trim(data) = notLogin)/這里判斷如果session已失效,則跳轉得到登陸頁面window.top.location = path + /jsp/login.jsp; else /處理函數(shù));注意個別問題靈活運用。8、參數(shù)傳遞時如何保證編碼格式,避免在不同機器上可能不好使的現(xiàn)象。(總結人:曲東旭總結日期:2010-7-21)(1)JSP頁面中注意如下設置:以上三處的編碼都應當設置成UTF-8(2)Tomcat的server.xml文件中注意如下設置:注意配置端口號為8080的Connector,URIEncoding也設置成UTF-

15、8(3)在傳遞參數(shù)是用POST方式傳遞9、分頁中存在的相關問題,例如:最后一個頁碼應該是總頁數(shù),顯示的記錄有時顯示不全的問題(記錄數(shù)60,顯示出的記錄只有52條。圖書分類查詢,14條記錄,就顯示出一條的寬度,需要點上下滾動條看)、修改刪除某條記錄后分頁內容顯示不對。(總結人:曲東旭總結日期:2010-7-21)這個問題主要出現(xiàn)在Flex中,主要就是因為前端技術Flex不主動刷新,和控制好DataGrid高度。10、故障解鎖只顯示加鎖用戶,解鎖時需選定解鎖用戶,解鎖后刷新列表。(總結人:曲東旭總結日期:2010-7-21)查詢時只將登陸標志為“是”的用戶信息查詢并顯示出來。在前臺顯示時可以用ch

16、eckbox進行控制,選擇需要解鎖的用戶。如果是頁面跳轉方式提交,刷新頁面即可刷新列表。如果是Ajax提交,清空加鎖用戶table,根據(jù)返回數(shù)據(jù)重新構建即可。11、頁面來回切換時清空上次的數(shù)據(jù),重置成初始的頁面。(總結人:曲東旭總結日期:2010-7-21)(1)使用spring框架管理action,并配置成單例模式singletonJSP頁面跳轉不建議使用這種模式(已拋棄)。方法一:在后臺通過代碼硬性置空;方法二:前臺初始化頁面時JavaScript取DOM置空值DIV切換DIV切換時,通過JavaScript取DOM置空值(2)action為非單例模式(通過spring管理或非spring

17、管理)頁面跳轉不會出現(xiàn)上次的數(shù)據(jù),只要注意在DIV切換時,通過JavaScript取DOM置空值即可。12、增加、修改某條記錄時,要求值應該唯一的項,如果發(fā)生重復時,給出提示,并保持之前的錄入狀態(tài)。(總結人:楊尚武總結日期:2010-7-21)在增加或修改某條記錄時,首先判斷該記錄是否合法,主要是通過檢查某個要求唯一的屬性值在數(shù)據(jù)庫表中是否已存在。在Action層進行增加或修改操作之前對數(shù)據(jù)重復性進行校驗,下面是在增加之前對數(shù)據(jù)重復性進行校驗的代碼實例:Client cli = clientManager.getClient(client.getClientCoding();if(cli.ge

18、tClientName()=null)clientManager.addClient(client);result = 增加成功!;elseresult = 對不起,該客戶編碼已存在,請返回重新增加!;13、增加修改某條記錄后,光標定位到這條記錄上。(總結人:楊尚武總結日期:2010-7-21)增加一條記錄:當增加完一條記錄,返回信息列表時該條記錄是最后一條記錄,對最后一條記錄添加tr.addClass(“selected”)。在CSS中設定選中行的顏色即可。示例:var tr = $(#messageListTable tbodytr:last);$(#messageListTable tb

19、ody .selected).removeClass(selected);tr.addClass(selected);修改一條記錄:首先選中待修改記錄,獲取該記錄的主鍵,返回信息列表時,查找與之對應的行,對該行添加tr.addClass(“selected”)。在CSS中設定選中行的顏色即可。示例如下:var tr = $(#messageListTable tbodytr);tr.each(function(i) var sTR = $(this);sTR.find(td).each(function(i)if(i%4 = 0) if(messageId = $(this).children

20、(inputtype=hidden).val()$(#messageListTable tbody .selected).removeClass(selected);sTR.addClass(selected);););14、報表中體現(xiàn)用戶名稱時,不應讀取數(shù)據(jù)庫數(shù)據(jù),而應讀取代碼中特定位置賦值的數(shù)據(jù)。(總結人:孫宏旭總結日期:2010-7-21)其實這是一類問題,對于報表中要用到用戶的個人信息時,比如用戶名稱、工作單位等用戶特有的信息,為了有效的保護軟件的版權,不要直接從數(shù)據(jù)庫里面讀取這些信息,而要采取在程序中以常量的形式傳遞相關的用戶個人信息,具體做法如下圖所示:保存用戶信息類當報表中需要該

21、信息時,直接通過該類或該類的實例調用相關的getter方法就可以獲得用戶的相關信息,然后傳遞給相關的報表參數(shù)。15、查詢時數(shù)據(jù)量過大情況的處理。(總結人:孫宏旭總結日期:2010-7-21)對于數(shù)據(jù)量過大的情況,比較好的處理方法就是增加分頁功能,具體的實現(xiàn)方法可以參考留言管理系統(tǒng)即項目MessManageSysV1.3中分頁功能部分的實現(xiàn)。16、JAVA語句寫法的注意事項。編程時注意語句格式、多加備注、修改某功能時盡量不要影響其他相關功能。做大修改前先將原代碼打包備份好。編程過程中對數(shù)據(jù)庫字段、視圖、存儲過程做了修改的,在提交新版本程序不要忘記提交。 (總結人:楊尚武總結日期:2010-7-2

22、1)建議遵循的原則:a. 對于一個函數(shù)(方法),其他程序員(非編寫者)能在30s內看懂;否則,該函數(shù)不易理解,應予以改進。b. 中的語句應單獨作為一行,建議采用如下格式:if(int i=0;i10;i+)x+;c. 一行代碼只完成一件事,如:i+;j+; 而不是 i+; j+;d. 利用括號明確不同操作的優(yōu)先級,增強程序的可讀性。e. 將常量放在比較運算符的左側。f. 在任何情況下,超長語句應在一個逗號或一個操作符后折行,一條語句折行后應該比原來的語句再縮進2個字符或一個TAB符。g. 通過把邏輯上相關的代碼段用空白行隔開,可以提高程序的可讀性。一行空白用于以下情況:l 方法之間l 塊注釋和

23、單行注釋之間l 方法內的邏輯片段之間 兩行空白用于以下情況:l 類或接口的定義之間l 在源文件的章節(jié)之間17、查詢條件里要對空格做處理,不要誤敲空格后查不出結果。 (總結人:楊尚武總結日期:2010-7-21)因為空格也算一個字符所以不對空格處理就查不出相應的記錄,例如:” ab”和”ab”就不相等。通常只需利用trim()函數(shù)去除前后空格即可。示例如下:” ab ”.trim()與”ab”相等。18、查詢無結果時給出提示,報表無內容時點預覽直接給出提示,不打開空報表。 (總結人:楊尚武總結日期:2010-7-21)根據(jù)返回列表的大小進行判斷,如果列表大小等于0則表明未找到相應記錄,給出提示信

24、息。如果不等于0,則表明找到相應記錄。示例如下:if(list.size()=0)str=未找到對應記錄!;19、輸入日期格式時對日期格式進行判斷,如是日期段形式,要判斷日期段是否合理。(總結人:楊尚武總結日期:2010-7-21)在前臺利用日期控件以防止用戶錯誤的輸入。首先,引入JS文件My97DatePicker/WdatePicker.js;然后寫一個文本框即可。判斷日期段是否合理:$(document).ready(function()$(#valiButton).click(function()var startDate=$(#startDate).val();var endDate

25、=$(#endDate).val(); if(startDate.length!=0&endDate.length!=0&startDateendDate)alert(開始日期大于結束日期,請重新輸入!); ););20、對一些特殊的數(shù)據(jù),要提前進行處理,如數(shù)據(jù)長度,數(shù)據(jù)類型,特殊字符等,不用提交數(shù)據(jù)庫時出錯。(總結人:何麗麗總結日期:2010-7-21)最好是在數(shù)據(jù)傳到后臺之前,先對要傳的數(shù)據(jù)進行驗證,如可以在js文件里進行驗證,可以使用正則表達式。/判斷是否是特殊字符var IllegalString = /0-9a-zA-Z-()_u4e00-u9fa5$/;function check

26、IllegalChar(strTemp)if(strTemp!= )if(IllegalString.test(strTemp)return true;elsereturn false;else return false;(修改人:孫宏旭修改日期:2010-7-22)正則表達式/0-9a-zA-Z-()_u4e00-u9fa5$/的作用:只允許輸入數(shù)字、大小寫英文字母、-、()、_、中文。(注意:、-、()、_、都是英文輸入狀態(tài)下的字符)21、對一個操作需要對多表進行操作時,需要進行保護,不能出現(xiàn)一個表的操作報錯了,其它表的數(shù)據(jù)仍然錄入進去的情況。(總結人:何麗麗總結日期:2010-7-21)

27、由于spring管理事務,事務是加在業(yè)務邏輯層的,所以要把對表的操作寫在業(yè)務邏輯層(Service)里,這樣當發(fā)生異常時,操作就會自動回滾,就不會出現(xiàn)某個表出錄入數(shù)據(jù)而其它表不能錄入數(shù)據(jù)的情況了。22、連續(xù)點按鈕、敲回車,或者刷新頁面時,不要重復提交數(shù)據(jù)。(總結人:曲東旭總結日期:2010-7-21)利用token機制,如下:22.1使用Struts2的表單標簽,其中需要增加token標簽。如下:22.2在struts配置文件中增加token攔截器。(token 和 token-session 攔截器的啟用,是在 struts.xml 配置文件中,既可以為包啟用,也可以單獨為某個 action

28、 啟用)(1)為 Action 啟用 token /page1.jsp/page1error.jsp(2)為包啟用token 注意,需要name為invaid.token的result。這是當攔截器判斷是重復提交的時候,會轉向的結果。 /page1.jsp /page1error.jsp (3)nvaid.token頁面打印錯誤信息,一樣可以使用struts標簽。如下:22.3理解:(1)JSP使用標簽的時候,Struts2會建立一個GUID(全局唯一的字符串)放在session中,并且會成為一個hidden放在form中。(2)token攔截器會判斷客戶端form提交的token和sessi

29、on中保存的session是否equals。如果equals則執(zhí)行Action。否則攔截器直接返回invaid.token結果,Action對應的方法也不會執(zhí)行23、查詢有多個條件時,注意查詢條件任意組合時都要好使,不要出現(xiàn)條件1、2、3組合好使,條件1、3組合就不好使的情況。 (總結人:楊尚武總結日期:2010-7-21) 多條件進行查詢時,采用模糊查詢,示例: String hql=FROM scoIncome WHERE (roomId LIKE ? or labelId LIKE ?) AND cashier LIKE ? AND +currency LIKE ?;String val

30、ues=%+income.getRoomId()+%,%+income.getRoomId()+%,%+income.getCashier()+%, %+income.getCurrency()+%,;return hibernateTemplate.find(hql,values);24、沒有選中記錄的情況下,修改刪除按鈕應不好使。 (總結人:孫宏旭總結日期:2010-7-21)一般情況下都是通過表格列表的形式顯示數(shù)據(jù)記錄,左下方或右下方會有【增加】、【修改】和【刪除】等操作按鈕來實現(xiàn)對數(shù)據(jù)庫記錄的增刪改,初始化的情況應該是只有【增加】按鈕能起作用,而【修改】和【刪除】按鈕應該是不可操作的或

31、是被設置為disabled狀態(tài);在記錄未被選中的情況下,【增加】、【修改】和【刪除】按鈕也應該被恢復到初始化時的狀態(tài)。25、選擇第三方控件時,要保證界面不因瀏覽器等原因發(fā)生變形或導致其他問題。 (總結人:孫宏旭總結日期:2010-7-21)在開發(fā)的過程中,當選用了其它插件或技術時,比如雅虎的YUI,要充分考慮它們對瀏覽器的兼容性問題,避免在使用了之后出現(xiàn)瀏覽器兼容性問題或其它一些問題。26、用戶登錄問題,需要增加一個超級用戶,而且是內嵌在程序中的。(總結人:孫宏旭總結日期:2010-7-21)在開發(fā)的過程中,用戶登錄這一塊也是非常重要的,為了避免在數(shù)據(jù)庫中的所有用戶信息被刪除之后出現(xiàn)軟件程序不

32、能正常運轉的情況,通常會增加“超級用戶”這個角色,也稱它為開發(fā)級超級用戶。這個用戶的信息是內嵌在程序中的,不會因為刪除數(shù)據(jù)庫中的所有用戶的信息而導致該用戶信息的丟失,具體實現(xiàn)方法如下圖所示:檢查超級用戶方法實現(xiàn)通過上圖可以看出,超級用戶的基本信息包括用戶名和密碼,在這里它們是這樣實現(xiàn)的:用戶名是一個字符串常量,即superUserCode = THANKGOD,密碼是由字符串常量+日期組成的,即superUserPswd = HANB + df.format(new Date(),這里的日期格式是當前的月和日,比如現(xiàn)在是7月19日,那么密碼的日期部分應該是“0719”。當然了,超級用戶還會有一

33、些其它的信息,比如權限信息等,這些信息也是要在程序中設置好的。到此為止,就實現(xiàn)了超級用戶的設置了,這樣在登錄驗證的時候首先要驗證用戶是否為超級用戶,然后再驗證其他用戶。27、Java編程時變量定義應遵循sun規(guī)范。 (總結人:孫宏旭總結日期:2010-7-21)編程的過程中應參考sun規(guī)范,但是有些地方還是要以實驗室的習慣為標準,比如包和屬性的命名等,sun規(guī)范見附錄1。1) 標識符的命名標識符包括模塊名、變量名、常量名、標號名、子程序名以及數(shù)據(jù)區(qū)名、緩沖區(qū)名等。這些名字應能反映它所代表的實際東西,使其能夠見名知意,有助于對程序功能的理解。例如,用times表示次數(shù),用total表示總量,用a

34、verage表示平均值,用sum表示和,等等。名字不要過長,必要時可使用縮寫名字,要注意縮寫規(guī)則要一致,并且要給每個名字加注釋。同時,在一個程序中,一個變量只應用于一種用途。一般約定:變量名是以小寫字母開頭。如果變量名包含了多個單詞,而這些單詞要組合在一起,則第一個單詞后的每個單詞的第一個字母使用大寫,如isVisible。2) 包Packages的命名包名是按照業(yè)務模塊和功能模塊來進行劃分的。命名規(guī)則:一個唯一包名的前綴總是全部小寫的ASCII字母并且是一個頂級域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166標準所指定的標識國家的英文雙字符代碼。包名的

35、后續(xù)部分根據(jù)不同機構各自內部的命名規(guī)范而不盡相同。這類命名規(guī)范可能以特定目錄名的組成來區(qū)分部門(department),項目(project),機器(machine),或注冊名(login names)。例子:com.sun.engcom.apple.quicktime.v2edu.cmu.cs.bovik.cheese實驗室采用如下包命名方式:例如包名:com該包名代表默認的頂級域名,全部采用小寫字母。.Hanb該子包名代表公司組織或個人的英文名稱,或者名稱的縮寫,采用第一個單詞首字母大寫的形式,若為組合詞組,后續(xù)其它單詞的首字母也需要大寫。.SynQueSys該子包名代表項目的名稱,要與項

36、目名稱一致,采用第一個單詞首字母大寫的形式,若為組合詞組,后續(xù)其它單詞的首字母也需要大寫。.Action該子包名代表分層結構中的某一層,采用首字母大寫,這里代表Action層。.restaurant該子包名代表某一功能模塊的名稱,采用第一個單詞首字母小寫的形式,若為組合詞組,后續(xù)其它單詞的首字母需要大寫。注意:該子包的劃分需要根據(jù)項目規(guī)模的大小來決定,如果項目規(guī)模比較大,那么需要劃分該子包或更深層次的子包;如果項目規(guī)模比較小,那么沒有必要劃分該子包或更深層次的子包。下面以項目名稱SynQueSys為例子來劃分一下一般情況下項目需要的包名:com.Hanb.SynQueSys.ModelMode

37、l包或下一級子包主要存放領域對象Model層的實體類。.restaurantcom.Hanb.SynQueSys.DaoDao包或下一級子包主要存放數(shù)據(jù)訪問對象Dao層的接口。.restaurantcom.Hanb.SynQueSys.Dao.HibernateHibernate包或下一級子包主要存放數(shù)據(jù)訪問對象Dao層接口的實現(xiàn)類。.restaurantcom.Hanb.SynQueSys.ServiceService包或下一級子包主要存放業(yè)務邏輯Service層的接口。.restaurantcom.Hanb.SynQueSys.Service.ImplImpl包或下一級子包主要存放業(yè)務邏輯

38、Service層接口的實現(xiàn)類。.restaurantcom.Hanb.SynQueSys.ActionAction包或下一級子包主要存放Action層的Action類。.restaurantcom.Hanb.SynQueSys.UtilUtil包主要存放一些程序的輔助或工具類。com.Hanb.SynQueSys.xmlxml包主要存放struts2的子配置文件。3) 程序的注釋注釋分為序言性注釋和功能性注釋。序言性注釋通常置于每個程序模塊的開頭部分,它應當給出程序的整體說明,對于理解程序本身具有引導作用。功能性注釋嵌在源程序體中,用以描述其后的語句或程序段,也就是解釋下面要“做什么”,或是執(zhí)

39、行了下面的語句會怎么樣。4) 視覺組織空格、空行和移行一個程序如果寫得密密麻麻分不出層次來,常常是很難看懂的。應該利用空格、空行和移行組織程序的視覺結構??崭瘢阂‘?shù)乩每崭?,使程序更容易看清楚??招校鹤匀坏某绦蚨沃g可用空行隔開。移行:移行也叫做向右縮格。它是指程序中的各行不必都左端對齊,都從第一格起排列。因為這樣做使程序完全分不清層次關系。28、盡量使用StringBuffer 或StringBuilder替代 String。(總結人:孫宏旭總結日期:2010-7-21)在開發(fā)的過程中遇到拼接多個字符串的時候建議用StringBuffer或StringBuilder來替代String。下面簡單介紹一下StringBuffer與StringBuilder的區(qū)別。java.lang.StringBuffer是線程安全的可變字符序列。一個類似于 String 的字符串緩沖區(qū),但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容??蓪⒆址彌_區(qū)安全地用于多個線程??梢栽诒匾獣r對這些方法進行同步,因此任意

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論