想了解java編程技巧嗎?想了解Java程序員必備奇淫巧技篇(上),Java面向?qū)ο蟮木幊碳记商釂枺琷ava 編程的技巧,讓編程速度變快的快捷鍵,國外大神總結的10個Java編程技巧,了解一下!,*荒廢三年,大四自學7個月Java,找到了12K的工作,學習JAVA編程有什么技巧嗎?,學習Java程序設計的方法和技巧??? 嗎?......本文帶你一探究竟。
1.Java程序員必備奇淫巧技篇(上)
前言前面我們講了Java編程過程中的命名和注釋、代碼風格,今天我們來講一些比較實用的Java編程技巧,幫你切實地提高代碼可讀性。這部分技巧比較瑣碎,也很難羅列全面,我僅僅總結了一些我認為比較關鍵的,更多的技巧需要你在實踐中自己慢慢總結、積累。1. 把代碼分割成更小的單元塊大部分人閱讀代碼的習慣都是,先看整體再看細節(jié)。所以,我們要有模塊化和抽象思維,善于將大塊的復雜邏輯提煉成類或者函數(shù),屏蔽掉細節(jié),讓閱讀代碼的人不至于迷失在細節(jié)中,這樣能極大地提高代碼的可讀性。不過,只有代碼邏輯比較復雜的時候,我們其實才建議提煉類或者函數(shù)。畢竟如果提煉出的函數(shù)只包含兩三行代碼,在閱讀代碼的時候,還得跳過去看一下,這樣反倒增加了閱讀成本。這里我舉一個例子來進一步解釋一下。代碼具體如下所示。重構前,在 invest () 函數(shù)中,最開始的那段關于時間處理的代碼,是不是很難看懂?重構之后,我們將這部分邏輯抽象成一個函數(shù),并且命名為 ,從名字就能清晰地了解它的功能,判斷今天是不是當月的*一天。這里,我們就是通過將復雜的邏輯代碼提煉成函數(shù),大大提高了代碼的可讀性。// 重構前的代碼 public void invest(long userId, long ) { Calendar calendar = Calendar.(); calendar.setTime(date); calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1)); if (calendar.get(Calendar.DAY_OF_MONTH) == 1) { ? return; } //... } // 重構后的代碼:提煉函數(shù)之后邏輯更加清晰 public void invest(long userId, long ) { if ((new Date())) { ? return; } //... } public boolean (Date date) { Calendar calendar = Calendar.(); calendar.setTime(date); calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1)); if (calendar.get(Calendar.DAY_OF_MONTH) == 1) { return true; } return false; }2. 避免函數(shù)參數(shù)過多我個人覺得,函數(shù)包含 3、4 個參數(shù)的時候還是能接受的,大于等于 5 個的時候,我們就覺得參數(shù)有點過多了,會影響到代碼的可讀性,使用起來也不方便。針對參數(shù)過多的情況,一般有 2 種處理方法。考慮函數(shù)是否職責單一,是否能通過拆分成多個函數(shù)的方式來減少參數(shù)。示例代碼如下所示:public void getUser(String username, String telephone, String email); // 拆分成多個函數(shù) public void (String username); public void (String telephone); public void (String email);將函數(shù)的參數(shù)封裝成對象。示例代碼如下所示:// 將參數(shù)封裝成對象 public class Blog { title: 33-改善代碼質(zhì)量的20條編程規(guī)范 private String summary; private String keywords; private Strint content; private String category; private long authorId; } public void postBlog(Blog blog);除此之外,如果函數(shù)是對外暴露的遠程接口,將參數(shù)封裝成對象,還可以提高接口的兼容性。在往接口中添加新的參數(shù)的時候,老的遠程接口調(diào)用者有可能就不需要修改代碼來兼容新的接口了。3. 勿用函數(shù)參數(shù)來控制邏輯不要在函數(shù)中使用布爾類型的標識參數(shù)來控制內(nèi)部邏輯,true 的時候走這塊邏輯,false 的時候走另一塊邏輯。這明顯違背了單一職責原則和接口隔離原則。我建議將其拆成兩個函數(shù),可讀性上也要更好。我舉個例子來說明一下。public void buyCourse(long userId, long courseId, boolean isVip); // 將其拆分成兩個函數(shù) public void buyCourse(long userId, long courseId); public void (long userId, long courseId); 不過,如果函數(shù)是 private 私有函數(shù),影響范圍有限,或者拆分之后的兩個函數(shù)經(jīng)常同時被調(diào)用,我們可以酌情考慮保留標識參數(shù)。示例代碼如下所示: // 拆分成兩個函數(shù)的調(diào)用方式 boolean isVip = false; //... 省略其他邏輯... if (isVip) { (userId, courseId); } else { buyCourse(userId, courseId); } // 保留標識參數(shù)的調(diào)用方式更加簡潔 boolean isVip = false; //... 省略其他邏輯... buyCourse(userId, courseId, isVip);除了布爾類型作為標識參數(shù)來控制邏輯的情況外,還有一種 “根據(jù)參數(shù)是否為 null” 來控制邏輯的情況。針對這種情況,我們也應該將其拆分成多個函數(shù)。拆分之后的函數(shù)職責更明確,不容易用錯。具體代碼示例如下所示:public List<> (Long userId, Date startDate, Date endDate) { if (startDate != null && endDate != null) { ? // 查詢兩個時間區(qū)間的 } if (startDate != null && endDate == null) { ? // 查詢 startDate 之后的所有 } if (startDate == null && endDate != null) { ? // 查詢 endDate 之前的所有 } if (startDate == null && endDate == null) { ? // 查詢所有的 } } // 拆分成多個 public 函數(shù),更加清晰、易用 public List<> (Long userId, Date startDate, Date endDate) { return (userId, startDate, endDate); } public List<> (Long userId, Date startDate) { return (userId, startDate, null); } public List<> (Long userId, Date endDate) { return (userId, null, endDate); } public List<> (Long userId) { return (userId, null, null); } private List<> (Long userId, Date startDate, Date endDate) { // ... }
2.Java面向?qū)ο蟮木幊碳记商釂?/h3>
@,樓主問不用內(nèi)部類,你為何偏偏回答內(nèi)部類?@樓主,方法很多:你可以設置組件的訪問類型,例如 package 訪問類型,那么你只要把事件類和界面類放在一個包下就好了。你也可以通過方法參數(shù)傳遞需要用到的界面元素。你也可以用觀察者模式。
3.java 編程的技巧,讓編程速度變快的快捷鍵
輸入sysout然后按Alt+/可以直接打出System.out.println();輸入main然后按Alt+/然后enter就是main方法。
4.國外大神總結的10個Java編程技巧,了解一下!
這是一個國外大神20多年的經(jīng)驗總結出來的……“任何可能出錯的事情,*都會出錯?!边@就是人們?yōu)槭裁聪矚g進行“防錯性程序設計”的原因。偏執(zhí)的習慣有時很有意義,有時則不夠清晰也不夠聰明,也許當你想到這樣寫的人的時候還會覺得有點怪異。下面是我列出的的個人感覺最有用而又偏執(zhí)的 10 項 Java 編程技巧。請看:1. 把字符串常量放在前面通過把字符串常量放在比較函數(shù)equals()比較項的左側來防止偶然的 從來都不是一個壞主意,就像這樣:這是毫無疑問的,把一種表達式轉(zhuǎn)換成另一種更好的表達式,并不會失去什么。只要我們的Options是真實存在的(Java 8中 Optional是對可以為空的對象進行的封裝),不是嗎?討論一下…2. 不要相信早期的JDK APIsJava剛出現(xiàn)的時候,編程一定是件很痛苦的事。那時的API仍然不夠成熟,你可能曾經(jīng)遇到過這樣一段代碼:看起來很奇怪對嗎?也許吧,但是看看這個Javadoc: “如果抽象路徑名表示的不是一個目錄,那么這個方法返回null。否則返回一個字符串數(shù)組,其中每個字符串表示當前目錄下的一個文件或目錄?!? 是的,*再加上判空檢查,以確保正確: 糟糕!前者違反了 Java 編碼中 10 個微妙的*實踐的規(guī)則#5和#6。因此一定要記得判 null檢查!3. 不要相信“-1”我知道這很偏執(zhí),Javadoc中關于 String.indexOf() 的早期描述是這樣的:“字符在字符序列中*次出現(xiàn)的位置將作為結果[被返回],如果字符不存在則返回-1。”所以,-1 就可以理所當然被拿來用,對嗎?我說不對,看看這個:這篇文章看到這里小編要告訴大家應該JAVA千人(qun):472052538,咱們不看技術怎么樣,小編都歡迎,不定期分享干貨,包括我自己整理的一份2021*JAVA資料。誰知道呢。也許在某個特定場合下他們將會需要另一種 編碼值,如果不區(qū)分大小寫的話, 就會被包含進去…此時或許可以返回 -2呢?誰知道呢。 畢竟,我們有非常多關于NULL——價值億萬美金的錯誤的討論。為什么不開始討論 -1呢,某種意義上來說 -1 是 null 在int類型下的另一種形式。 4. 避免意外的賦值是的。即使*秀的程序員也可能犯這種錯誤(當然,不包括我???7)。 (假設這是,我們暫且偏執(zhí)地認為是這種語言) 再說一遍。如果你的表達式中有常量,將它放在等式左邊。這樣當你打算再添加一個 = 時,不容易出錯。5. 檢查null和長度不管什么時候你有一個集合、數(shù)組或者其他的,確保它存在并且不為空。你不知道這些數(shù)組來自哪兒,也許是早期的JDK API呢?6. 所有的方法都用 final 聲明你可以告訴我任何你想要的開閉原則,不過那都是胡說八道。我不相信你(可以正確繼承我的類),也不相信我自己(不會意外地繼承我的類)。因此除了接口(專門用于繼承)都應該是嚴格的 final。7. 所有的變量和參數(shù)都用 final 聲明就像我說的。我不相信自己不會無意間重寫了某個值。這么說來,我的確一點都不相信自己。因為:這也是為什么所有的變量和參數(shù)都用final聲明的原因。好吧,我承認,這一條我自己也不常用,雖然我應該用。我希望Java能像Scala語言一樣,人們在所有地方都直接用 val 來表示變量,甚至都不考慮易變性,除非明確需要的時候他們才用 var 來聲明變量,但是這樣的機會特別少。8. 重載的時候不要相信泛型是的,這是會發(fā)生的。你覺得你寫了一個超好的API,它真的是既酷炫又直觀;接著就出現(xiàn)了一群用戶,他們只是把一切類型生搬硬套進 Object 中 直到那該死的編譯器停止工作,然后他們突然鏈接到了錯誤的方法,認為這一切都是你的錯(事情總是這樣)。 思考一下這個: 因為,你知道的…你的用戶們,他們就像這樣 相信我,我看過的多了,還有這樣的 所以說偏執(zhí)是有好處的。 9. 總是在switch語句里加上…作為最滑稽的表達式之一,我不知道是該心存敬畏還是默默哭泣。不管怎樣,我們既然無法擺脫 switch ,在必要的時候我們*能夠正確使用它,例如:因為在當 value=3 被引入到軟件中的時候,default 就能發(fā)揮作用,使其正常運行!別和我提 enum 類型,因為這對 enums 也一樣適用。10. 用大括號隔開 switch 的每一個 case 塊事實上,switch是最坑爹的語句,任何喝醉了或是賭輸了的人都可以在某種語言中使用它??纯聪旅孢@個例子:在switch語句中,為所有的case都只定義了一個作用域。事實上,這些case不是真正意義上的語句,他們更像是標簽,而switch就是指向這些標簽的goto語句。事實上,你甚至可以把case語句和 驚人的FORTRAN77項聲明 類比,對于FORTRAN,它的神秘已經(jīng)超越了它的功能。 這意味著變量final int j 可以被任何case訪問,不論我們是否有break??雌饋聿⒉皇呛苤庇^。我們可以通過添加簡單的花括號為每一個case創(chuàng)建一個新的嵌套的作用域,當然不要忘了在每個 case 的語句塊*加 break 結論編程時的強迫癥有時候看起來會很奇怪,會使得代碼往往比必需的還要冗長。你可能會想,“啊,這種情況永遠不會發(fā)生!”,但是正如我所說的,在經(jīng)歷了20年左右的編程生涯后,你不會想要再去修正那些只是因為編程語言的古老和固有缺陷而導致的愚蠢而不必要的bug了。因為你知道…..
5.*荒廢三年,大四自學7個月Java,找到了12K的工作
通過這個故事我希望學弟們不要像我一樣,等到臨近畢業(yè)后才醒悟要學習知識學習技術的重要性,能趁早盡量要趁早,過去應該做的事情沒有去做,后面都需要你加倍補回來。我是一個二本院校,專業(yè)是機械工程,當時以為考上了*就可以高枕無憂放開了玩,可以說我整個*期間都是打LOL過來的。到了大四才發(fā)現(xiàn),同學們都陸續(xù)去找了實習,有的做機械工作,有的在大三的時候就自學了Java或者web前端技術,然后他們通過秋招找到了一份實習的工作,實習的工資基本都在5K左右。從那個時候我開始慌了,但還是沒有具體的行動,一直拖到了去年的8月份,也就是大四的上學期,這個時候?qū)W校已經(jīng)要求我們實習,很多就到了畢業(yè)的時間。從去年8月份我開始自學Java,因為要面臨就業(yè),我這個機械專業(yè)的很多同學都是轉(zhuǎn)行學習的軟件開發(fā),他們說這行發(fā)展的比較好,信息軟件技術以后的空間會更大,各種薪資待遇也都不錯。有的人建議我去學Java,說Java的崗位需求是*的,一二三城市都可以就業(yè)。我從去年8月份自學Java到現(xiàn)在就業(yè)一共是用了7個月左右的時間,現(xiàn)在是在重慶的一家軟件公司做產(chǎn)品的維護,技術部大約是50多人。薪資是12K,五險一金。我覺得自己還算幸運,畢竟*荒廢了那么多時間,臨陣磨槍畢業(yè)還能找到一份月入過萬的工作,真的是運氣爆棚。所以我想告訴大家什么時候?qū)W習都不晚,但一定是越早越好。給還在*的學弟們的忠實建議:出了社會才知道錢能掙屎難吃,在學?;烊兆舆^來的人,沒有一個不后悔的。當你有一天在這個社會生存都成了問題的時候,你會發(fā)現(xiàn)自己所有的一切都是灰暗的,窮生奸計富長良心,我體會到了這句話的含義。所以奉勸那些還在上學的學弟們,抓緊在學校的日子學會一個順應這個時代發(fā)展的技術,選擇一個有發(fā)展空間的行業(yè),畢業(yè)后能找到一份不錯的工作,可以讓自己有較高的起點,然后不斷的向上發(fā)展。下面是我學習Java的一些小心得分享給大家:1、 千萬別自己一個人閉門造車,不要認為自己可以解決所有問題,學習編程很抽象,尤其是在剛開始學的時候,很多時候你是無從下手的,所以我建議大家一定要懂得借力,找一些學的比較好的同學,或者你認識的朋友帶帶你,有人真的是事半功倍,效率會提高非常多?;蛘呒右恍W習氛圍不錯的Java交流學習群,跟有經(jīng)驗的人交流可以學到很多好的學習方法和技巧,提高我們的學習效率。如果大家找不到好的Java學習群,可以添加下方這個QQ群 工欲利其事,必先利其器。在確定了要學習Java前,你一定要有一個非常完整的Java技術棧的大綱體系以及還不錯的學習教程,如果我們連一套完整的學習教程都沒有,根本不可能學會Java。而很多人在開始時用的教程非常老,很多技術都已經(jīng)過時,企業(yè)并不用這些技術,所以學了也是白耽誤工夫。如果大家找不到合適的Java教程,可以添上面我推薦的Java交流群,那些大佬會定期分享一些比較新的學習教程給大家免費試用。3、 實踐是檢驗真理的*標準,學習編程一定要記得多動手寫代碼,視頻只需要看一兩遍即可。有很多同學不懂得如何學習編程,盲目無腦的一直刷視頻看,但你看完視頻后很快就會忘記,其實是在浪費你的時間。學習編程的主要目的是能做出好的互聯(lián)網(wǎng)軟件產(chǎn)品。這是一個需要動手的工作,所以我們學編程一定要注重動手寫代碼。而很多人學習編程都是只看視頻,這樣的學習方式是非常錯誤的,所以大家對于這點一定要牢記在心。4、 項目作品是展現(xiàn)我們水平的重要因素,我們在學完一個階段后,一定要記得針對這個階段去完成一個項目實戰(zhàn)。真正能讓我們印象深刻,加深理解的學習方式就是參與到項目的開發(fā)中。項目才能檢驗我們這個階段到底學的怎么樣,所以大家在學習的過程中切記項目的重要性,很多人學習Java*卻不能獨立完成一個項目模塊,如果你達不到這個水平,那么你是不可能找到Java開發(fā)工作的。我認為新手在學習Java的過程中常見的誤區(qū):1.沒有詳細系統(tǒng)的學習規(guī)劃,越學越迷茫,不知道應該往哪里走,特別有想放棄的想法。2.學習的技術并不是現(xiàn)在企業(yè)需要的技術,跟不上時代,不具備競爭力。3.學習效率非常低,遇到一個小問題解決起來很費時間,甚至有的時候會卡幾個小時,導致信心受挫,對自己適不適合產(chǎn)生懷疑。4.沒有掌握學習Java的方法和技巧,導致走的彎路特別多,鉆進程序的死胡同出不來。如果你也有以上的學習困惑,覺得自己無從下手,學習的效率很低,學了后面就把前面的忘記這些問題,基本都是因為自己的學習方法不對。所以我建議你一定要找有經(jīng)驗的人多溝通,這些問題都是可以得到很好解決的。我強烈推薦大家加入到這個Java交流學習群
6.學習JAVA編程有什么技巧嗎?
do{1.學習你不會的知識【由淺入深的學習。先從容易的學習,建立一點信心,之后循序漸進的學習?!俊静恢劣谝粊砭捅桓愕臅烆^轉(zhuǎn)向。失去學習的興趣】2.理解你所學會的知識【*明白其原理,結果是怎麼來的。別鉆牛角尖】3.思考你理解的知識【在這基礎上進行加工創(chuàng)新,舉一反三,思考我還有其它思路實現(xiàn)嗎】【沒想出來木有關系,關鍵是要去多想】4.練習你思考的知識【說那么多,不如練得多,加強練習所學的知識點練得過程肯定會有問題】【記錄下來,進行再次思考,思考問題是怎么產(chǎn)生的,怎么避免此問題】【經(jīng)過思考你會更深的理解所學的知識】}while(當你有不懂的知識時);//學無止境
7.學習Java程序設計的方法和技巧?
《thinking in java》這本書一定要看,學JAVA語言不看這本書是不可以的,當然如果你只是想應付考試那算我沒說。JAVA是一門理論性很強的語言,你在學習過程中不要只注意學習程序,最主要的是學習思想。因為JAVA是開源的東西,你可以看到源碼,所以你要多看看別人的代碼,同樣看別人代碼的同時也要注意看思想,不能只看程序?qū)崿F(xiàn)。一定要嚴格要求自己,嚴格到屬性名、方法名、類名都要按規(guī)矩去起必須要做到見名知意。一個人對自己的嚴格程度決定了他能走得有多遠,在學習期間讓自己養(yǎng)成一個良好的提升習慣,你將受益一生。至于學習方法呢,你要先自下而上。也就是開始的時候一定要多練習,老師講的東西一定要親自做,甚至書上的每個例子都要做,還不是做一遍就完。在自己做的過程中要善于總結,要經(jīng)常想能不能更好的實現(xiàn)。當你做到一定程度的時候你會發(fā)現(xiàn)自己存在哪些知識上的不足,哪些技術上的欠缺。這個時候你就到了自上而下的過程了,你會針對你自己的不足,去系統(tǒng)的學習一些理論知識,從理論上下功夫。這個時期你會發(fā)現(xiàn)你自己會豁然開朗,有了一個質(zhì)的提升。同樣,理論明白了你就又要去實踐了,就會再次回到自下而上的過程...如此反復就會學有所成。
上述文章了解到關于Java程序員必備奇淫巧技篇(上),Java面向?qū)ο蟮木幊碳记商釂?,java 編程的技巧,讓編程速度變快的快捷鍵,國外大神總結的10個Java編程技巧,了解一下!,*荒廢三年,大四自學7個月Java,找到了12K的工作,學習JAVA編程有什么技巧嗎?,學習Java程序設計的方法和技巧??? ,讓我們對java編程技巧 有一個直觀的認知。我們發(fā)現(xiàn),作為一個優(yōu)秀的Java程序員是多么的自豪。