<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          群友的13個寫Java的習慣,代碼像寫詩一樣!

          共 2350字,需瀏覽 5分鐘

           ·

          2022-03-02 11:41

          點擊關(guān)注公眾號,Java干貨及時送達

          作者:國濤1998

          來源:blog.csdn.net/weixin_44912855/article/details/120866194


          最近幾天微信群里一位網(wǎng)友把自己平時寫代碼的習慣分享到了群里,我這里從群記錄了找出了一些分享給大家!

          1.定義配置文件信息

          有時候我們?yōu)榱私y(tǒng)一管理會把一些變量放到 yml 配置文件中,例如:

          @ConfigurationProperties

          用 @ConfigurationProperties 代替@Value

          使用方法

          定義對應(yīng)字段的實體

          @Data
          //?指定前綴
          @ConfigurationProperties(prefix?=?"developer")
          @Component
          public?class?DeveloperProperty?{
          ????private?String?name;
          ????private?String?website;
          ????private?String?qq;
          ????private?String?phoneNumber;
          }

          使用時注入這個bean

          @RestController
          @RequiredArgsConstructor
          public?class?PropertyController?{

          ????final?DeveloperProperty?developerProperty;

          ????@GetMapping("/property")
          ????public?Object?index()?{
          ???????return?developerProperty.getName();
          ????}
          }

          2. 用@RequiredArgsConstructor代替@Autowired

          我們都知道注入一個bean有三種方式哦(set注入, 構(gòu)造器注入, 注解注入),spring推薦我們使用構(gòu)造器的方式注入Bean

          我們來看看上段代碼編譯完之后的樣子

          RequiredArgsConstructor:lombok提供

          3.代碼模塊化

          阿里巴巴 Java 開發(fā)手冊中說到每個方法的代碼不要超過 50 行(我沒記錯的話)

          在實際的開發(fā)中我們要善于拆分自己的接口或方法,做到一個方法只處理一種邏輯,說不定以后某個功能就用到了,拿來即用。

          4. 拋異常而不是返回

          在寫業(yè)務(wù)代碼的時候,經(jīng)常會根據(jù)不同的結(jié)果返回不同的信息,盡量減少返回,會顯得代碼比較亂。

          反例

          正例

          4. 減少不必要的db

          盡可能的減少對數(shù)據(jù)庫的查詢

          舉例子

          刪除一個服務(wù)(已下架或未上架的才能刪除)

          之前有看別人寫的代碼,會先根據(jù)id查詢該記錄,然后做一些判斷

          反例

          正例

          5. 不要返回null

          反例

          正例

          別處調(diào)用方法時,避免不必要的空指針

          6. if else

          不要太多了if else if

          可以試試策略模式代替。

          7. 減少controller業(yè)務(wù)代碼

          業(yè)務(wù)代碼盡量放到service層進行處理,后期維護起來也好操作而且美觀

          反例

          正例

          8. 利用好Idea

          目前為止市面上的企業(yè)基本都用idea作為開發(fā)工具了吧

          舉一個小例子

          idea會對我們的代碼進行判斷,提出合理的建議

          例如:

          它推薦我們用lanbda的形式代替

          點擊replace

          9. 閱讀源碼

          一定要養(yǎng)成閱讀源碼的好習慣包括優(yōu)秀的開源項目GitHub上stars:>1000, 會從中學好好多知識包括其對代碼的設(shè)計思想以及高級API,面試加分(好多面試官習慣問源碼相關(guān)的知識)

          10. 設(shè)計模式

          23種設(shè)計模式,要嘗試代碼中運用設(shè)計模式思想,寫出的代碼即規(guī)范又美觀還高大上哈哈。

          11. 擁抱新知識

          像我們這種工作年限少的程序員,我覺得要多學習自己認知之外的知識,不能每天crud,有機會就多用用有點難度的知識,沒有機會(項目較傳統(tǒng)),可以自己下班多些相關(guān)demo練習。

          12. 基礎(chǔ)問題

          map遍歷

          HashMap?map?=?new?HashMap<>();
          map.put("name",?"du");
          for?(String?key?:?map.keySet())?{
          ????String?value?=?map.get(key);
          }

          map.forEach((k,?v)?->?{

          });

          //?推薦
          for?(Map.Entry?entry?:?map.entrySet())?{

          }

          optional 判空

          //獲取子目錄列表
          public?List?getChild(String?pid)?{
          ????if?(V.isEmpty(pid))?{
          ????pid?=?BasicDic.TEMPORARY_DIRECTORY_ROOT;
          }
          CatalogueTreeNode?node?=?treeNodeMap.get(pid);

          return?Optional.ofNullable(node)
          ????????.map(CatalogueTreeNode::getChild)
          ????????.orElse(Collections.emptyList());
          }

          遞歸

          ?

          大數(shù)據(jù)量的遞歸時,避免在遞歸方法里new對象,可以試試把對象當作方法參數(shù)進行傳遞使用

          ?

          注釋

          ?

          類 接口方法 注解 較復(fù)雜的方法 注釋都要寫而且要寫清楚, 有時候?qū)懽⑨尣皇墙o別人看的 而是給自己看的

          ?

          13. 判斷元素是否存在

          hashSet而不是list

          list判斷一個元素是否存在的代碼

          ?ArrayList?list?=?new?ArrayList<>();
          ?
          ?//?判斷a是否在list中
          ?
          ?for?(int?i?=?0;?i?????????if?("a".equals(elementData[i]))
          ???????????return?i;

          由此可見其復(fù)雜度為On

          而hashSet底層采用hashMap作為數(shù)據(jù)結(jié)構(gòu)進行存儲,元素都放到map的key(即鏈表中)

          HashSet?set?=?new?HashSet<>();
          ?
          ?//?判斷a是否在set中
          ?
          ?int?index?=?hash(a);
          ?
          return?getNode(index)?!=?null

          由此可見其復(fù)雜度為O1

          待補充....

          ? ??

          1、來自谷歌的開發(fā)心得:所有SQL和代碼,都沒必要藏著掖著
          2、用了這么久的 Chrome,你不會還沒掌握這個功能吧?
          3、一個比SpringBoot快44倍的Java框架
          4、QQ最近上線的兩個新功能,把我人都看傻了!
          5、SpringBoot 三大開發(fā)工具,你都用過么?

          點分享

          點收藏

          點點贊

          點在看

          瀏覽 70
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  v片网址| 日本欧美中文字幕 | 国产大屌| 日韩色道| 国产内射婷婷 |