Java心路

          Java、Eclipse、Ajax......一個(gè)都不能少

           

          Eclipse快捷鍵-方便查找,呵呵,記性不好

          行注釋/銷注釋 Ctrl+/?
          塊注釋/銷注釋 Ctrl+Shift+/?? Ctrl+Shift+\
          查找 查找替換?Ctrl+H? Ctrl+F
          查找下一個(gè)/往回找 Ctrl+K?? Ctrl+Shift+K
          跳到某行 Ctrl+L,哈用慣了Editplus,不時(shí)會(huì)敲下Ctrl+G,
          查找當(dāng)前元素的聲明 Ctrl+G
          查找當(dāng)前元素的所有引用 Ctrl+Shift+G
          重新組織Import Ctrl+Shift+O,能幫你一次去掉所有未使用的Import聲明!
          快速修正 Ctrl+1
          引入某個(gè)類(接口)ctrl + shift + m
          加頭注釋 shift + alt + j
          ?

          ctrl ?+ ?shift ?+ ?g:查看引用 ?
          ctrl ?+ ?shift ?+ ?n:重命名 ?
          ctrl ?+ ?shift ?+ ?o:導(dǎo)入類 ?
          ctrl ?+ ?shift ?+ ?r:?jiǎn)?dòng)上次運(yùn)行 ?
          ctrl ?+ ?shift ?+ ?f:格式化代碼 ?
          ctrl ?+ ?c:復(fù)制 ?
          ctrl ?+ ?v:粘貼 ?
          ctrl ?+ ?x:切剪 ?
          ctrl ?+ ?a:全選 ?
          ctrl ?+ ?f:查找 ?
          ctrl ?+ ?z:撤銷 ?
          ctrl ?+ ?y:重做 ?
          ctrl ?+ ?s:保存 ?
          --------------------------------------------------------------- ?
          ?
          用的最多的應(yīng)該就是CTRL+SHIFT+S ?
          還有格式化用的也挺多。 ?
          --------------------------------------------------------------- ?
          ?
          ctrl ?+ ?shift ?+ ?f ?格式化代碼 ?
          ctrl ?+ ?shift ?+ ?o ?組織導(dǎo)入 ?
          F3 ? ?打開聲明 ?
          Alt ?+ ?shift ?+ ?r ? ?重命名變量 ?
          ?
          --------------------------------------------------------------- ?
          ?
          up ?
          --------------------------------------------------------------- ?
          ?
          Alt+/ ? ? ? ?
          ?
          --------------------------------------------------------------- ?
          ?
          alt ?+ ?left ?
          alt ?+ ?right ?
          ctrl ?+ ?q ?
          --------------------------------------------------------------- ?
          ?
          ctrl ?+ ?shift ?+ ?g:查看引用 ?
          ctrl ?+ ?shift ?+ ?n:重命名 ?
          ctrl ?+ ?shift ?+ ?f:格式化代碼 ?
          ctrl ?+ ?c:復(fù)制 ?
          ctrl ?+ ?v:粘貼 ?
          ctrl ?+ ?a:全選 ?
          ctrl ?+ ?f:查找 ?
          ctrl ?+ ?z:撤銷 ?
          ctrl ?+ ?s:保存 ?
          Alt ? ?+ ?/ ?智能提示 ?
          --------------------------------------------------------------- ?
          ?
          ctrl ?+ ?shift ?+ ?g:查看引用 ?
          ctrl ?+ ?shift ?+ ?n:重命名 ?
          ctrl ?+ ?shift ?+ ?o:導(dǎo)入類 ?
          ctrl ?+ ?shift ?+ ?r:?jiǎn)?dòng)上次運(yùn)行 ?
          ctrl ?+ ?shift ?+ ?f:格式化代碼 ?
          ctrl ?+ ?c:復(fù)制 ?
          ctrl ?+ ?v:粘貼 ?
          ctrl ?+ ?x:切剪 ?
          ctrl ?+ ?a:全選 ?
          ctrl ?+ ?f:查找 ?
          ctrl ?+ ?z:撤銷 ?
          ctrl ?+ ?y:重做 ?
          ctrl ?+ ?s:保存 ?
          Alt ? ?+ ?/ ?智能提示 ?
          F3 ? ?打開聲明 ?
          Alt ?+ ?shift ?+ ?r ? ?重命名變量 ?
          其實(shí)最常用的就是下面幾個(gè): ?
          ?
          ctrl ?+ ?shift ?+ ?o:導(dǎo)入類 ?
          ?
          ctrl ?+ ?shift ?+ ?f:格式化代碼 ?
          ctrl ?+ ?c:復(fù)制 ?
          ctrl ?+ ?v:粘貼 ?
          ctrl ?+ ?x:切剪 ?
          ctrl ?+ ?z:撤銷 ?
          ctrl ?+ ?s:保存 ?
          Alt ? ?+ ?/ ?智能提示 ?
          ?
          --------------------------------------------------------------- ?
          ?
          Ctrl+M: ?工作區(qū)最大化/最小化 ?
          Alt+/: ? ?智能提示 ?
          F3: ? ? ? ? ?察看聲明 ?
          Crtl+1: ?修正錯(cuò)誤 ?
          ?
          Shift+Alt+T: ?重構(gòu) ?
          Shift+Alt+M: ?提取函數(shù) ?
          Shift+Alt+R: ?重命名 ?
          Shift+Alt+C: ?更改函數(shù)標(biāo)記 ?
          ?
          Ctrl+Shitf+F: ?格式化代碼 ?
          ?
          --------------------------------------------------------------- ?
          ?
          ctrl ?+ ?shift ?+ ?o:導(dǎo)入類 ?
          atl ?+ ?/:提示 ?
          ctrl ?+ ?shift ?+ ?t:查找相關(guān)信息 ?
          --------------------------------------------------------------- ?
          ?
          Eclipse快捷鍵指南 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
          編輯 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          全局 ?? ?? ?? ??查找并替換 ?? ?? ?? ??Ctrl+F ?
          文本編輯器 ?? ?? ?? ??查找上一個(gè) ?? ?? ?? ??Ctrl+Shift+K ?
          文本編輯器 ?? ?? ?? ??查找下一個(gè) ?? ?? ?? ??Ctrl+K ?
          全局 ?? ?? ?? ??撤銷 ?? ?? ?? ??Ctrl+Z ?
          全局 ?? ?? ?? ??復(fù)制 ?? ?? ?? ??Ctrl+C ?
          全局 ?? ?? ?? ??恢復(fù)上一個(gè)選擇 ?? ?? ?? ??Alt+Shift+↓ ?
          全局 ?? ?? ?? ??剪切 ?? ?? ?? ??Ctrl+X ?
          全局 ?? ?? ?? ??快速修正 ?? ?? ?? ??Ctrl1+1 ?
          全局 ?? ?? ?? ??內(nèi)容輔助 ?? ?? ?? ??Alt+/ ?
          全局 ?? ?? ?? ??全部選中 ?? ?? ?? ??Ctrl+A ?
          全局 ?? ?? ?? ??刪除 ?? ?? ?? ??Delete ?
          全局 ?? ?? ?? ??上下文信息 ?? ?? ?? ??Alt+? ?
          Alt+Shift+? ?
          Ctrl+Shift+Space ?
          Java編輯器 ?? ?? ?? ??顯示工具提示描述 ?? ?? ?? ??F2 ?
          Java編輯器 ?? ?? ?? ??選擇封裝元素 ?? ?? ?? ??Alt+Shift+↑ ?
          Java編輯器 ?? ?? ?? ??選擇上一個(gè)元素 ?? ?? ?? ??Alt+Shift+← ?
          Java編輯器 ?? ?? ?? ??選擇下一個(gè)元素 ?? ?? ?? ??Alt+Shift+→ ?
          文本編輯器 ?? ?? ?? ??增量查找 ?? ?? ?? ??Ctrl+J ?
          文本編輯器 ?? ?? ?? ??增量逆向查找 ?? ?? ?? ??Ctrl+Shift+J ?
          全局 ?? ?? ?? ??粘貼 ?? ?? ?? ??Ctrl+V ?
          全局 ?? ?? ?? ??重做 ?? ?? ?? ??Ctrl+Y ?
          ? ?
          查看 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          全局 ?? ?? ?? ??放大 ?? ?? ?? ??Ctrl+= ?
          全局 ?? ?? ?? ??縮小 ?? ?? ?? ??Ctrl+- ?
          ? ?
          窗口 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          全局 ?? ?? ?? ??激活編輯器 ?? ?? ?? ??F12 ?
          全局 ?? ?? ?? ??切換編輯器 ?? ?? ?? ??Ctrl+Shift+W ?
          全局 ?? ?? ?? ??上一個(gè)編輯器 ?? ?? ?? ??Ctrl+Shift+F6 ?
          全局 ?? ?? ?? ??上一個(gè)視圖 ?? ?? ?? ??Ctrl+Shift+F7 ?
          全局 ?? ?? ?? ??上一個(gè)透視圖 ?? ?? ?? ??Ctrl+Shift+F8 ?
          全局 ?? ?? ?? ??下一個(gè)編輯器 ?? ?? ?? ??Ctrl+F6 ?
          全局 ?? ?? ?? ??下一個(gè)視圖 ?? ?? ?? ??Ctrl+F7 ?
          全局 ?? ?? ?? ??下一個(gè)透視圖 ?? ?? ?? ??Ctrl+F8 ?
          文本編輯器 ?? ?? ?? ??顯示標(biāo)尺上下文菜單 ?? ?? ?? ??Ctrl+W ?
          全局 ?? ?? ?? ??顯示視圖菜單 ?? ?? ?? ??Ctrl+F10 ?
          全局 ?? ?? ?? ??顯示系統(tǒng)菜單 ?? ?? ?? ??Alt+- ?
          ? ?
          導(dǎo)航 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          Java編輯器 ?? ?? ?? ??打開結(jié)構(gòu) ?? ?? ?? ??Ctrl+F3 ?
          全局 ?? ?? ?? ??打開類型 ?? ?? ?? ??Ctrl+Shift+T ?
          全局 ?? ?? ?? ??打開類型層次結(jié)構(gòu) ?? ?? ?? ??F4 ?
          全局 ?? ?? ?? ??打開聲明 ?? ?? ?? ??F3 ?
          全局 ?? ?? ?? ??打開外部javadoc ?? ?? ?? ??Shift+F2 ?
          全局 ?? ?? ?? ??打開資源 ?? ?? ?? ??Ctrl+Shift+R ?
          全局 ?? ?? ?? ??后退歷史記錄 ?? ?? ?? ??Alt+← ?
          全局 ?? ?? ?? ??前進(jìn)歷史記錄 ?? ?? ?? ??Alt+→ ?
          全局 ?? ?? ?? ??上一個(gè) ?? ?? ?? ??Ctrl+, ?
          全局 ?? ?? ?? ??下一個(gè) ?? ?? ?? ??Ctrl+. ?
          Java編輯器 ?? ?? ?? ??顯示大綱 ?? ?? ?? ??Ctrl+O ?
          全局 ?? ?? ?? ??在層次結(jié)構(gòu)中打開類型 ?? ?? ?? ??Ctrl+Shift+H ?
          全局 ?? ?? ?? ??轉(zhuǎn)至匹配的括號(hào) ?? ?? ?? ??Ctrl+Shift+P ?
          全局 ?? ?? ?? ??轉(zhuǎn)至上一個(gè)編輯位置 ?? ?? ?? ??Ctrl+Q ?
          Java編輯器 ?? ?? ?? ??轉(zhuǎn)至上一個(gè)成員 ?? ?? ?? ??Ctrl+Shift+↑ ?
          Java編輯器 ?? ?? ?? ??轉(zhuǎn)至下一個(gè)成員 ?? ?? ?? ??Ctrl+Shift+↓ ?
          文本編輯器 ?? ?? ?? ??轉(zhuǎn)至行 ?? ?? ?? ??Ctrl+L ?
          ? ?
          搜索 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          全局 ?? ?? ?? ??出現(xiàn)在文件中 ?? ?? ?? ??Ctrl+Shift+U ?
          全局 ?? ?? ?? ??打開搜索對(duì)話框 ?? ?? ?? ??Ctrl+H ?
          全局 ?? ?? ?? ??工作區(qū)中的聲明 ?? ?? ?? ??Ctrl+G ?
          全局 ?? ?? ?? ??工作區(qū)中的引用 ?? ?? ?? ??Ctrl+Shift+G ?
          ? ?
          文本編輯 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          文本編輯器 ?? ?? ?? ??改寫切換 ?? ?? ?? ??Insert ?
          文本編輯器 ?? ?? ?? ??上滾行 ?? ?? ?? ??Ctrl+↑ ?
          文本編輯器 ?? ?? ?? ??下滾行 ?? ?? ?? ??Ctrl+↓ ?
          ? ?
          文件 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          全局 ?? ?? ?? ??保存 ?? ?? ?? ??Ctrl+X ? ?
          Ctrl+S ?
          全局 ?? ?? ?? ??打印 ?? ?? ?? ??Ctrl+P ?
          全局 ?? ?? ?? ??關(guān)閉 ?? ?? ?? ??Ctrl+F4 ?
          全局 ?? ?? ?? ??全部保存 ?? ?? ?? ??Ctrl+Shift+S ?
          全局 ?? ?? ?? ??全部關(guān)閉 ?? ?? ?? ??Ctrl+Shift+F4 ?
          全局 ?? ?? ?? ??屬性 ?? ?? ?? ??Alt+Enter ?
          全局 ?? ?? ?? ??新建 ?? ?? ?? ??Ctrl+N ?
          ? ?
          項(xiàng)目 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          全局 ?? ?? ?? ??全部構(gòu)建 ?? ?? ?? ??Ctrl+B ?
          ? ?
          源代碼 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          Java編輯器 ?? ?? ?? ??格式化 ?? ?? ?? ??Ctrl+Shift+F ?
          Java編輯器 ?? ?? ?? ??取消注釋 ?? ?? ?? ??Ctrl+ ?
          Java編輯器 ?? ?? ?? ??注釋 ?? ?? ?? ??Ctrl+/ ?
          Java編輯器 ?? ?? ?? ??添加導(dǎo)入 ?? ?? ?? ??Ctrl+Shift+M ?
          Java編輯器 ?? ?? ?? ??組織導(dǎo)入 ?? ?? ?? ??Ctrl+Shift+O ?
          Java編輯器 ?? ?? ?? ??使用try/catch塊來包圍 ?? ?? ?? ??未設(shè)置,太常用了,所以在這里列出,建議自己設(shè)置。 ?
          也可以使用Ctrl+1自動(dòng)修正。 ?
          ? ?
          運(yùn)行 ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          全局 ?? ?? ?? ??單步返回 ?? ?? ?? ??F7 ?
          全局 ?? ?? ?? ??單步跳過 ?? ?? ?? ??F6 ?
          全局 ?? ?? ?? ??單步跳入 ?? ?? ?? ??F5 ?
          全局 ?? ?? ?? ??單步跳入選擇 ?? ?? ?? ??Ctrl+F5 ?
          全局 ?? ?? ?? ??調(diào)試上次啟動(dòng) ?? ?? ?? ??F11 ?
          全局 ?? ?? ?? ??繼續(xù) ?? ?? ?? ??F8 ?
          全局 ?? ?? ?? ??使用過濾器單步執(zhí)行 ?? ?? ?? ??Shift+F5 ?
          全局 ?? ?? ?? ??添加/去除斷點(diǎn) ?? ?? ?? ??Ctrl+Shift+B ?
          全局 ?? ?? ?? ??顯示 ?? ?? ?? ??Ctrl+D ?
          全局 ?? ?? ?? ??運(yùn)行上次啟動(dòng) ?? ?? ?? ??Ctrl+F11 ?
          全局 ?? ?? ?? ??運(yùn)行至行 ?? ?? ?? ??Ctrl+R ?
          全局 ?? ?? ?? ??執(zhí)行 ?? ?? ?? ??Ctrl+U ?
          ? ?
          重構(gòu) ?
          作用域 ?? ?? ?? ??功能 ?? ?? ?? ??快捷鍵 ?
          全局 ?? ?? ?? ??撤銷重構(gòu) ?? ?? ?? ??Alt+Shift+Z ?
          全局 ?? ?? ?? ??抽取方法 ?? ?? ?? ??Alt+Shift+M ?
          全局 ?? ?? ?? ??抽取局部變量 ?? ?? ?? ??Alt+Shift+L ?
          全局 ?? ?? ?? ??內(nèi)聯(lián) ?? ?? ?? ??Alt+Shift+I ?
          全局 ?? ?? ?? ??移動(dòng) ?? ?? ?? ??Alt+Shift+V ?
          全局 ?? ?? ?? ??重命名 ?? ?? ?? ??Alt+Shift+R ?
          全局 ?? ?? ?? ??重做 ?? ?? ?? ??Alt+Shift+Y?
          ?


          posted @ 2007-02-23 23:06 bisal 閱讀(37613) | 評(píng)論 (1)編輯 收藏

          OA系統(tǒng)開發(fā)的一些感想。。。

          ??? 前段時(shí)間一直在做北京市某個(gè)區(qū)政府文書科的一個(gè)公文接收的自動(dòng)化系統(tǒng),自己有一些感想,在這里寫出來。感覺政府中的這種OA與企業(yè)的OA確實(shí)存在著一些差 距,尤其是組織制度上,工作流的流程比較復(fù)雜,突出的一點(diǎn)就是顯示出領(lǐng)導(dǎo)之間級(jí)別的對(duì)待,一個(gè)公文來的時(shí)候,科長(zhǎng)總會(huì)先審查,再由文書員進(jìn)行處理,之后再 給更高級(jí)的領(lǐng)導(dǎo)審閱,而催辦的意見公文回來的時(shí)候又要讓相關(guān)的一些領(lǐng)導(dǎo)查看,但其中的某些環(huán)節(jié)中查看和填寫修改的權(quán)限又是對(duì)一些領(lǐng)導(dǎo)或人員是屏蔽的,這些 權(quán)限和功能的使用范圍與領(lǐng)導(dǎo)級(jí)別又是緊密相關(guān)的,還有就是當(dāng)這個(gè)系統(tǒng)想要試用一下的時(shí)候,因?yàn)檎畠?nèi)各個(gè)部門之間的關(guān)系,所以不是太好地進(jìn)行測(cè)試試用,總 之,針對(duì)不同的行業(yè),開發(fā)這樣的系統(tǒng)都要“因地制宜”,確實(shí)存在著一些阻礙和困難。
          ?

          posted @ 2007-01-10 13:08 bisal 閱讀(629) | 評(píng)論 (1)編輯 收藏

          SCJP,新的起點(diǎn)

          ??? ??? 經(jīng)過幾天的閉門修煉,今天早上懷揣著450元錢(準(zhǔn)備重考的錢)踏上了去往中軟的路途。。。
          ??????? 八點(diǎn)半就到了,填了表單后,決定馬上就考。。。那個(gè)劉老師還挺好,一步一步指導(dǎo)我進(jìn)行操作,正式考試開始了,前幾道題沒有見過,有些個(gè)題確實(shí)有些繞,從中間之后便見到了許多在參考資料中做過的題,有幾道題還是覺得答案有錯(cuò),親自運(yùn)行過的,不過不知道正確不正確,總之是心里有些印象。。。身邊坐的前一個(gè)人考的是Oracle的,后一個(gè)人考的是IBM的認(rèn)證,都是很快就交了,強(qiáng)人。。。我很快地做完了第一遍,看了下還剩1小時(shí)24分鐘。。。在家里做過幾個(gè) Demo,結(jié)果大部分都是在52%左右,網(wǎng)上都是如果沒有達(dá)到60%的話就別去考。。。但是當(dāng)做第三個(gè)開始的時(shí)候,就感覺做題速度明顯加快,能在1小時(shí)內(nèi)做完第一遍。。。今天只用了30多分鐘,之后開始了檢查,一共檢查了三遍,檢查出了幾道題的錯(cuò),但仍有些拿不準(zhǔn)的。。。最后下了決心,點(diǎn)了結(jié)束鍵。。。成績(jī)單出來了,85%通過,錯(cuò)了9道題!其中集合類只對(duì)了66%,比較差。。。出了考場(chǎng),回想了一下,心里又感覺不出一些的激動(dòng)。。。也許是這段時(shí)間的忙碌讓自己已經(jīng)不習(xí)慣這種感覺了,也許是因?yàn)檫€有許多的事,許多的考試等著我去做。。。但不管怎么樣,還是走過了一關(guān),雖然有些遺憾,感覺這套題自己應(yīng)該達(dá)到 90%,但畢竟還是對(duì)自己的一個(gè)考驗(yàn),這期間的心理變化也許只有我自己才能夠體會(huì)出來。。。在漫漫長(zhǎng)路中,偶爾的一個(gè)驛站也許能夠讓你卸下一些包袱,但依舊不能太放松心情,就像現(xiàn)在,雖然通過了這個(gè)考試,但它只是一個(gè)基礎(chǔ),并不代表你就能做什么,蔡學(xué)庸曾說過,一個(gè)人有認(rèn)證,又有口才,在面試中能夠占有優(yōu)勢(shì),但時(shí)間一長(zhǎng),還是需要用其它方面的優(yōu)勢(shì)來證明,的確是這樣,能力才是我們應(yīng)該擁有的,認(rèn)證無非就是一張紙,多了只是增加紙的厚度,自己能力上有沒有提高也許只有自己才知道。。。好了,現(xiàn)在又暫時(shí)少了一件事,馬上就要開始復(fù)習(xí)期末考試了,不過還是希望燃?xì)狻⑼ㄖ菽沁厱簳r(shí)沒有什么事,否則又該招架不住了。。。呵呵,加油吧!朝著又一個(gè)目標(biāo)前進(jìn)!???

          posted @ 2006-12-19 23:24 bisal 閱讀(254) | 評(píng)論 (1)編輯 收藏

          java開發(fā)代碼規(guī)范

          一、目的? ?
             對(duì)于代碼,首要要求是它必須正確,能夠按照程序員的真實(shí)思想去運(yùn)行;第二個(gè)的要求是代碼必須清晰易懂,使別的程序員能夠容易理解代碼所進(jìn)行的實(shí)際工作。 在軟件工程領(lǐng)域,源程序的風(fēng)格統(tǒng)一標(biāo)志著可維護(hù)性、可讀性,是軟件項(xiàng)目的一個(gè)重要組成部分。而目前還沒有成文的編碼風(fēng)格文檔,以致于很多時(shí)候,程序員沒有 一個(gè)共同的標(biāo)準(zhǔn)可以遵守,編碼風(fēng)格各異,程序可維護(hù)性差、可讀性也很差。通過建立代碼編寫規(guī)范,形成開發(fā)小組編碼約定,提高程序的可靠性、可讀性、可修改 性、可維護(hù)性、可繼承性和一致性,可以保證程序代碼的質(zhì)量,繼承軟件開發(fā)成果,充分利用資源,使開發(fā)人員之間的工作成果可以共享。
          ? ?本文在參考業(yè)界已有的編碼風(fēng)格的基礎(chǔ)上,描述了一個(gè)基于 JBuilder 的項(xiàng)目風(fēng)格,力求一種統(tǒng)一的編程風(fēng)格,并從整體編碼風(fēng)格、代碼文件風(fēng)格、函數(shù)編寫風(fēng)格、變量風(fēng)格、注釋風(fēng)格等幾個(gè)方面進(jìn)行闡述。(這些規(guī)范并不是一定要絕 對(duì)遵守,但是一定要讓程序有良好的可讀性)

          二、整體編碼風(fēng)格
          1、縮進(jìn)
          ? ?縮進(jìn)建議以4個(gè)空格為單位。建議在 Tools/Editor Options 中設(shè)置 Editor 頁面的Block ident為4,Tab Size 為8。預(yù)處理語句、全局?jǐn)?shù)據(jù)、標(biāo)題、附加說明、函數(shù)說明、標(biāo)號(hào)等均頂格書寫。語句塊的"{"、"}"配對(duì)對(duì)齊,并與其前一行對(duì)齊,語句塊類的語句縮進(jìn)建議 每個(gè)"{"、"}"單獨(dú)占一行,便于匹對(duì)。JBuilder 中的默認(rèn)方式是開始的"{"不是單獨(dú)一行,建議更改成上述格式(在 Project/Default Project Properties 中設(shè)置 Code Style 中選擇 Braces 為 Next line)。
          2、空格
          ? ?原則上變量、類、常量數(shù)據(jù)和函數(shù)在其類型,修飾名稱之間適當(dāng)空格并據(jù)情況對(duì)齊。關(guān)鍵字原則上空一格,如:if ( ... ) 等。運(yùn)算符的空格規(guī)定如下:"::"、"->"、"["、"]"、"++"、"--"、"~"、"!"、"+"、"-"(指正負(fù)號(hào))、"& "(引用)等幾個(gè)運(yùn)算符兩邊不加空格(其中單目運(yùn)算符系指與操作數(shù)相連的一邊),其它運(yùn)算符(包括大多數(shù)二目運(yùn)算符和三目運(yùn)算符"?:"兩邊均加一空格, 在作函數(shù)定義時(shí)還可據(jù)情況多空或不空格來對(duì)齊,但在函數(shù)實(shí)現(xiàn)時(shí)可以不用。","運(yùn)算符只在其后空一格,需對(duì)齊時(shí)也可不空或多空格。不論是否有括號(hào),對(duì)語句 行后加的注釋應(yīng)用適當(dāng)空格與語句隔開并盡可能對(duì)齊。個(gè)人認(rèn)為此項(xiàng)可以依照個(gè)人習(xí)慣決定遵循與否。
          3、對(duì)齊
          ? ?原則上關(guān)系密切的行應(yīng)對(duì)齊,對(duì)齊包括類型、修飾、名稱、參數(shù)等各部分對(duì)齊。另每一行的長(zhǎng)度不應(yīng)超過屏幕太多,必要時(shí)適當(dāng)換行,換行時(shí)盡可能在","處或 運(yùn)算符處,換行后最好以運(yùn)算符打頭,并且以下各行均以該語句首行縮進(jìn),但該語句仍以首行的縮進(jìn)為準(zhǔn),即如其下一行為“{”應(yīng)與首行對(duì)齊。
          ? ?變量定義最好通過添加空格形成對(duì)齊,同一類型的變量最好放在一起。如下例所示:
          int? ?? ???Value;
          int? ?? ???Result;
          int? ?? ???Length;
          DWORD? ?? ?Size;
          DWORD? ?? ?BufSize;
          個(gè)人認(rèn)為此項(xiàng)可以依照個(gè)人習(xí)慣決定遵循與否。
          4、空行
          不 得存在無規(guī)則的空行,比如說連續(xù)十個(gè)空行。程序文件結(jié)構(gòu)各部分之間空兩行,若不必要也可只空一行,各函數(shù)實(shí)現(xiàn)之間一般空兩行,由于每個(gè)函數(shù)還要 有函數(shù)說 明注釋,故通常只需空一行或不空,但對(duì)于沒有函數(shù)說明的情況至少應(yīng)再空一行。對(duì)自己寫的函數(shù),建議也加上“//------”做分隔。函數(shù)內(nèi)部數(shù)據(jù)與代碼 之間應(yīng)空至少一行,代碼中適當(dāng)處應(yīng)以空行空開,建議在代碼中出現(xiàn)變量聲明時(shí),在其前空一行。類中四個(gè)“p”之間至少空一行,在其中的數(shù)據(jù)與函數(shù)之間也應(yīng)空 行。
          5、注釋
          注釋是軟件可讀性的具體體現(xiàn)。程序注釋量一般占程序編碼量的20%,軟件工程要求不少于20%。程序注釋不能用抽象 的語言,類似于"處理"、"循 環(huán)"這樣 的計(jì)算機(jī)抽象語言,要精確表達(dá)出程序的處理說明。例如:"計(jì)算凈需求"、"計(jì)算第一道工序的加工工時(shí)"等。避免每行程序都使用注釋,可以在一段程序的前面 加一段注釋,具有明確的處理邏輯。
          注釋必不可少,但也不應(yīng)過多,不要被動(dòng)的為寫注釋而寫注釋。以下是四種必要的注釋:
          A. 標(biāo)題、附加說明。
          B. 函數(shù)、類等的說明。對(duì)幾乎每個(gè)函數(shù)都應(yīng)有適當(dāng)?shù)恼f明,通常加在函數(shù)實(shí)現(xiàn)之前,在沒有函數(shù)實(shí)現(xiàn)部分的情況下則加在函數(shù)原型前,其內(nèi)容主要是函數(shù)的功能、目 的、算法等說明,參數(shù)說明、返回值說明等,必要時(shí)還要有一些如特別的軟硬件要求等說明。公用函數(shù)、公用類的聲明必須由注解說明其使用方法和設(shè)計(jì)思路,當(dāng)然 選擇恰當(dāng)?shù)拿袷侥軌驇椭惆咽虑榻忉尩酶宄?
          C. 在代碼不明晰或不可移植處必須有一定的說明。
          D. 及少量的其它注釋,如自定義變量的注釋、代碼書寫時(shí)間等。
          注釋有塊注釋和行注釋兩種,分別是指:"/**/"和"http://"建議對(duì)A用塊注釋,D用行注釋,B、C則視情況而定,但應(yīng)統(tǒng)一,至少在一個(gè)單元中B類注釋形式應(yīng)統(tǒng)一。具體對(duì)不同文件、結(jié)構(gòu)的注釋會(huì)在后面詳細(xì)說明。
          6、代碼長(zhǎng)度
          對(duì) 于每一個(gè)函數(shù)建議盡可能控制其代碼長(zhǎng)度為53行左右,超過53行的代碼要重新考慮將其拆分為兩個(gè)或兩個(gè)以上的函數(shù)。函數(shù)拆分規(guī)則應(yīng)該一不破壞原 有算法為 基礎(chǔ),同時(shí)拆分出來的部分應(yīng)該是可以重復(fù)利用的。對(duì)于在多個(gè)模塊或者窗體中都要用到的重復(fù)性代碼,完全可以將起獨(dú)立成為一個(gè)具備公用性質(zhì)的函數(shù),放置于一 個(gè)公用模塊中。
          7、頁寬
          頁寬應(yīng)該設(shè)置為80字符。源代碼一般不會(huì)超過這個(gè)寬度, 并導(dǎo)致無法完整顯示, 但這一設(shè)置也可以靈活調(diào)整. 在任何情況下, 超長(zhǎng)的語句應(yīng)該在一個(gè)逗號(hào)或者一個(gè)操作符后折行. 一條語句折行后, 應(yīng)該比原來的語句再縮進(jìn)2個(gè)字符.
          8、行數(shù)
          一 般的集成編程環(huán)境下,每屏大概只能顯示不超過50行的程序,所以這個(gè)函數(shù)大概要5-6屏顯示,在某些環(huán)境下要8屏左右才能顯示完。這樣一來,無 論是讀程 序還是修改程序,都會(huì)有困難。因此建議把完成比較獨(dú)立功能的程序塊抽出,單獨(dú)成為一個(gè)函數(shù)。把完成相同或相近功能的程序塊抽出,獨(dú)立為一個(gè)子函數(shù)。可以發(fā) 現(xiàn),越是上層的函數(shù)越簡(jiǎn)單,就是調(diào)用幾個(gè)子函數(shù),越是底層的函數(shù)完成的越是具體的工作。這是好程序的一個(gè)標(biāo)志。這樣,我們就可以在較上層函數(shù)里容易控制整 個(gè)程序的邏輯,而在底層的函數(shù)里專注于某方面的功能的實(shí)現(xiàn)了。

          三、代碼文件風(fēng)格
          所有的 Java(*.java) 文件都必須遵守如下的樣式規(guī)則:
          . 文件生成
          對(duì)于規(guī)范的 JAVA 派生類,盡量用 JBuilder 的 Object Gallery 工具來生成文件格式,避免用手工制作的頭文件/實(shí)現(xiàn)文件。
          . package/import
          package 行要在 import 行之前,import 中標(biāo)準(zhǔn)的包名要在本地的包名之前,而且按照字母順序排列。如果 import 行中包含了同一個(gè)包中的不同子目錄,則應(yīng)該用 * 來處理。
          package hotlava.net.stats;
          import java.io.*;
          import java.util.Observable;
          import hotlava.util.Application;??
          這里 java.io.* 使用來代替InputStream and OutputStream 的。
          . 文件頭部注釋
          文 件頭部注釋主要是表明該文件的一些信息,是程序的總體說明,可以增強(qiáng)程序的可讀性和可維護(hù)性。文件頭部注釋一般位于 package/imports 語句之后,Class 描述之前。要求至少寫出文件名、創(chuàng)建者、創(chuàng)建時(shí)間和內(nèi)容描述。JBuilder 的 Object Gallery 工具生成的代碼中會(huì)在類、工程文件中等自動(dòng)添加注釋,我們也要添加一些注釋,其格式應(yīng)該盡量約束如下:
          /**
          * Title:??確定鼠標(biāo)位置類
          * Description: 確定鼠標(biāo)當(dāng)前在哪個(gè)作業(yè)欄位中并返回作業(yè)號(hào)
          * @Copyright: Copyright (c) 2002
          * @Company: HIT
          * @author: rivershan
          * @version: 1.0
          * @time: 2002.10.30
          */
          . Class
          接下來的是類的注釋,一般是用來解釋類的。
          /**
          * A class representing a set of packet and byte counters
          * It is observable to allow it to be watched, but only
          * reports changes when the current set is complete
          */
          接下來是類定義,包含了在不同的行的 extends 和 implements
          public class CounterSet
          extends Observable
          implements Cloneable
          .Class Fields
          接下來是類的成員變量:
          /**
          * Packet counters
          */
          protected int[] packets;
          public 的成員變量必須生成文檔(JavaDoc)。proceted、private和 package 定義的成員變量如果名字含義明確的話,可以沒有注釋。
          . 存取方法
          接下來是類變量的存取的方法。它只是簡(jiǎn)單的用來將類的變量賦值獲取值的話,可以簡(jiǎn)單的寫在一行上。(個(gè)人認(rèn)為盡量分行寫)
          /**
          * Get the counters
          * @return an array containing the statistical data.??This array has been
          * freshly allocated and can be modified by the caller.
          */
          public int[] getPackets()
          {
          return copyArray(packets, offset);
          }
          public int[] getBytes()
          {
          return copyArray(bytes, offset);
          }
          public int[] getPackets()
          {
          return packets;
          }
          public void setPackets(int[] packets)
          {
          this.packets = packets;
          }
          其它的方法不要寫在一行上
          . 構(gòu)造函數(shù)
          接下來是構(gòu)造函數(shù),它應(yīng)該用遞增的方式寫(比如:參數(shù)多的寫在后面)。
          訪問類型("public","private" 等.)和任何"static","final"或"synchronized"應(yīng)該在一行中,并且方法和參數(shù)另寫一行,這樣可以使方法和參數(shù)更易讀。
          public
          CounterSet(int size)
          {
          ??this.size = size;
          }
          . 克隆方法
          如果這個(gè)類是可以被克隆的,那么下一步就是 clone 方法:
          public
          Object clone()
          {
          try
          ??{
          ? ? CounterSet obj = (CounterSet)super.clone();
          ? ? obj.packets = (int[])packets.clone();
          ? ? obj.size = size;
          ? ? return obj;
          ??}??
          ??catch(CloneNotSupportedException e)
          ??{
          ? ?throw new InternalError("Unexpected CloneNotSUpportedException: "
          ? ?? ?? ?+ e.getMessage());
          ??}
          }
          . 類方法
          下面開始寫類的方法:
          /**
          * Set the packet counters
          * (such as when restoring from a database)
          */
          protected final
          void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
          throws IllegalArgumentException
          {
          //
          ??// Ensure the arrays are of equal size
          ??//
          ??if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
          throw new IllegalArgumentException("Arrays must be of the same size");
          ??System.arraycopy(r1, 0, r3, 0, r1.length);
          ??System.arraycopy(r2, 0, r4, 0, r1.length);
          }
          . toString 方法
          無論如何,每一個(gè)類都應(yīng)該定義 toString 方法:
          public
          String toString()
          {
          String retval = "CounterSet: ";
          ? ?for (int i = 0; i < data.length(); i++)
          ? ?{
          ? ?? ?retval += data.bytes.toString();
          ? ?? ?retval += data.packets.toString();
          ? ?}
          ? ?return retval;
          }
          . main 方法
          如果main(String[]) 方法已經(jīng)定義了, 那么它應(yīng)該寫在類的底部.

          四、函數(shù)編寫風(fēng)格
          . 函數(shù)的命名
          通 常,函數(shù)的命名也是以能表達(dá)函數(shù)的動(dòng)作意義為原則的,一般是由動(dòng)詞打頭,然后跟上表示動(dòng)作對(duì)象的名詞,各單詞的首字母應(yīng)該大寫。另外,還有一些函數(shù)命名的 通用規(guī)則。如取數(shù),則用Get打頭,然后跟上要取的對(duì)象的名字;設(shè)置數(shù),則用Set打頭,然后跟上要設(shè)的對(duì)象的名字;而對(duì)象中為了響應(yīng)消息進(jìn)行動(dòng)作的函 數(shù),可以命名為On打頭,然后是相應(yīng)的消息的名稱;進(jìn)行主動(dòng)動(dòng)作的函數(shù),可以命名為Do打頭,然后是相應(yīng)的動(dòng)作名稱。類似的規(guī)則還有很多,需要程序員多讀 優(yōu)秀的程序,逐漸積累經(jīng)驗(yàn),才能作出好的函數(shù)命名。
          . 函數(shù)注釋
          系統(tǒng)自動(dòng)生成的函數(shù),如鼠標(biāo)動(dòng)作響應(yīng)函數(shù)等,不必太多的注釋和解釋;
          對(duì)于自行編寫的函數(shù),若是系統(tǒng)關(guān)鍵函數(shù),則必須在函數(shù)實(shí)現(xiàn)部分的上方標(biāo)明該函數(shù)的信息,格式如下:
          /**
          * 函數(shù)名:
          * 編寫者:
          * 參考資料:
          * 功??能:
          * 輸入?yún)?shù):
          * 輸出參數(shù):
          * 備??注:
          */
          希望盡量遵循以上格式。

          五、符號(hào)風(fēng)格
          . 總體要求
          對(duì)于各種符號(hào)的定義,都有一個(gè)共通點(diǎn),就是應(yīng)該使用有實(shí)際意義的英文單詞或英文單詞的縮寫,不要使用簡(jiǎn)單但沒有意義的字串,盡可能不使用阿拉伯?dāng)?shù)字,更切忌使用中文拼音的首字母。如這樣的名稱是不提倡的:Value1,Value2,Value3,Value4 …。
          例如:
          file(文件),code(編號(hào)),data(數(shù)據(jù)),pagepoint(頁面指針), faxcode(傳真號(hào)) ,address(地址),bank(開戶銀行),……
          . 變量名稱
          變 量命名由(前綴+修飾語)構(gòu)成。現(xiàn)在比較流行的是一套由微軟的一個(gè)匈牙利軟件工程師首先使用,并且在微軟推廣開來,現(xiàn)在被稱之為匈牙利命名法的命名規(guī)則。 匈牙利命名法規(guī)定,使用表示標(biāo)識(shí)符所對(duì)應(yīng)的變量類型的英文小寫縮寫作為標(biāo)識(shí)符的前綴,后面在使用表示變量意義的英文單詞或縮寫進(jìn)行命名。下面是匈牙利命名 法中的一些命名方式:
          (1)生存期修飾:用l(local)表示局域變量,p(public)表示全局變量,s(send)表示參數(shù)變量
          (2)類型修飾:用s(AnsiString)表示字符串,c(char)表示字符,n(number)數(shù)值,i(intger)表示整數(shù),d(double)表示雙精度,f(float)浮點(diǎn)型,b(bool)布爾型,d(date)表示日期型.
          例如:
          li_length表示整形的局域變量,是用來標(biāo)識(shí)長(zhǎng)度的.ls_code表示字符型的局域變量,用來標(biāo)識(shí)代碼.
          . 控件名稱
          控件命名由(前綴+修飾語)構(gòu)成。前綴即為控件的名稱。
          按鈕變量??Button+Xxxxxxx? ? 例如:ButtonSave,ButtonExit,ButtonPrint等
          題標(biāo)變量??Label+Xxxxxxxx? ? 例如:LabelName,LabelSex等
          數(shù)據(jù)表變量 Table+Xxxxxx? ?? ?例如:TableFile,TableCount等
          查詢變量??Query+Xxxxxx? ?? ?例如:QueryFile,QueryCeneter等
          數(shù)據(jù)源變量 DataSource+Xxx? ?? ?例如:DataSourceFile,DataSourceCenter等
          。。。。。。。。。。。。。。。。
          (注:對(duì)于與表有關(guān)的控件“修飾語”部分最好直接用表名。)
          . Package 的命名
          Package 的名字應(yīng)該都是由一個(gè)小寫單詞組成。
          . Class 的命名
          Class 的名字必須由一個(gè)或數(shù)個(gè)能表達(dá)該類的意思的大寫字母開頭而其它字母都小寫的單詞或縮寫組成,這樣能使這個(gè) Class 的名稱能更容易被理解。
          . Class 變量的命名
          變量的名字必須用一個(gè)小寫字母開頭。后面的單詞用大寫字母開頭。對(duì)于類的成員變量,在對(duì)其標(biāo)識(shí)符命名時(shí),要加上代表member(成員)的前綴m_。例如一個(gè)標(biāo)識(shí)符為m_dwFlag,則它表示的變量是一個(gè)類型為雙字的成員變量,它是代表一個(gè)標(biāo)志。
          . Static Final 變量的命名
          Static Final 變量的名字應(yīng)該都大寫,并且指出完整含義。
          . 參數(shù)的命名
          參數(shù)的名字必須和變量的命名規(guī)范一致。
          . 數(shù)組的命名
          數(shù)組應(yīng)該總是用下面的方式來命名:
          byte[] buffer;??
          而不是:
          byte buffer[];
          . 方法的參數(shù)
          使用有意義的參數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名字:
          SetCounter(int size)
          {
          this.size = size;
          }
          . 神秘的數(shù)
          首 先要說什么是神秘的數(shù)。我們?cè)诔绦蚶锝?jīng)常會(huì)用到一些量,它是有特定的含義的。例如,現(xiàn)在我們寫一個(gè)薪金統(tǒng)計(jì)程序,公司員工有50人,我們?cè)诔绦蚶锞蜁?huì)用 50這個(gè)數(shù)去進(jìn)行各種各樣的運(yùn)算。在這里,50就是"神秘的數(shù)"。為什么稱它為神秘呢?因?yàn)閯e的程序員在程序里看到50這個(gè)數(shù),不知道它的含義,只能靠猜 了。
          在程序里出現(xiàn)"神秘的數(shù)"會(huì)降低程序的可讀性,應(yīng)該盡量避免。避免的方法是把神秘的數(shù)定義為一個(gè)常量。注意這個(gè)常量的命名應(yīng)該能表達(dá)該 數(shù)的意義,并且應(yīng)該全部大寫,以與對(duì)應(yīng)于變量的標(biāo)識(shí)符區(qū)別開來。例如上面50這個(gè)數(shù),我們可以定義為一個(gè)名為NUMOFEMPLOYEES的常量來代替。 這樣,別的程序員在讀程序的時(shí)候就可以容易理解了。
          六、程序編寫風(fēng)格
          . exit()
          exit 除了在 main 中可以被調(diào)用外,其他的地方不應(yīng)該調(diào)用。因?yàn)檫@樣做不給任何代碼代碼機(jī)會(huì)來截獲退出。一個(gè)類似后臺(tái)服務(wù)地程序不應(yīng)該因?yàn)槟骋粋€(gè)庫模塊決定了要退出就退出。
          . 異常
          申明的錯(cuò)誤應(yīng)該拋出一個(gè)RuntimeException或者派生的異常。
          頂層的main()函數(shù)應(yīng)該截獲所有的異常,并且打印(或者記錄在日志中)在屏幕上。
          . 垃圾收集
          JAVA使用成熟的后臺(tái)垃圾收集技術(shù)來代替引用計(jì)數(shù)。但是這樣會(huì)導(dǎo)致一個(gè)問題:你必須在使用完對(duì)象的實(shí)例以后進(jìn)行清場(chǎng)工作。比如一個(gè)prel的程序員可能這么寫:
          ...
          {
          FileOutputStream fos = new FileOutputStream(projectFile);
          project.save(fos, "IDE Project File");
          }
          ...
          除非輸出流一出作用域就關(guān)閉,非引用計(jì)數(shù)的程序語言,比如JAVA,是不能自動(dòng)完成變量的清場(chǎng)工作的。必須象下面一樣寫:
          FileOutputStream fos = new FileOutputStream(projectFile);
          project.save(fos, "IDE Project File");
          fos.close();
          . Clone
          下面是一種有用的方法:
          implements Cloneable
          public
          Object clone()
          {
          try
          {
          ThisClass obj = (ThisClass)super.clone();
          obj.field1 = (int[])field1.clone();
          obj.field2 = field2;
          return obj;
          }
          catch(CloneNotSupportedException e)
          {
          throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
          }
          }
          . final 類
          絕對(duì)不要因?yàn)樾阅艿脑驅(qū)㈩惗x為 final 的(除非程序的框架要求)
          如果一個(gè)類還沒有準(zhǔn)備好被繼承,最好在類文檔中注明,而不要將她定義為 final 的。這是因?yàn)闆]有人可以保證會(huì)不會(huì)由于什么原因需要繼承她。
          . 訪問類的成員變量
          大部分的類成員變量應(yīng)該定義為 protected 的來防止繼承類使用他們。
          注意,要用"int[] packets",而不是"int packets[]",后一種永遠(yuǎn)也不要用。
          public void setPackets(int[] packets)
          {
          this.packets = packets;
          }
          CounterSet(int size)
          {
          this.size = size;
          }
          . byte 數(shù)組轉(zhuǎn)換到 characters
          為了將 byte 數(shù)組轉(zhuǎn)換到 characters,你可以這么做:
          "Hello world!".getBytes();
          . Utility 類
          Utility 類(僅僅提供方法的類)應(yīng)該被申明為抽象的來防止被繼承或被初始化。
          . 初始化
          下面的代碼是一種很好的初始化數(shù)組的方法:
          objectArguments = new Object[]
          {
          arguments
          };
          . 枚舉類型
          JAVA 對(duì)枚舉的支持不好,但是下面的代碼是一種很有用的模板:
          class Colour
          {
          ??public static final Colour BLACK = new Colour(0, 0, 0);
          ??public static final Colour RED = new Colour(0xFF, 0, 0);
          ??public static final Colour GREEN = new Colour(0, 0xFF, 0);
          ??public static final Colour BLUE = new Colour(0, 0, 0xFF);
          ??public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
          }
          這種技術(shù)實(shí)現(xiàn)了RED, GREEN, BLUE 等可以象其他語言的枚舉類型一樣使用的常量。 他們可以用 ''=='' 操作符來比較。
          但是這樣使用有一個(gè)缺陷:如果一個(gè)用戶用這樣的方法來創(chuàng)建顏色 BLACK
          new Colour(0,0,0)
          那么這就是另外一個(gè)對(duì)象,''==''操作符就會(huì)產(chǎn)生錯(cuò)誤。她的 equal() 方法仍然有效。由于這個(gè)原因,這個(gè)技術(shù)的缺陷最好注明在文檔中,或者只在自己的包中使用。
          . 混合使用 AWT 和 Swing 組件
          如果要將 AWT 組件和 Swing 組件混合起來使用的話,請(qǐng)小心使用。實(shí)際上,盡量不要將他們混合起來使用。
          . 滾動(dòng)的 AWT 組件
          AWT 組件絕對(duì)不要用 JscrollPane 類來實(shí)現(xiàn)滾動(dòng)。滾動(dòng) AWT 組件的時(shí)候一定要用 AWT ScrollPane 組件來實(shí)現(xiàn)。
          . 避免在 InternalFrame 組件中使用 AWT 組件
          盡量不要這么做,要不然會(huì)出現(xiàn)不可預(yù)料的后果。
          . Z-Order 問題
          AWT 組件總是顯示在 Swing 組件之上。當(dāng)使用包含 AWT 組件的 POP-UP 菜單的時(shí)候要小心,盡量不要這樣使用。

          八、性能
          在寫代碼的時(shí)候,從頭至尾都應(yīng)該考慮性能問題。這不是說時(shí)間都應(yīng)該浪費(fèi)在優(yōu)化代碼上,而是我們時(shí)刻應(yīng)該提醒自己要注意代碼的效率。比如:如果沒有時(shí)間來實(shí)現(xiàn)一個(gè)高效的算法,那么我們應(yīng)該在文檔中記錄下來,以便在以后有空的時(shí)候再來實(shí)現(xiàn)她。
          不是所有的人都同意在寫代碼的時(shí)候應(yīng)該優(yōu)化性能這個(gè)觀點(diǎn)的,他們認(rèn)為性能優(yōu)化的問題應(yīng)該在項(xiàng)目的后期再去考慮,也就是在程序的輪廓已經(jīng)實(shí)現(xiàn)了以后。
          . 不必要的對(duì)象構(gòu)造
          不要在循環(huán)中構(gòu)造和釋放對(duì)象
          . 使用 StringBuffer 對(duì)象
          在 處理 String 的時(shí)候要盡量使用 StringBuffer 類,StringBuffer 類是構(gòu)成 String 類的基礎(chǔ)。String 類將 StringBuffer 類封裝了起來,(以花費(fèi)更多時(shí)間為代價(jià))為開發(fā)人員提供了一個(gè)安全的接口。當(dāng)我們?cè)跇?gòu)造字符串的時(shí)候,我們應(yīng)該用 StringBuffer 來實(shí)現(xiàn)大部分的工作,當(dāng)工作完成后將 StringBuffer 對(duì)象再轉(zhuǎn)換為需要的 String 對(duì)象。比如:如果有一個(gè)字符串必須不斷地在其后添加許多字符來完成構(gòu)造,那么我們應(yīng)該使用 StringBuffer 對(duì)象和她的 append() 方法。如果我們用 String 對(duì)象代替 StringBuffer 對(duì)象的話,會(huì)花費(fèi)許多不必要的創(chuàng)建和釋放對(duì)象的 CPU 時(shí)間。
          . 避免太多的使用 synchronized 關(guān)鍵字
          避免不必要的使用關(guān)鍵字 synchronized,應(yīng)該在必要的時(shí)候再使用她,這是一個(gè)避免死鎖的好方法。

          posted @ 2006-12-12 23:00 bisal 閱讀(567) | 評(píng)論 (0)編輯 收藏

          Flexsim

          ??????? 今天培訓(xùn)了一下Flexsim這個(gè)仿真軟件,以前只學(xué)過GPSS,連Arena也沒有接觸過,感覺Flexsim給人的第一感覺就是比較直觀,動(dòng)態(tài)效果比較強(qiáng),不過它的許多功能還不了解,一天的培訓(xùn)可能僅僅接觸到了皮毛,而且關(guān)于它的一些教材也比較少,只有聯(lián)機(jī)幫助,據(jù)說是許多公司都是用這個(gè)仿真軟件進(jìn)行仿真決策,它的功能還有待進(jìn)一步地探索與開發(fā)。。。

          posted @ 2006-11-18 14:18 bisal 閱讀(5392) | 評(píng)論 (36)編輯 收藏

          SCJP備考復(fù)習(xí)。。。

          ?? 今天終于報(bào)了SCJP,交錢的時(shí)候想都沒有想。。。雖然是個(gè)挑戰(zhàn),但畢竟還是有許多的不利因素,盡管如此,也要全力以赴,即使沒有好的結(jié)果,也不能枉費(fèi)這一段特殊的經(jīng)歷。。。加油!為了一個(gè)夢(mèng)想!

          posted @ 2006-10-30 21:43 bisal 閱讀(273) | 評(píng)論 (1)編輯 收藏

          JSP連接數(shù)據(jù)庫大全

          JSP連接數(shù)據(jù)庫大全


          一、jsp連接Oracle8/8i/9i數(shù)據(jù)庫(用thin模式)

          testoracle.jsp如下:

          <%@ page contentType="text/html;charset=gb2312"%>

          <%@ page import="java.sql.*"%>

          <html>

          <body>

          <%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

          String url="jdbc:oracle:thin:@localhost:1521:orcl";

          //orcl為你的數(shù)據(jù)庫的SID

          String user="scott";

          String password="tiger";

          Connection conn= DriverManager.getConnection(url,user,password);

          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

          String sql="select * from test";

          ResultSet rs=stmt.executeQuery(sql);

          while(rs.next()) {%>

          您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>

          您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>

          <%}%>

          <%out.print("數(shù)據(jù)庫操作成功,恭喜你");%>

          <%rs.close();

          stmt.close();

          conn.close();

          %>

          </body>

          </html>


          二、jsp連接Sql Server7.0/2000數(shù)據(jù)庫

          testsqlserver.jsp如下:

          <%@ page contentType="text/html;charset=gb2312"%>

          <%@ page import="java.sql.*"%>

          <html>

          <body>

          <%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();

          String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";

          //pubs為你的數(shù)據(jù)庫的

          String user="sa";

          String password="";

          Connection conn= DriverManager.getConnection(url,user,password);

          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

          String sql="select * from test";

          ResultSet rs=stmt.executeQuery(sql);

          while(rs.next()) {%>

          您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>

          您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>

          <%}%>

          <%out.print("數(shù)據(jù)庫操作成功,恭喜你");%>

          <%rs.close();

          stmt.close();

          conn.close();

          %>

          </body>

          </html>


          三、jsp連接DB2數(shù)據(jù)庫

          testdb2.jsp如下:

          <%@ page contentType="text/html;charset=gb2312"%>

          <%@ page import="java.sql.*"%>

          <html>

          <body>

          <%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();

          String url="jdbc:db2://localhost:5000/sample";

          //sample為你的數(shù)據(jù)庫名

          String user="admin";

          String password="";

          Connection conn= DriverManager.getConnection(url,user,password);

          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

          String sql="select * from test";

          ResultSet rs=stmt.executeQuery(sql);

          while(rs.next()) {%>

          您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>

          您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>

          <%}%>

          <%out.print("數(shù)據(jù)庫操作成功,恭喜你");%>

          <%rs.close();

          stmt.close();

          conn.close();

          %>

          </body>

          </html>


          四、jsp連接Informix數(shù)據(jù)庫

          testinformix.jsp如下:

          <%@ page contentType="text/html;charset=gb2312"%>

          <%@ page import="java.sql.*"%>

          <html>

          <body>

          <%Class.forName("com.informix.jdbc.IfxDriver").newInstance();

          String url =

          "jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;

          user=testuser;password=testpassword";

          //testDB為你的數(shù)據(jù)庫名

          Connection conn= DriverManager.getConnection(url);

          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

          String sql="select * from test";

          ResultSet rs=stmt.executeQuery(sql);

          while(rs.next()) {%>

          您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>

          您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>

          <%}%>

          <%out.print("數(shù)據(jù)庫操作成功,恭喜你");%>

          <%rs.close();

          stmt.close();

          conn.close();

          %>

          </body>

          </html>


          五、jsp連接Sybase數(shù)據(jù)庫

          testmysql.jsp如下:

          <%@ page contentType="text/html;charset=gb2312"%>

          <%@ page import="java.sql.*"%>

          <html>

          <body>

          <%Class.forName("com.sybase.jdbc.SybDriver").newInstance();

          String url =" jdbc:sybase:Tds:localhost:5007/tsdata";

          //tsdata為你的數(shù)據(jù)庫名

          Properties sysProps = System.getProperties();

          SysProps.put("user","userid");

          SysProps.put("password","user_password");

          Connection conn= DriverManager.getConnection(url, SysProps);

          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

          String sql="select * from test";

          ResultSet rs=stmt.executeQuery(sql);

          while(rs.next()) {%>

          您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>

          您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>

          <%}%>

          <%out.print("數(shù)據(jù)庫操作成功,恭喜你");%>

          <%rs.close();

          stmt.close();

          conn.close();

          %>

          </body>

          </html>


          六、jsp連接MySQL數(shù)據(jù)庫

          testmysql.jsp如下:

          <%@ page contentType="text/html;charset=gb2312"%>

          <%@ page import="java.sql.*"%>

          <html>

          <body>

          <%Class.forName("org.gjt.mm.mysql.Driver").newInstance();

          String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=gb2312"

          //testDB為你的數(shù)據(jù)庫名

          Connection conn= DriverManager.getConnection(url);

          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

          String sql="select * from test";

          ResultSet rs=stmt.executeQuery(sql);

          while(rs.next()) {%>

          您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>

          您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>

          <%}%>

          <%out.print("數(shù)據(jù)庫操作成功,恭喜你");%>

          <%rs.close();

          stmt.close();

          conn.close();

          %>

          </body>

          </html>


          七、jsp連接PostgreSQL數(shù)據(jù)庫

          testmysql.jsp如下:

          <%@ page contentType="text/html;charset=gb2312"%>

          <%@ page import="java.sql.*"%>

          <html>

          <body>

          <%Class.forName("org.postgresql.Driver").newInstance();

          String url ="jdbc:postgresql://localhost/soft"

          //soft為你的數(shù)據(jù)庫名

          String user="myuser";

          String password="mypassword";

          Connection conn= DriverManager.getConnection(url,user,password);

          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

          String sql="select * from test";

          ResultSet rs=stmt.executeQuery(sql);

          while(rs.next()) {%>

          您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>

          您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>

          <%}%>

          <%out.print("數(shù)據(jù)庫操作成功,恭喜你");%>

          <%rs.close();

          stmt.close();

          conn.close();

          %>

          </body>

          </html>




          posted @ 2006-10-29 10:40 bisal 閱讀(2177) | 評(píng)論 (1)編輯 收藏

          ASP.NET

          ??? 開始接觸ASP.NET。。。

          posted @ 2006-10-29 10:32 bisal 閱讀(179) | 評(píng)論 (0)編輯 收藏

          在WinMe中安裝java環(huán)境

            因?yàn)榧依锏呐_(tái)式機(jī)只能裝到WinMe,所以剛開始的時(shí)候不能像在Win2000,WinXP中填寫環(huán)境變量那樣設(shè)置java環(huán)境,查了資料說需要在C盤中在autoexec.bat文件中添加環(huán)境變量的方式設(shè)置,但是用了半天,結(jié)果都沒有能夠成功編譯運(yùn)行java文件,一直不知道為什么。有一次突然當(dāng)在運(yùn)行中打入msconfig后看到其中有一項(xiàng)是“環(huán)境變量”,試了一下,結(jié)果竟然可以編譯運(yùn)行java文件了!真實(shí)太神奇了!后來通過查找資料發(fā)現(xiàn)也可以通過“幫助”程序進(jìn)入msconfig設(shè)置窗口,操作的過程基本與此相同,呵呵,有時(shí)真是需要自己的實(shí)踐才能讓自己有比較深的體會(huì),掌握一些東西,我覺得應(yīng)用到任何一個(gè)領(lǐng)域都是行得通的。

          posted @ 2006-10-21 21:35 bisal 閱讀(233) | 評(píng)論 (0)編輯 收藏

          程序員修煉之道

          ??? 看到了一篇文章,感覺頗為有道理,希望可以隨時(shí)以此警示自己。要想成為一名優(yōu)秀的程序員,而不是一個(gè)普通的代碼藍(lán)領(lǐng)的話,我覺得應(yīng)該做到以下文章中談到的幾點(diǎn):

          1.從一門語言開始
          初學(xué)編程,最忌諱就是貪多。其實(shí)編程的道理都是相同的,通一則知百,但是知百卻不一定能夠通一!所以切記要"專心使用一門語言",把它學(xué)透,以后自然通一則知百!通過實(shí)踐證明,VB和Delphi是使用者最多的語言。

          2.規(guī)范的代碼
          程序員與程序員之間的交流主要還是靠源程序,所以代碼一定要規(guī)范(命名規(guī)范,注釋規(guī)范,編寫規(guī)范等等)。這樣不僅便于你程序的改進(jìn),也便于向他人請(qǐng)教!"編程易精"的程序代碼就是采用了規(guī)范的寫作方式。

          3.學(xué)why不記how
          學(xué)編程,重要的是學(xué)會(huì)why(程序?yàn)槭裁催@樣做),而不是學(xué)習(xí)how(怎樣編程)。最重要的是樹立"編程的思路",而不是編程的步驟。"編程易精"就是教你思考如何做好程序。

          4.學(xué)而時(shí)習(xí)之
          每天學(xué)的東西多了,總要找個(gè)時(shí)間來復(fù)習(xí)一下,做好時(shí)每天晚上空下來時(shí),一邊看代碼一邊看實(shí)例,參照學(xué)習(xí):想想都學(xué)了什么,還有哪些需要學(xué)習(xí)和掌握。這樣不僅溫習(xí)了當(dāng)天的內(nèi)容,還可以定下來第二天的學(xué)習(xí)計(jì)劃。

          5.簡(jiǎn)單最好
          程序代碼的編寫不講究華麗,最好的代碼是最實(shí)用最簡(jiǎn)短的。這樣不僅可以減少出錯(cuò)的機(jī)會(huì),并且還使得整個(gè)程序顯得小巧。

          6.三人行必有我?guī)?br />不管你的編程水平多高,都有不懂的地方,所以時(shí)刻都要向他人學(xué)習(xí)來提高自己。連孔子都可以拜小孩為師,我們還有什么面子放不下的呢?

            潘愛民也說過:“高超的技術(shù)水準(zhǔn)加上良好的編程習(xí)慣,等于優(yōu)秀程序員中的佼佼者”,希望可以真正做到這些。。。

          posted @ 2006-10-14 17:41 bisal 閱讀(241) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共5頁: 上一頁 1 2 3 4 5 下一頁 

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(4)

          隨筆檔案

          文章檔案

          相冊(cè)

          Java戰(zhàn)友兄弟

          常用技術(shù)交流平臺(tái)

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 逊克县| 麻栗坡县| 葵青区| 都匀市| 峨眉山市| 临朐县| 大石桥市| 灵武市| 兴文县| 阳城县| 荆州市| 班玛县| 曲沃县| 新郑市| 府谷县| 永川市| 平陆县| 广宗县| 巴林右旗| 南乐县| 利辛县| 盐亭县| 巨野县| 沂源县| 武乡县| 习水县| 集贤县| 绥化市| 凤翔县| 南安市| 林芝县| 汝南县| 九台市| 崇州市| 凤山市| 益阳市| 阿巴嘎旗| 敦化市| 保山市| 曲周县| 寿阳县|