1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        群友的13個(gè)寫(xiě)Java的習(xí)慣,代碼像寫(xiě)詩(shī)一樣!

        共 2350字,需瀏覽 5分鐘

         ·

        2022-03-02 11:41

        點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

        作者:國(guó)濤1998

        來(lái)源:blog.csdn.net/weixin_44912855/article/details/120866194


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

        1.定義配置文件信息

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

        @ConfigurationProperties

        用 @ConfigurationProperties 代替@Value

        使用方法

        定義對(duì)應(yīng)字段的實(shí)體

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

        使用時(shí)注入這個(gè)bean

        @RestController
        @RequiredArgsConstructor
        public?class?PropertyController?{

        ????final?DeveloperProperty?developerProperty;

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

        2. 用@RequiredArgsConstructor代替@Autowired

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

        我們來(lái)看看上段代碼編譯完之后的樣子

        RequiredArgsConstructor:lombok提供

        3.代碼模塊化

        阿里巴巴 Java 開(kāi)發(fā)手冊(cè)中說(shuō)到每個(gè)方法的代碼不要超過(guò) 50 行(我沒(méi)記錯(cuò)的話(huà))

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

        4. 拋異常而不是返回

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

        反例

        正例

        4. 減少不必要的db

        盡可能的減少對(duì)數(shù)據(jù)庫(kù)的查詢(xún)

        舉例子

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

        之前有看別人寫(xiě)的代碼,會(huì)先根據(jù)id查詢(xún)?cè)撚涗?,然后做一些判?/p>

        反例

        正例

        5. 不要返回null

        反例

        正例

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

        6. if else

        不要太多了if else if

        可以試試策略模式代替。

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

        業(yè)務(wù)代碼盡量放到service層進(jìn)行處理,后期維護(hù)起來(lái)也好操作而且美觀(guān)

        反例

        正例

        8. 利用好Idea

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

        舉一個(gè)小例子

        idea會(huì)對(duì)我們的代碼進(jìn)行判斷,提出合理的建議

        例如:

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

        點(diǎn)擊replace

        9. 閱讀源碼

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

        10. 設(shè)計(jì)模式

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

        11. 擁抱新知識(shí)

        像我們這種工作年限少的程序員,我覺(jué)得要多學(xué)習(xí)自己認(rèn)知之外的知識(shí),不能每天crud,有機(jī)會(huì)就多用用有點(diǎn)難度的知識(shí),沒(méi)有機(jī)會(huì)(項(xiàng)目較傳統(tǒng)),可以自己下班多些相關(guān)demo練習(xí)。

        12. 基礎(chǔ)問(wèn)題

        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ù)量的遞歸時(shí),避免在遞歸方法里new對(duì)象,可以試試把對(duì)象當(dāng)作方法參數(shù)進(jìn)行傳遞使用

        ?

        注釋

        ?

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

        ?

        13. 判斷元素是否存在

        hashSet而不是list

        list判斷一個(gè)元素是否存在的代碼

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

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

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

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

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

        待補(bǔ)充....

        ? ??

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

        點(diǎn)分享

        點(diǎn)收藏

        點(diǎn)點(diǎn)贊

        點(diǎn)在看

        瀏覽 70
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            免费一级无码婬片AA片情人 | 成人无码一级A片在线 | 青草视频免费在线观看 | 在线国产黄片 | www黄欧美 | 国产精品久久久久久久久久乐趣播 | 日本午夜电影在线观看 | 少妇高潮又黄又爽免费网站 | 欧美操婷婷 | 日本三级做爱 |