摘要:前言作為一名全干打字員,干活時(shí)經(jīng)常會(huì)被要求使用各種各樣的語(yǔ)言去實(shí)現(xiàn)各種各樣的需求,來(lái)回切換起來(lái)寫(xiě)的代碼就會(huì)或多或少有點(diǎn)不規(guī)范。今天我們以為例,講講在代碼中,我們需要注意的某些規(guī)范。
前言
作為一名全干打字員,干活時(shí)經(jīng)常會(huì)被要求使用各種各樣的語(yǔ)言去實(shí)現(xiàn)各種各樣的需求,來(lái)回切換起來(lái)寫(xiě)的代碼就會(huì)或多或少有點(diǎn)不規(guī)范。今天我們以JAVA為例,講講在代碼中,我們需要注意的某些規(guī)范。(本文標(biāo)準(zhǔn)依賴(lài)于阿里巴巴的JAVA開(kāi)發(fā)代碼規(guī)范)
示例以下舉出本猿在工作中常常出現(xiàn)的問(wèn)題,包括但不僅限于:
邏輯判斷語(yǔ)句
在 if/else/for/while/do 語(yǔ)句中必須使用大括號(hào),即使只有一行代碼,避免使用下面的形式:
if(condition) statements;
屬性copy
很多童鞋喜歡使用 Apache Beanutils 進(jìn)行屬性的copy, Apache BeanUtils 性能較差,我們應(yīng)該盡量避免使用,可以使用其他方案比如 Spring BeanUtils , Cglib BeanCopier 。
TestObject a = new TestObject(); TestObject b = new TestObject(); a.setX(b.getX()); a.setY(b.getY());
覆寫(xiě)方法
所有的覆寫(xiě)方法,都必須要加上 @Override 注解。
類(lèi)方法命名
方法名、參數(shù)名、成員變量、局部變量都應(yīng)該統(tǒng)一使用 lowerCamelCase ,類(lèi)名使用 UpperCamelCase 風(fēng)格,遵從駝峰命名的標(biāo)準(zhǔn),盡量避免如 _ -等字符連接,但以下情形例外:(領(lǐng)域模型的相關(guān)命名)DO / BO / DTO / VO / DAO。另外,類(lèi)都應(yīng)該加上創(chuàng)建者的信息,方法名也應(yīng)該加上對(duì)應(yīng)的參數(shù)及用途說(shuō)明。
常量命名應(yīng)該全部大寫(xiě),但此間使用下劃線隔開(kāi),力求語(yǔ)義表達(dá)完整清楚,不要嫌名字長(zhǎng)。
Random實(shí)例
首先 Random 示例包括 java.util.Random 或者 Math.random(),我們應(yīng)該避免其被多線程使用,雖然共享該實(shí)例是線程安全的,但會(huì)因競(jìng)爭(zhēng)統(tǒng)一 seed 導(dǎo)致性能下降。
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build(); ExecutorService singleThreadPool = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); singleThreadPool.execute(()-> System.out.println(Thread.currentThread().getName())); singleThreadPool.shutdown();
+字符串拼接
在循環(huán)體內(nèi),我們應(yīng)當(dāng)使用 StringBuilder 的 append 方法進(jìn)行字符串的連接。
反例: String result; for (String string : tagNameList) { result = result + string; } 正例: StringBuilder stringBuilder = new StringBuilder(); for (String string : tagNameList) { stringBuilder.append(string); } String result = stringBuilder.toString();
equals判斷
很多人喜歡使用下面的代碼進(jìn)行 equals 判斷是否為某個(gè)值:
public static final String type = "FOOD"; if(Object.equals(type)){ //do something }
對(duì)象中的equals很容易拋空指針異常,所以我們應(yīng)該盡量使用常量或者確定有值的對(duì)象來(lái)調(diào)用equals。
public void f(String str){ String inner = "hi"; if(inner.equals(str)){ System.out.println("hello world"); } }
集合初始化
我們往往在集合初始化的時(shí)候忘記指定集合的初始值大小,在高并發(fā)的情況下,這樣很可能會(huì)造成內(nèi)存的使用不當(dāng)引起一系列的問(wèn)題。所以在使用諸如 HashMap 的時(shí)候盡量指定初始值的大小。
反例: Mapmap = new HashMap (); 正例: Map map = new HashMap (16);
注釋
方法內(nèi)部應(yīng)當(dāng)使用單行注釋?zhuān)诒蛔⑨屨Z(yǔ)句的上方另起一行,使用 // 進(jìn)行注釋?zhuān)嘈凶⑨寗t使用 /* */ ,強(qiáng)迫癥下應(yīng)注意與代碼對(duì)齊。
public void method() { // Put single line comment above code. (Note: align "http://" comment with code) int a = 3; /** * Some description about follow code. (Note: align "/**" comment with code) */ int b = 4; }
Switch語(yǔ)句
在每一個(gè)switch塊內(nèi),每一個(gè)case都必須通過(guò) break/return 來(lái)終止或者是注釋說(shuō)明程序繼續(xù)執(zhí)行到某一個(gè)case為止,并且都應(yīng)該包含一個(gè) default 語(yǔ)句放在最后,即便沒(méi)有代碼。
switch( x ){ case 1 : break ; case 2 : break ; default : }結(jié)語(yǔ)
雖然我們往往寫(xiě)出的代碼可能不是很高效、簡(jiǎn)潔,但是我們一定注意代碼的可讀性,畢竟代碼除了機(jī)器看之外,也是給人看的。
福利送福利送福利啦,本猿最近獲得了三張 5QB 的抵用卷,本著蚊子再小也是肉的原則,把它送給在公眾號(hào)上留言的前三位童鞋,留言的前三位童鞋看到后記得在后臺(tái)留下QQ號(hào)聯(lián)系打字員大大領(lǐng)取福利喲~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/70807.html
摘要:此處指定的虛擬機(jī)與平臺(tái)兼容,并支持語(yǔ)言規(guī)范中指定的編程語(yǔ)言。第章說(shuō)明了虛擬機(jī)的指令集,按字母順序顯示操作碼助記符。 介紹 一點(diǎn)歷史 Java?編程語(yǔ)言是一種通用的、并發(fā)的、面向?qū)ο蟮恼Z(yǔ)言,它的語(yǔ)法類(lèi)似于C和C++,但它省略了許多使C和C++復(fù)雜、混亂和不安全的特性。最初開(kāi)發(fā)Java平臺(tái)是為了解決為聯(lián)網(wǎng)的消費(fèi)者設(shè)備構(gòu)建軟件的問(wèn)題,它旨在支持多種主機(jī)架構(gòu),并允許安全交付軟件組件,為了滿足這...
摘要:今日份重點(diǎn)命名規(guī)范注釋關(guān)鍵字關(guān)鍵字總結(jié)命名規(guī)范規(guī)范的包名名字管理是所有編程語(yǔ)言都必須重視的一個(gè)問(wèn)題。比如說(shuō)百度,其域名為,那么其對(duì)應(yīng)的應(yīng)用的包名前綴就應(yīng)該為。是誰(shuí)這么大牌總結(jié)本文主要介紹了中的命名規(guī)范注解關(guān)鍵字關(guān)鍵字等內(nèi)容。 歡迎關(guān)注我的微信公眾號(hào),共同打牢Java的基礎(chǔ),向著遠(yuǎn)方進(jìn)擊 showImg(https://segmentfault.com/img/bVboaBO?w=129...
摘要:最近在看一本有關(guān)編程規(guī)范的書(shū),書(shū)中精煉闡述了使用語(yǔ)言時(shí)應(yīng)該遵循的一些原則。所以擁有良好一致的編程規(guī)范對(duì)于一個(gè)團(tuán)隊(duì)至關(guān)重要。二堅(jiān)持最小驚奇原則在編碼過(guò)程中盡量避免可能讓軟件用戶感到意外的做法。 最近在看一本有關(guān)Java編程規(guī)范的書(shū),書(shū)中精煉闡述了使用java語(yǔ)言時(shí)應(yīng)該遵循的一些原則。接下來(lái)的一段時(shí)間我將在這里總結(jié)我的學(xué)習(xí)內(nèi)容,也希望這一系列文章能夠?qū)τ行枰娜擞兴鶐椭?不考慮任何編碼規(guī)...
摘要:大家好,我是樂(lè)字節(jié)的小樂(lè),這次要給大家?guī)?lái)的是變量與數(shù)據(jù)類(lèi)型。本文是第一集編程規(guī)范,關(guān)鍵字與標(biāo)識(shí)符。后面我們要寫(xiě)一個(gè)程序的過(guò)程。需求分析實(shí)現(xiàn)代碼體現(xiàn)注釋的作用解釋說(shuō)明程序,提高了代碼的閱讀性??梢詭椭覀冋{(diào)試程序。 大家好,我是樂(lè)字節(jié)的小樂(lè),這次要給大家?guī)?lái)的是Java變量與數(shù)據(jù)類(lèi)型。本文是第一集:Java編程規(guī)范,關(guān)鍵字與標(biāo)識(shí)符。showImg(https://segmentfaul...
摘要:二格式規(guī)范在上一篇的編程規(guī)范一中我們講述了在編碼中的一般原則,雖然這些原則并不涉及具體的代碼規(guī)范,但是這些原則卻是我們?cè)陂_(kāi)發(fā)過(guò)程中所應(yīng)該遵循的規(guī)范與思想。不要把多個(gè)語(yǔ)句放在同一行里以免超過(guò)最大可接受寬度。 二、格式規(guī)范 在上一篇的java編程規(guī)范(一)中我們講述了在Java編碼中的一般原則,雖然這些原則并不涉及具體的代碼規(guī)范,但是這些原則卻是我們?cè)贘ava開(kāi)發(fā)過(guò)程中所應(yīng)該遵循的規(guī)范與思...
摘要:在上一篇的編程風(fēng)格學(xué)習(xí)二中我們學(xué)習(xí)了一些在編碼過(guò)程中的格式規(guī)范,遵循這些規(guī)范毋庸置疑是我們的書(shū)寫(xiě)高質(zhì)量代碼的前提與基礎(chǔ)。二語(yǔ)言編程規(guī)范常量命名常量的每個(gè)單詞均大寫(xiě),單詞之間使用下劃線連接。方法表示動(dòng)作,采用動(dòng)詞命名。 在上一篇的java編程風(fēng)格學(xué)習(xí)(二)中我們學(xué)習(xí)了一些在Java編碼過(guò)程中的格式規(guī)范,遵循這些規(guī)范毋庸置疑是我們的書(shū)寫(xiě)高質(zhì)量代碼的前提與基礎(chǔ)。今天我們更進(jìn)一步,一起來(lái)學(xué)習(xí)J...
閱讀 1956·2023-04-26 00:47
閱讀 1628·2021-11-11 16:55
閱讀 2809·2021-09-27 14:04
閱讀 3639·2021-09-22 15:58
閱讀 3619·2021-07-26 23:38
閱讀 2202·2019-08-30 13:47
閱讀 2046·2019-08-30 13:15
閱讀 1247·2019-08-29 17:09