開(kāi)發(fā)過(guò)程需要注意的問(wèn)題有下面這些:1. 服務(wù)器端必須提供輸入數據正確性的驗證,客戶(hù)端的Javascript驗證可以沒(méi)有。
這是基于安全性的考慮,因為Javascript是很容易被繞過(guò)的,增加客戶(hù)端驗證只是為了減少服務(wù)器壓力、界面更加容易使用。 2. 適度使用Session,盡量不要在Session里放很大的集合對象,以免內存消耗過(guò)大,因為很多用戶(hù)訪(fǎng)問(wèn)的時(shí)候會(huì )產(chǎn)生很多的Session。
參數傳遞應該盡量通過(guò)Request。熟悉HTTP有助于更好的理解Session、Cookie、Request等的機制。
3. 在帶有分頁(yè)的查詢(xún)界面,盡量不要使用POST方法來(lái)傳遞參數,POST傳遞的參數在地址欄里是看不到的,刷新后會(huì )有重新提交表單的提示。使用GET方法傳遞參數要注意URL的長(cháng)度不能超過(guò)1K。
4. 分層應該清晰,一般目前我們分為View(Jsp或FreeMarker加上Action)、Bean(Service)、DAO這么三層,即顯示層、業(yè)務(wù)層、數據層。記錄集ResultSet這種只能出現在DAO層中的對象不能出現在Bean(Service)層中,同樣HttpServletRequest這種只能出現在View層的對象也不應出現在Bean(Service)層中。
這并不是絕對的。 5. 盡量使用簡(jiǎn)單SQL,避免兩表以及多表聯(lián)查。
多表聯(lián)查會(huì )導致數據庫壓力大幅增加,而且不利于在內存中對部分記錄進(jìn)行緩存,代碼的重用性也難以提高。 6. 避免在循環(huán)里執行findXXById這樣的方法,不如執行一個(gè)findXXByIds這樣的方法一次性把記錄取到Map里。
大部分有實(shí)際對象對應的表應該提供這樣一個(gè)方法。 7. 如果使用最原始的jdbc編程的話(huà)需要注意資源的正確釋放,在循環(huán)里new出來(lái)的Statement或者ResultSet就要在循環(huán)里關(guān)閉。
8. 在編寫(xiě)SQL進(jìn)行查詢(xún)的時(shí)候,需要能夠判斷這個(gè)SQL是否已經(jīng)使用了索引,避免全表掃描,必要的時(shí)候增加索引。 9. 在寫(xiě)一個(gè)方法前,首先查看有沒(méi)有相同功能或者很類(lèi)似功能的方法已經(jīng)有了,尤其是工具類(lèi)方法,往往已經(jīng)寫(xiě)過(guò)了,避免重復代碼的產(chǎn)生,發(fā)現重復代碼及時(shí)進(jìn)行處理。
如果一段代碼被重復使用兩遍或以上,那么可以考慮專(zhuān)門(mén)寫(xiě)個(gè)方法來(lái)放這段代碼,同樣多次使用的常量也應該專(zhuān)門(mén)定義出來(lái)。 10. 在一個(gè)方法里并不一定只能有一個(gè)return,如果已經(jīng)有結果了盡早return,沒(méi)必要增加嵌套的層次,那樣會(huì )導致代碼可讀性不佳,但也不能return太多,代碼看起來(lái)比較舒服就可以了。
11. 不要滿(mǎn)足于能夠熟練的編寫(xiě)DAO和Bean(Service)的代碼,相比較而言,后臺如果在成熟框架的支持下,編碼是沒(méi)有太大難度的,也不值得沾沾自喜,因為這是對Java研發(fā)工程師基本的要求。適當的培養一下前臺的編碼能力,學(xué)會(huì )使用Dreamweaver。
不要輕視界面,也別認為這是界面設計的事情,界面對用戶(hù)來(lái)說(shuō)就是軟件,學(xué)會(huì )編寫(xiě)CSS和調整界面對你沒(méi)有壞處。 12. 非常明確Java和javascript作用的范圍,明確它們能做的事情。
13. 一般很奇怪的現象都是由一些低級錯誤引起的,如果你查了一段時(shí)間也沒(méi)有結果,那么讓別人來(lái)查吧。 14. 不要用可能被修改的字段來(lái)做主鍵,那樣會(huì )讓相關(guān)記錄的更新成為一個(gè)大麻煩。
15. 如果被迫使用Hibernate和jdbc混合操作數據庫的話(huà),不要用Hibernate來(lái)做復雜查詢(xún)和統計。Hibernate用的不好的話(huà),帶來(lái)的便利是非常有限的。
16. 數據庫中經(jīng)常被讀取,但是很少修改的話(huà),應該把這樣的數據讀到內存中用OSCache之類(lèi)的緩存起來(lái),然后定期或者觸發(fā)的去更新,有助于減少讀數據庫次數,提升性能。 17. 編碼的時(shí)候應該注意部署環(huán)境帶來(lái)的影響,這種影響包括操作系統不同帶來(lái)路徑的差異;應用服務(wù)器和數據庫服務(wù)器之間時(shí)間的差異;外網(wǎng)可能部署在多臺服務(wù)器上,放到Session里的對象因為需要復制所以要實(shí)現java.io.Serializable接口等。
18. 盡量不要在jsp上編寫(xiě)太多代碼,保持jsp的整潔很重要,用Dreamweaver打開(kāi)不至于一塌糊涂,根本看不出來(lái)這是個(gè)什么界面。 19. 目前我們的項目一般都使用Spring來(lái)管理數據庫事務(wù),而且一般都配置在Bean(Service)即業(yè)務(wù)層這一層,應該注意要保持事務(wù)的完整性,不要把一些應該放在一起的操作分散在A(yíng)ction這一層。
相關(guān)的更新操作可以認為是一個(gè)事務(wù),比如:增加一個(gè)家長(cháng),同時(shí)更新學(xué)生是否有家長(cháng)的字段。 20. 在Spring的配置中,對于有些需要保持獨立事務(wù)的方法操作,比如生成主鍵等,應該聲明該方法為獨立事務(wù)ROPAGATION_REQUIRES_NEW。
Bean(Service)里如果拋出checked exception,事務(wù)默認是不會(huì )回滾的,需要加以聲明,比如PROPAGATION_REQUIRED,-PassportException。 21. 在一個(gè)Bean(Service)中引用其他Bean(Service)的時(shí)候盡量引用Bean(Service),而不是DAO。
因為其他的Bean(Service)往往封裝DAO的操作后,又做了進(jìn)一步的完善,比如增加校驗等,所以應該重用這些方法,而不必要去引用DAO的方法來(lái)重寫(xiě)這些操作。 22. 至少在Bean(Service)的接口定義上增加注釋?zhuān)奖闼艘媚銓?xiě)的方法。
23. 好好利用集合框架里的Map、List、Set。尤其是HashMap、ArrayList、HashSet用的最多,這些類(lèi)是多條數據操作的基礎,它們都不是線(xiàn)程安全的。
24. 現在跑的快的頁(yè)面,隨著(zhù)數據量的增加,可能會(huì )變的很慢,所以應該意識到頁(yè)面可能變慢的原因。
自己和別人思路的差異。
2。初學(xué)者請不要看太多太多的書(shū)那會(huì )誤人子弟的,先找本系統的學(xué),很多人用了很久都是只對部分功能熟悉而已,不系統還是不夠的。
3。看幫助,不要因為很難而自己是初學(xué)者所以就不看;幫助永遠是最好的參考手冊,雖然幫助的文字有時(shí)候很難看懂,總覺(jué)得不夠直觀(guān)。
4。不要被對象、屬性、方法等詞匯所迷惑;最根本的是先了解最基礎知識。
5。不要放過(guò)任何一個(gè)看上去很簡(jiǎn)單的小問(wèn)題--他們往往并不那么簡(jiǎn)單,或者可以引伸出很多知識點(diǎn);不會(huì )舉一反三你就永遠學(xué)不會(huì )。
6。知道一點(diǎn)東西,并不能說(shuō)明你會(huì )寫(xiě)腳本,腳本是需要經(jīng)驗積累的。
7。學(xué)腳本并不難,JSP、ASP、PHP等等也不過(guò)如此--難的是長(cháng)期堅持實(shí)踐和不遺余力的博覽群書(shū); 8。
看再多的書(shū)是學(xué)不全腳本的,要多實(shí)踐 9。把時(shí)髦的技術(shù)掛在嘴邊,還不如把過(guò)時(shí)的技術(shù)記在心里; 10。
學(xué)習腳本最好的方法之一就是多練習; 11。 在任何時(shí)刻都不要認為自己手中的書(shū)已經(jīng)足夠了; 12。
看得懂的書(shū),請仔細看;看不懂的書(shū),請硬著(zhù)頭皮看; 13。別指望看第一遍書(shū)就能記住和掌握什么——請看第二遍、第三遍; 14。
請把書(shū)上的例子親手到電腦上實(shí)踐,即使配套光盤(pán)中有源文件; 15。 把在書(shū)中看到的有意義的例子擴充;并將其切實(shí)的運用到自己的工作中; 16。
不要漏掉書(shū)中任何一個(gè)練習——請全部做完并記錄下思路; 17。當你用腳本到一半卻發(fā)現自己用的方法很拙劣時(shí),請不要馬上停手;請盡快將余下的部分粗略的完成以保證這個(gè)代碼的完整性,然后分析自己的錯誤并重新編寫(xiě)和工作。
18。別心急,寫(xiě)腳本確實(shí)不容易;水平是在不斷的實(shí)踐中完善和發(fā)展的; 19。
每學(xué)到一個(gè)腳本難點(diǎn)的時(shí)候,嘗試著(zhù)對別人講解這個(gè)知識點(diǎn)并讓他理解----你能講清楚才說(shuō)明你真的理解了; 20。記錄下在和別人交流時(shí)發(fā)現的自己忽視或不理解的知識點(diǎn); 21。
保存好你做過(guò)的所有的源文件----那是你最好的積累之一; 22。對于網(wǎng)絡(luò ),還是希望大家能多利用一下,很多問(wèn)題不是非要到論壇來(lái)問(wèn)的,首先你要學(xué)會(huì )自己找答案,比如google、百度都是很好的搜索引擎,你只要輸入關(guān)鍵字就能找到很多相關(guān)資料,別老是等待別人給你希望,看的出你平時(shí)一定也很懶! 23,到一個(gè)論壇,你學(xué)會(huì )去看以前的帖子,不要什么都不看就發(fā)帖子問(wèn),也許你的問(wèn)題早就有人問(wèn)過(guò)了,你再問(wèn),別人已經(jīng)不想再重復了,做為初學(xué)者,誰(shuí)也不希望自己的帖子沒(méi)人回的。
24,雖然不是打擊初學(xué)者,但是這句話(huà)還是要說(shuō):論壇論壇,就是大家討論的地方,如果你總期望有高手總無(wú)償指點(diǎn)你,除非他是你親戚!!討論者,起碼是水平相當的才有討論的說(shuō)法,如果水平真差距太遠了,連基本操作都需要別人給解答,誰(shuí)還跟你討論呢。 浮躁的人容易問(wèn):我到底該學(xué)什么;----別問(wèn),學(xué)就對了; 浮躁的人容易問(wèn):Js有錢(qián)途嗎;----建議你去搶銀行; 浮躁的人容易說(shuō):我要中文版!我英文不行!----不行?學(xué)呀! 浮躁的人分兩種:只觀(guān)望而不學(xué)的人;只學(xué)而不堅持的人; 浮躁的人永遠不是一個(gè)高手。
一、J2ME中需要的Java基礎知識 現在有大部分人,都是從零開(kāi)始學(xué)J2ME的,學(xué)習J2ME的時(shí)候,總是從Java基礎開(kāi)始學(xué)習,而且現在講Java基礎的書(shū)籍中都是以J2SE來(lái)講基礎,這就給學(xué)習造成了一些不必要的麻煩,下面將J2ME中用到的和不需要的Java基礎知識做一個(gè)簡(jiǎn)單的說(shuō)明。
J2ME中使用到的Java基礎知識: 1、Java語(yǔ)法基礎:包括基本數據類(lèi)型、關(guān)鍵字、運算符等等 2、面向對象的思想:類(lèi)和對象的概念,繼承和多態(tài)等等。 3、異常處理 4、多線(xiàn)程 J2ME中沒(méi)有用到的Java基礎知識: 1、JDK中javac和java命令的使用 2、Java基礎中的很多類(lèi)在J2ME中沒(méi)有,或者類(lèi)中的方法做了大量的精簡(jiǎn)。
所以建議在J2ME中熟悉類(lèi)庫。 3、Applet、AWT、Swing這些知識在J2ME中根本使用不到。
簡(jiǎn)單說(shuō)這么多,希望學(xué)J2ME的朋友們能少走一些彎路,不足之處希望大家積極指正和補充。 二、J2ME中暫時(shí)無(wú)法完成的功能 列一些J2ME中暫時(shí)無(wú)法完成的功能,希望大家能積極補充: 1、在手機中不更改代碼實(shí)現移植,主要指游戲。
2、動(dòng)態(tài)修改按鈕文字。 3、在Canvas上接受中文輸入。
4、操作本地資源、例如地址本、已收短信息等。 5、制作破壞性的手機病毒。
6、其他等待大家來(lái)補充。
Java的線(xiàn)程編程非常簡(jiǎn)單。
但有時(shí)會(huì )看到一些關(guān)于線(xiàn)程的錯誤用法。下面列出一些應該注意的問(wèn)題。
1.同步對象的恒定性 All java objects are references。 對于局部變量和參數來(lái)說(shuō),java里面的int, float, double, boolean等基本數據類(lèi)型,都在棧上。
這些基本類(lèi)型是無(wú)法同步的;java里面的對象(根對象是Object),全都在堆里,指向對象的reference在棧上。 java中的同步對象,實(shí)際上是對于reference所指的“對象地址”進(jìn)行同步。
需要注意的問(wèn)題是,千萬(wàn)不要對同步對象重新賦值。 舉個(gè)例子。
class A implements Runnable { Object lock = new Object(); void run() { for(。
) { synchronized(lock) { // do something 。
lock = new Object(); } } } } run函數里面的這段同步代碼實(shí)際上是毫無(wú)意義的。因為每一次lock都給重新分配了新的對象的reference,每個(gè)線(xiàn)程都在新的reference同步。
大家可能覺(jué)得奇怪,怎么會(huì )舉這么一個(gè)例子。 因為我見(jiàn)過(guò)這樣的代碼,同步對象在其它的函數里被重新賦了新值。
這種問(wèn)題很難查出來(lái)。所以,一般應該把同步對象聲明為final。
final Object lock = new Object(); 使用Singleton Pattern 設計模式來(lái)獲取同步對象,也是一種很好的選擇。 2.如何放置共享數據 實(shí)現線(xiàn)程,有兩種方法,一種是繼承Thread類(lèi),一種是實(shí)現Runnable接口。
上面舉的例子,采用實(shí)現Runnable接口的方法。本文推薦這種方法。
首先,把需要共享的數據放在一個(gè)實(shí)現Runnable接口的類(lèi)里面,然后,把這個(gè)類(lèi)的實(shí)例傳給多個(gè)Thread的構造方法。 這樣,新創(chuàng )建的多個(gè)Thread,都共同擁有一個(gè)Runnable實(shí)例,共享同一份數據。
如果采用繼承Thread類(lèi)的方法,就只好使用static靜態(tài)成員了。如果共享的數據比較多,就需要大量的static靜態(tài)成員,令程序數據結構混亂,難以擴展。
這種情況應該盡量避免。 編寫(xiě)一段多線(xiàn)程代碼,處理一個(gè)稍微復雜點(diǎn)的問(wèn)題。
兩種方法的優(yōu)劣,一試便知。 3.同步的粒度 線(xiàn)程同步的粒度越小越好,即,線(xiàn)程同步的代碼塊越小越好。
盡量避免用synchronized修飾符來(lái)聲明方法。盡量使用synchronized(anObject)的方式,如果不想引入新的同步對象,使用synchronized(this)的方式。
而且,synchronized代碼塊越小越好。 4.線(xiàn)程之間的通知 這里使用“通知”這個(gè)詞,而不用“通信”這個(gè)詞,是為了避免詞義的擴大化。
線(xiàn)程之間的通知,通過(guò)Object對象的wait()和notify() 或notifyAll() 方法實(shí)現。 下面用一個(gè)例子,來(lái)說(shuō)明其工作原理: 假設有兩個(gè)線(xiàn)程,A和B。
共同擁有一個(gè)同步對象,lock。 1.首先,線(xiàn)程A通過(guò)synchronized(lock) 獲得lock同步對象,然后調用lock。
wait()函數,放棄lock同步對象,線(xiàn)程A停止運行,進(jìn)入等待隊列。 2.線(xiàn)程B通過(guò)synchronized(lock) 獲得線(xiàn)程A放棄的lock同步對象,做完一定的處理,然后調用 lock。
notify() 或者lock。notifyAll() 通知等待隊列里面的線(xiàn)程A。
3.線(xiàn)程A從等待隊列里面出來(lái),進(jìn)入ready隊列,等待調度。 4.線(xiàn)程B繼續處理,出了synchronized(lock)塊之后,放棄lock同步對象。
5.線(xiàn)程A獲得lock同步對象,繼續運行。
1、不要排斥新技術(shù)和新工具。
Android Studio 1.0 之后的版本,基本已經(jīng)穩定到可以支持正常的工作開(kāi)發(fā)的程度了。單純就書(shū)寫(xiě)效率而言,Android Studio 帶來(lái)的好處絕對大于它和Gradle的學(xué)習成本。
JetBrains的IDE,用過(guò)都說(shuō)好。還有就是適當的提升targetSdkVer… 顯示全部 1、不要排斥新技術(shù)和新工具。
Android Studio 1.0 之后的版本,基本已經(jīng)穩定到可以支持正常的工作開(kāi)發(fā)的程度了。單純就書(shū)寫(xiě)效率而言,Android Studio 帶來(lái)的好處絕對大于它和Gradle的學(xué)習成本。
JetBrains的IDE,用過(guò)都說(shuō)好。 還有就是適當的提升targetSdkVersion到新版本。
2、代碼設計方面的問(wèn)題,大部分都能在A(yíng)ndroid系統源碼里找到解決方案。 當你想設計一個(gè)新模塊,或者實(shí)現一個(gè)新ui組件的時(shí)候,應該采用哪些設計模式、應該以哪種形式給外界提供接口之類(lèi)的問(wèn)題,大部分都可以參考Android系統的源碼,找到實(shí)現方式。
Google為安卓程序員提供了一座現成的寶庫。 3、理解Android和Java內存管理方式,至少要理解垃圾回收和Java的引用。
就好比學(xué)OC就要先理解黃金法則一樣,而java的內存管理,其實(shí)比OC要好理解多了。 這可能會(huì )幫助你大大減少程序異步操作產(chǎn)生的空指針崩潰。
也會(huì )幫助你理解為什么濫用單例模式會(huì )導致內存的臃腫。還會(huì )幫助你養成不用“+”去連接超大字符串的好習慣。
4、ContentProvider并不是只有在跨進(jìn)程共享數據的才有用,把數據庫表映射到一個(gè)獨立的uri是Google鼓勵的實(shí)現方式。 從設計上講,用uri(統一資源標識符)去描述數據,肯定比sql語(yǔ)句要理想。
從效果上講,用CursorLoader讀取數據是讓iOS程序員都羨慕不已的事情,作為android程序員,何苦不用呢。 5、理解Activity任務(wù)棧。
非Activity的Context對象如果直接啟動(dòng)Activity會(huì )報錯,這只是一個(gè)表面現象,真正起作用的其實(shí)是Activity任務(wù)棧機制。 理解Activity任務(wù)棧機制以及Activity的各種啟動(dòng)方式,會(huì )幫助解決大部分頁(yè)面關(guān)系錯亂問(wèn)題,以及應用互相掉起、任務(wù)欄進(jìn)入應用、后臺彈窗引起的各種問(wèn)題。
6、對于一些奇葩的第三方ROM,調用其非主流api的時(shí)候,可以使用反射。 在適配一些第三方ROM的的時(shí)候,調用一些在開(kāi)發(fā)環(huán)境中沒(méi)有,但在運行環(huán)境中有的方法時(shí),可以使用反射。
比方說(shuō),華為雙卡手機可能會(huì )提供獲取第二塊SIM卡信息的api,如果直接調用,在開(kāi)發(fā)環(huán)境可能無(wú)法通過(guò)正常編譯,用反射就沒(méi)問(wèn)題。這屬于不得已而用反射的一種情況。
7、SQLite的鎖,是數據庫級別的鎖,也就是說(shuō)同一個(gè)數據庫的寫(xiě)操作無(wú)法并發(fā)執行。 所以,在數據庫設計的時(shí)候,如果表太多,盡量將沒(méi)有關(guān)聯(lián)的表拆到多個(gè)數據庫文件中。
8、Bitmap的內存占用問(wèn)題。 這是一個(gè)困擾2.X時(shí)代android程序員的問(wèn)題。
2.X時(shí)代Bitmap對象雖然存儲在堆內存中,但是用了一個(gè)byte數組存儲其像素信息。通過(guò)計數器來(lái)記錄該像素信息被引用的個(gè)數。
有人認為這個(gè)byte數組在native堆中,但事實(shí)上它也在堆中。 只有在使用者調用recycle()后,Bitmap對象才會(huì )釋放像素信息,才會(huì )在失去引用后,被垃圾回收機制銷(xiāo)毀。
再加上DVM的heap size有嚴格的閥值,所以在使用大量圖片資源的時(shí)候,及其容易發(fā)生OOM。 解決辦法一般都是,用一個(gè)哈希表存儲Bitmap對象的軟引用,作為內存緩存,并在適當時(shí)機掉用其recycle()。
3.0以上版本Bitmap對象可以通過(guò)垃圾回收機制完全銷(xiāo)毀,理論上不用再調用recycle()。
用java進(jìn)行移動(dòng)端后臺開(kāi)發(fā)方法:
第一種:可以選擇用Java EE的編程結構去編寫(xiě),需要把HTML的界面轉換成其他的數據,例如json、xml,二者選擇其中一個(gè)即可。
第二種:通過(guò)tomact的網(wǎng)絡(luò )服務(wù)器使用httpurlconnection,客戶(hù)端與后臺建立通訊,直接用socket進(jìn)行連接。
第三種:全能型的編程人員可以用前端經(jīng)常使用的HTML5、css、JavaScript相結合進(jìn)行開(kāi)發(fā)。
注意點(diǎn):
Java web后臺開(kāi)發(fā)跟手機app后臺開(kāi)發(fā)原理相同,主要不同點(diǎn)在于app的后臺開(kāi)發(fā)和web的傳輸數據格式有差異。
安裝后需要配置好環(huán)境變量~安裝MyEclipse的話(huà),自帶的有JDK。
這里我說(shuō)說(shuō)怎么自己配置環(huán)境吧,步驟如下(舉例你把JDK安裝在D:/jdk1.6里面):右擊我的電腦,選擇“屬性”;選擇“高級”選項卡,點(diǎn)擊“環(huán)境變量”;在系統變量里面添加“JAVA_HOME”這個(gè)變量,變量值為JDK安裝路徑,此路徑下包括lib,bin,jre等文件夾,如“D:/jdk1.6”;添加Path這個(gè)變量,使得系統可以在任何路徑下識別java命令,變量值設為:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin添加CLASSPATH這個(gè)變量,這個(gè)變量為java加載類(lèi)(classorlib)路徑,只有類(lèi)在classpath中,java命令才能識別,變量值設為:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意前面要加“.”,表示當前路徑)。
1. 為Activity聲明系統配置變更事件系統配置變更事件是指轉屏,區域語(yǔ)言發(fā)生變化,屏幕尺寸發(fā)生變化等等,如果Activity沒(méi)有聲明處理這些事件,發(fā)生事件時(shí),系統會(huì )把Activity殺掉然后重啟,并嘗試恢復狀態(tài),Activity有機會(huì )通過(guò)onSaveInstanceState()保存一些基本數據到Bundle中,然后此Bundle會(huì )在A(yíng)ctivity的onCreate()中傳遞過(guò)去。
雖然這貌似正常,但是這會(huì )引發(fā)問(wèn)題,因為很多其他的東西比如Dialog等是要依賴(lài)于具體Activity實(shí)例的。所以這種系統默認行為通常都不是我們想要的。
為了避免這些系統默認行為,就需要為Activity聲明這些配置,如下二個(gè)是每個(gè)Activity必須聲明的:幾乎所有的Activity都要聲明如上,為什么Android不把它們變成Default的呢?2. 盡量使用Android的API這好像是廢話(huà),在A(yíng)ndroid上面開(kāi)發(fā)不用Android API用什么?因為Android幾乎支持Java SE所有的API,所以有很多地方Android API與Java SE的API會(huì )有重復的地方,比如說(shuō)對于文件的操作最好使用Android里面Context封裝的API,而不要直接使用File對象:Context.openFileOutput(String); // no File file = new File(String)原因就是API里面會(huì )考慮到Android平臺本身的特性;再如,少用Thread,而多使用AsyncTask等。3. 要考慮到Activity和進(jìn)程被殺掉的情況如了通常情況退出Activity外,還有Activity因其他原因被殺的情況,比如系統內存過(guò)低,系統配置變更,有異常等等,要考慮和測試這種情況,特別是Activity處理重要的數據時(shí),做好的數據的保存。
4. 小心多語(yǔ)言有些語(yǔ)言真的很啰嗦,中文或英文很簡(jiǎn)短就能表達的事情到了其他語(yǔ)言就變的死長(cháng)死長(cháng)的,所以如果是wrap_content就可能把其他控制擠出可視范圍; 如果是指定長(cháng)度就可能顯示不全。也要注意特殊語(yǔ)言比如那些從右向左讀的語(yǔ)言。
5. 不要用四大組件去實(shí)現接口一是組件的對象都比較大,實(shí)現接口比較浪費,而且讓代碼更不易讀和理解; 另外更重要的是導致多方引用,可能會(huì )引發(fā)內存泄露。6. 用getApplication()來(lái)取Context當參數對于需要使用Context對象作為參數的函數,要使用getApplication()獲取Context對象當參數,而不要使用this,除非你需要特定的組件實(shí)例!getApplication()返回的Context是屬于A(yíng)pplication的,它會(huì )在整個(gè)應用的生命周期內存在,遠大于某個(gè)組件的生命周期,所以即使某個(gè)引用長(cháng)期持有Context對象也不會(huì )引發(fā)內存泄露。
7. 主線(xiàn)程只做UI控制和Frameworks回調相關(guān)的事。附屬線(xiàn)程只做費時(shí)的后臺操作。
交互只通過(guò)Handler。這樣就可以避免大量的線(xiàn)程問(wèn)題。
8. Frameworks的回調不要做太多事情僅做必要的初始化,其他不是很重要的事情可以放到其他線(xiàn)程中去做,或者用Handler Schedule到稍后再做。9. 要考慮多分辨率至少為hdpi, mdpi, ldpi準備圖片和布局。
元素的單位也盡可能的使用dip而不要用px。10. 利用Android手機的硬鍵幾乎所有的Android手機都有BACK和MENU,它們的作用是返回和彈出菜單,所以就不要再在UI中設計返回按扭和菜單按扭。
很多優(yōu)秀的應用如隨手記和微信都有返回鍵,他們之所以有是因為他們都是從iOS上移植過(guò)來(lái)的,為了保存體驗的一致,所以也有了返回和菜單。但這不夠Android化,一個(gè)純正的Android是沒(méi)有必須重復硬鍵的功能的。
首先否認你上述的這幾點(diǎn):
1.打字速度:
每分鐘寫(xiě)多少字母。 不代表開(kāi)發(fā)效率呢。 開(kāi)發(fā)工作是需要結合需求的、不是一通亂寫(xiě)、寫(xiě)代碼不像打字員、基礎包都是有聯(lián)想功能的.. 比如String 只需要st。 后面的就給你聯(lián)想出來(lái)了,等。
2、不會(huì )所謂的數據結構和算法能立足嗎?
既然是JAVA小白、基礎數據結構還是要清楚的、比如(string,int,object。)深層次無(wú)需知道了、這種級別也接觸不到。算法。 對邏輯實(shí)現還是很有幫助的。常用簡(jiǎn)單的比如排序算法。 不過(guò)簡(jiǎn)單點(diǎn)的,數組都提供了排序的方法。其它看實(shí)際情況分析了。
總結下:新入職的java小白需要注意的點(diǎn)(開(kāi)發(fā)層面的)
1、代碼整潔
2、注釋清晰
3、按照java開(kāi)發(fā)規范進(jìn)行開(kāi)發(fā)(比如命名規范。 如果公司有明確規定就安裝公司規定執行,如果沒(méi)有就按照行業(yè)規范)
4、理解OOP面向對象編程概念、圍繞OOP思想開(kāi)發(fā)。(其實(shí)框架都給你搭建好了、只是補邏輯代碼也不需要注意太多)
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:4.107秒