在用Java進(jìn)行開發(fā)前,一定要牢牢遵守Java的開發(fā)規(guī)范,只有這樣你的Java開發(fā)之路才能更加順暢。
10年的昌邑網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整昌邑建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“昌邑網(wǎng)站設(shè)計(jì)”,“昌邑網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
而掌握相應(yīng)的Java開發(fā)技巧,則可以讓你工作起來(lái)事半功倍。
那在編寫代碼時(shí)有什么開發(fā)規(guī)范和技巧呢?電腦培訓(xùn)給你詳細(xì)介紹一下吧。
1、代碼編寫規(guī)范:代碼編寫遵守Java通用開發(fā)規(guī)范和必聯(lián)代碼開發(fā)規(guī)范;每個(gè)類及方法都要有合理的注釋,并且對(duì)注釋要持續(xù)維護(hù);根據(jù)接口需求編寫單元測(cè)試用例,再編寫實(shí)現(xiàn)類使得單元測(cè)試通過(guò),如此循環(huán)往復(fù)以使得所有的單元測(cè)試通過(guò);要求每個(gè)Java方法的代碼行數(shù)不能超過(guò)100行;代碼編寫按照功能劃分,一個(gè)接口分為多個(gè)方法,每一個(gè)方法做什么事情,做到思路清晰;接口設(shè)計(jì)盡量做到多兼容性,方便后期開發(fā)。
2、數(shù)據(jù)庫(kù)設(shè)計(jì)及SQL規(guī)范不使用MySQL數(shù)據(jù)庫(kù)外鍵約束,通過(guò)應(yīng)用程序邏輯實(shí)現(xiàn)關(guān)聯(lián)約束;適當(dāng)建立索引,經(jīng)常作為查詢條件的字段、唯一性程度高、長(zhǎng)度不是很長(zhǎng)的、數(shù)量不宜太多,一般一個(gè)表的索引數(shù)目在5個(gè)以內(nèi);表名長(zhǎng)度不能超過(guò)30個(gè)字符,表名最好選擇一個(gè)單詞,能夠準(zhǔn)確清晰明了地表示實(shí)體含義,若必須多個(gè)單詞則以下劃線“_”分隔,單詞所有字母均小寫;
1 變量的命名,要規(guī)范
2 代碼的縮進(jìn)要規(guī)范
3 一個(gè)方法只做一件事情
。。??傊芏嘁?guī)范的。
開發(fā)過(guò)程需要注意的問(wèn)題有下面這些:\x0d\x0a\x0d\x0a1. 服務(wù)器端必須提供輸入數(shù)據(jù)正確性的驗(yàn)證,客戶端的Javascript驗(yàn)證可以沒(méi)有。這是基于安全性的考慮,因?yàn)镴avascript是很容易被繞過(guò)的,增加客戶端驗(yàn)證只是為了減少服務(wù)器壓力、界面更加容易使用。 \x0d\x0a\x0d\x0a2. 適度使用Session,盡量不要在Session里放很大的集合對(duì)象,以免內(nèi)存消耗過(guò)大,因?yàn)楹芏嘤脩粼L問(wèn)的時(shí)候會(huì)產(chǎn)生很多的Session。參數(shù)傳遞應(yīng)該盡量通過(guò)Request。熟悉HTTP有助于更好的理解Session、Cookie、Request等的機(jī)制。\x0d\x0a\x0d\x0a3. 在帶有分頁(yè)的查詢界面,盡量不要使用POST方法來(lái)傳遞參數(shù),POST傳遞的參數(shù)在地址欄里是看不到的,刷新后會(huì)有重新提交表單的提示。使用GET方法傳遞參數(shù)要注意URL的長(zhǎng)度不能超過(guò)1K。 \x0d\x0a\x0d\x0a4. 分層應(yīng)該清晰,一般目前我們分為View(Jsp或FreeMarker加上Action)、Bean(Service)、DAO這么三層,即顯示層、業(yè)務(wù)層、數(shù)據(jù)層。記錄集ResultSet這種只能出現(xiàn)在DAO層中的對(duì)象不能出現(xiàn)在Bean(Service)層中,同樣HttpServletRequest這種只能出現(xiàn)在View層的對(duì)象也不應(yīng)出現(xiàn)在Bean(Service)層中。這并不是絕對(duì)的。 \x0d\x0a\x0d\x0a5. 盡量使用簡(jiǎn)單SQL,避免兩表以及多表聯(lián)查。多表聯(lián)查會(huì)導(dǎo)致數(shù)據(jù)庫(kù)壓力大幅增加,而且不利于在內(nèi)存中對(duì)部分記錄進(jìn)行緩存,代碼的重用性也難以提高。 \x0d\x0a\x0d\x0a6. 避免在循環(huán)里執(zhí)行findXXById這樣的方法,不如執(zhí)行一個(gè)findXXByIds這樣的方法一次性把記錄取到Map里。大部分有實(shí)際對(duì)象對(duì)應(yīng)的表應(yīng)該提供這樣一個(gè)方法。 \x0d\x0a\x0d\x0a7. 如果使用最原始的jdbc編程的話需要注意資源的正確釋放,在循環(huán)里new出來(lái)的Statement或者ResultSet就要在循環(huán)里關(guān)閉。 \x0d\x0a\x0d\x0a8. 在編寫SQL進(jìn)行查詢的時(shí)候,需要能夠判斷這個(gè)SQL是否已經(jīng)使用了索引,避免全表掃描,必要的時(shí)候增加索引。 \x0d\x0a\x0d\x0a9. 在寫一個(gè)方法前,首先查看有沒(méi)有相同功能或者很類似功能的方法已經(jīng)有了,尤其是工具類方法,往往已經(jīng)寫過(guò)了,避免重復(fù)代碼的產(chǎn)生,發(fā)現(xiàn)重復(fù)代碼及時(shí)進(jìn)行處理。如果一段代碼被重復(fù)使用兩遍或以上,那么可以考慮專門寫個(gè)方法來(lái)放這段代碼,同樣多次使用的常量也應(yīng)該專門定義出來(lái)。 \x0d\x0a\x0d\x0a10. 在一個(gè)方法里并不一定只能有一個(gè)return,如果已經(jīng)有結(jié)果了盡早return,沒(méi)必要增加嵌套的層次,那樣會(huì)導(dǎo)致代碼可讀性不佳,但也不能return太多,代碼看起來(lái)比較舒服就可以了。 \x0d\x0a\x0d\x0a11. 不要滿足于能夠熟練的編寫DAO和Bean(Service)的代碼,相比較而言,后臺(tái)如果在成熟框架的支持下,編碼是沒(méi)有太大難度的,也不值得沾沾自喜,因?yàn)檫@是對(duì)Java研發(fā)工程師基本的要求。適當(dāng)?shù)呐囵B(yǎng)一下前臺(tái)的編碼能力,學(xué)會(huì)使用Dreamweaver。不要輕視界面,也別認(rèn)為這是界面設(shè)計(jì)的事情,界面對(duì)用戶來(lái)說(shuō)就是軟件,學(xué)會(huì)編寫CSS和調(diào)整界面對(duì)你沒(méi)有壞處。 \x0d\x0a\x0d\x0a12. 非常明確Java和javascript作用的范圍,明確它們能做的事情。 \x0d\x0a\x0d\x0a13. 一般很奇怪的現(xiàn)象都是由一些低級(jí)錯(cuò)誤引起的,如果你查了一段時(shí)間也沒(méi)有結(jié)果,那么讓別人來(lái)查吧。 \x0d\x0a\x0d\x0a14. 不要用可能被修改的字段來(lái)做主鍵,那樣會(huì)讓相關(guān)記錄的更新成為一個(gè)大麻煩。 \x0d\x0a\x0d\x0a15. 如果被迫使用Hibernate和jdbc混合操作數(shù)據(jù)庫(kù)的話,不要用Hibernate來(lái)做復(fù)雜查詢和統(tǒng)計(jì)。Hibernate用的不好的話,帶來(lái)的便利是非常有限的。 \x0d\x0a\x0d\x0a16. 數(shù)據(jù)庫(kù)中經(jīng)常被讀取,但是很少修改的話,應(yīng)該把這樣的數(shù)據(jù)讀到內(nèi)存中用OSCache之類的緩存起來(lái),然后定期或者觸發(fā)的去更新,有助于減少讀數(shù)據(jù)庫(kù)次數(shù),提升性能。 \x0d\x0a\x0d\x0a17. 編碼的時(shí)候應(yīng)該注意部署環(huán)境帶來(lái)的影響,這種影響包括操作系統(tǒng)不同帶來(lái)路徑的差異;應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器之間時(shí)間的差異;外網(wǎng)可能部署在多臺(tái)服務(wù)器上,放到Session里的對(duì)象因?yàn)樾枰獜?fù)制所以要實(shí)現(xiàn)java.io.Serializable接口等。 \x0d\x0a\x0d\x0a18. 盡量不要在jsp上編寫太多代碼,保持jsp的整潔很重要,用Dreamweaver打開不至于一塌糊涂,根本看不出來(lái)這是個(gè)什么界面。 \x0d\x0a\x0d\x0a19. 目前我們的項(xiàng)目一般都使用Spring來(lái)管理數(shù)據(jù)庫(kù)事務(wù),而且一般都配置在Bean(Service)即業(yè)務(wù)層這一層,應(yīng)該注意要保持事務(wù)的完整性,不要把一些應(yīng)該放在一起的操作分散在Action這一層。相關(guān)的更新操作可以認(rèn)為是一個(gè)事務(wù),比如:增加一個(gè)家長(zhǎng),同時(shí)更新學(xué)生是否有家長(zhǎng)的字段。 \x0d\x0a\x0d\x0a20. 在Spring的配置中,對(duì)于有些需要保持獨(dú)立事務(wù)的方法操作,比如生成主鍵等,應(yīng)該聲明該方法為獨(dú)立事務(wù)ROPAGATION_REQUIRES_NEW。Bean(Service)里如果拋出checked exception,事務(wù)默認(rèn)是不會(huì)回滾的,需要加以聲明,比如PROPAGATION_REQUIRED,-PassportException。 \x0d\x0a\x0d\x0a21. 在一個(gè)Bean(Service)中引用其他Bean(Service)的時(shí)候盡量引用Bean(Service),而不是DAO。因?yàn)槠渌腂ean(Service)往往封裝DAO的操作后,又做了進(jìn)一步的完善,比如增加校驗(yàn)等,所以應(yīng)該重用這些方法,而不必要去引用DAO的方法來(lái)重寫這些操作。 \x0d\x0a\x0d\x0a22. 至少在Bean(Service)的接口定義上增加注釋,方便他人引用你寫的方法。 \x0d\x0a\x0d\x0a23. 好好利用集合框架里的Map、List、Set。尤其是HashMap、ArrayList、HashSet用的最多,這些類是多條數(shù)據(jù)操作的基礎(chǔ),它們都不是線程安全的。 \x0d\x0a\x0d\x0a24. 現(xiàn)在跑的快的頁(yè)面,隨著數(shù)據(jù)量的增加,可能會(huì)變的很慢,所以應(yīng)該意識(shí)到頁(yè)面可能變慢的原因,而不是現(xiàn)在看起來(lái)很快。影響速度的大部分原因是對(duì)數(shù)據(jù)庫(kù)的壓力太大了,在java代碼執(zhí)行上花費(fèi)很多時(shí)間的情況是不常見的。 \x0d\x0a\x0d\x0a25. 避免不必要的跳轉(zhuǎn),如果頁(yè)面執(zhí)行的足夠快,那么中間的載入進(jìn)度提示頁(yè)是不必要的,那樣會(huì)讓用戶覺(jué)得閃爍。 \x0d\x0a\x0d\x0a26. 注意頁(yè)面的文件大小,并不是每個(gè)用戶的帶寬都是非常理想的,文件小一點(diǎn),速度快一點(diǎn),總是感覺(jué)更好一點(diǎn)。 \x0d\x0a\x0d\x0a27. 不要去修改用戶的瀏覽器,比如隱藏他們的地址欄、菜單、右鍵菜單等,這可能會(huì)引起部分用戶的反感。盡量不要使用彈出窗口,可能會(huì)被攔截。 \x0d\x0a\x0d\x0a28. 網(wǎng)站的權(quán)限控制至少應(yīng)該保證有訪問(wèn)權(quán)限的用戶才能訪問(wèn)頁(yè)面,通過(guò)隱藏鏈接之類的方法是很不安全的,用戶看不見了并不表示安全了。權(quán)限的控制盡量使用框架里的攔截器這樣的機(jī)制,而不是把權(quán)限控制代碼寫的到處都是。過(guò)濾器不宜過(guò)多的使用,不僅因?yàn)檫^(guò)濾器的作用范圍很難控制,而且容易引起頁(yè)面執(zhí)行效果的混亂,錯(cuò)誤不易排查。 \x0d\x0a\x0d\x0a29. 頁(yè)面里大部分情況使用相對(duì)路徑,保持Action路徑層次和頁(yè)面一致,這樣應(yīng)用就可以發(fā)布在各種目錄下。
自學(xué)Java開發(fā)注意事項(xiàng),Java作為一門語(yǔ)言,必然有他的語(yǔ)法規(guī)則。學(xué)習(xí)編程語(yǔ)言的關(guān)鍵之一就是學(xué)好語(yǔ)法規(guī)則,寫作合乎語(yǔ)法規(guī)則的語(yǔ)句,控制計(jì)算機(jī)完成各種任務(wù)。java語(yǔ)言在眾多開發(fā)者心目中就像是一把“利器”,同時(shí)它也是目前IT界流行的面向?qū)ο蟮木幊陶Z(yǔ)言。
1、自學(xué)Java技術(shù)多動(dòng)手
學(xué)編程語(yǔ)言不僅僅是從理論上的學(xué)習(xí),更重要的是要利用這門語(yǔ)言為你的思想服務(wù)。理解這門語(yǔ)言是首要的,但是要達(dá)到心領(lǐng)神會(huì)、融會(huì)貫通就必須勤動(dòng)手,多去時(shí)間,多編一些例子。計(jì)算機(jī)科學(xué)是注重實(shí)踐的學(xué)科,成功的軟件開發(fā)人員無(wú)不經(jīng)過(guò)大量的上機(jī)鍛煉,只有理論和實(shí)踐相結(jié)合才能真正掌握只是和技能。
2、自學(xué)Java技術(shù)多動(dòng)腦
對(duì)于Java語(yǔ)言的學(xué)習(xí),不僅僅是對(duì)語(yǔ)言本身的學(xué)習(xí),更重要的是面向?qū)ο笏枷氲暮?jiǎn)歷過(guò)程,如果想把Java學(xué)習(xí)提升到一個(gè)更高的層次,Java私塾建議從一開始就用面向?qū)ο蟮乃季S方式去面對(duì)你所接觸的每件事。
3、自學(xué)Java技術(shù)多查API文檔
Java提供了大量的類以滿足網(wǎng)絡(luò)化、多線程、面向?qū)ο蟮男枰?。這就是J2SEAPI,它是Java編程的基本方法,也是編程過(guò)程中所不斷利用的資源。Java的學(xué)習(xí)過(guò)程不僅僅是基本語(yǔ)法的學(xué)習(xí),更多的是去學(xué)習(xí)和掌握它所提供的API類庫(kù)。對(duì)于所接觸到的類,方法,都去仔細(xì)去閱讀文檔的說(shuō)明,再用自己編寫的實(shí)例去此時(shí)一下。
4、自學(xué)Java技術(shù)約束自己,規(guī)范編碼習(xí)慣
養(yǎng)成良好的編碼習(xí)慣對(duì)于一個(gè)程序員來(lái)講具有相當(dāng)大的意義。一方面良好的編程習(xí)慣對(duì)于減少編碼過(guò)程中一些人為的錯(cuò)誤能起到主動(dòng)避免的作用;另一方面一段程序?qū)懙暮脡?,不僅僅是功能上的實(shí)現(xiàn),更主要的是可讀性,可維護(hù)性,沒(méi)有任何人愿意去閱讀一段沒(méi)有順序,雜亂無(wú)章的代碼。建議大家在編碼的時(shí)候要時(shí)刻想到:如果這段代碼給別人看,別人是否看得懂,條理是否清楚。
5、自學(xué)Java技術(shù)用有意義的名字
名字,是一個(gè)標(biāo)識(shí),是一種有內(nèi)涵的簡(jiǎn)單表述。在編寫程序的過(guò)程中,為每個(gè)類、每個(gè)方法起一個(gè)有意義的名字。在程序閱讀的過(guò)程中,看到這個(gè)名字就可以知道她多完成的功能。
6、自學(xué)Java技術(shù)添加適量的注釋
注釋不僅僅是對(duì)程序邏輯處理的一種注釋,更多的是提高了程序的可讀性和可維護(hù)性。做為一個(gè)軟件產(chǎn)品,哪怕只是一個(gè)小小的功能的實(shí)現(xiàn),其中不同的變量及方法可能很多,雖然在命名的過(guò)程中要使用有意義的名字,但也不能完全涵蓋變量及方法的功能及內(nèi)涵,多為了提高程序的可讀性,添加一定的注釋是非常有必要的。合理的注釋不僅能起到美化程序的作用還能提高程序可讀性和維護(hù)性。
7、自學(xué)Java技術(shù)相信自己
相信自己包括兩方面,一是相信自己的能力,二是相信自己的答案。相信自己的能力就是要相信自己具有解決問(wèn)題的能力。一個(gè)程序員的好壞并不是直接決定于是否能編寫出好的代碼,更重要的是能否自己去解決調(diào)試過(guò)程中遇到的任何問(wèn)題,很少有一個(gè)程序員寫出的代碼一次成功,只有在不斷的調(diào)試,修正中才能編寫出真正的好代碼。調(diào)試、解決問(wèn)題的過(guò)程就是自己學(xué)習(xí)提高的過(guò)程。對(duì)于不同的問(wèn)題在不同的資料上可能有不同的答案,就像小馬過(guò)河一樣,不同的人可能有不同的答案,所以不要去盲目的相信任何人,要相信自己。
免責(zé)聲明:內(nèi)容來(lái)源于公開網(wǎng)絡(luò),若涉及侵權(quán)聯(lián)系盡快刪除!