java編程規範,java編程

來源:互聯網
上載者:User

java編程規範,java編程

 

說明:

對於開發工具自動產生的程式碼可以不一致

 

 

說明:

for(…)

{

…//your code

}

 

 

說明:

if(filename != null

&& new File(logPath+filename).length() < logConfig.getFileSize())

   {

       …//your code

}

 

說明:

LogFilename wow = null;

LogFilename that = null;

 

說明:

if(writeToFile)

{

    writeFileThread.interrupt();

}

 

說明:

if(log.getLevel() < log.getRecord())

{

   return ;

}

//空行

LogWrite writer;

 

說明:

以免使用不同的編輯器閱讀程式時,因TAB鍵所設定的空格數不同而造成程式布局不整齊,JBuildr,UltraEdit等編輯環境,支援行首TAB替換成空格,應將該選項開啟

 

說明:

採用這種鬆散方式編寫代碼目的是讓程式更加清晰,由於空格所產生的清晰性是相對的,所以在已經很清晰的語句中沒有必要留空格,如果語句已足夠清晰,則括弧內側(即左括弧後面和右括弧前面)不需要加空格,多重括弧間不必加空格,因為java中括弧已經是很清晰的標誌了.在長句中,如果需要加的空格非常多,那麼應該保持整體清晰,而在局部中不加空格,給操作符留空格時不要連續留兩個以上空格

 

說明:

類定義:{

            類公有屬性定義;

            類保護屬性定義;

            類私人屬性定義;

            類公有方法定義;

            類保護方法定義;

            類私人方法定義;

}

 

 

說明:

     <html>

     <body>

     <p>一句話描述

     <p>詳細描述

     <p>產品模組

     <br>公司版本資訊

     </body>

     </html>

 

    

說明:

       /*

        *檔案名稱

        *著作權

        *描述

        *修改人

        *修改時間

        *修改內容

        *跟蹤單號

        *修改單號

     */

 

 

說明:

/**

 *<一句話功能簡述>

 *<功能詳細描述>

 *@author

 *@version

 *@see [相關類/方法]

 *@since [產品/模組版本]

 *@deprecated (表示不建議使用該類或者介面)

 

 

 

說明:

/**

 *@param

 *@return

 *@exception /throws

 */

 

 

 

 

說明:

這樣比較清楚程式編寫者的意圖,有效防止無故遺漏break語句

 

 

 

說明:除非必要,在使用縮寫時或之前,應對縮寫進行必要的說明

 

說明:除非必要,不應在代碼或運算式中間插入注釋,否則容易使代碼可理解性變差。

 

 

樣本.如下注釋意義不大。

   //如果receiveFlag為真。

   If(receiveFlag)

而如下的注釋則給出了額外有用的資訊。

//如果從連結收到資訊

If(receiveFlag)

 

說明:當程式碼片段較長,特別是多重嵌套時,這樣做可以使代碼更清晰,更便於閱讀。

樣本:參見如下例子。

    If(……)

    {

        program  code1

 

        while(index <MAX_INDEX)

{

             program  code2

} / /end  of  while(index <MAX_INDEX)/ /指明該條while語句結束。

} / /end  of  If(……)  / /指明是哪條if語句結束。

 

 

說明:偵錯工具的時候可以方便的使用/*……*/注釋掉一長段程式。

 

說明:JavaDoc工具收集簡介的時候使用選取第一句話。

 

樣本:如下是對設定屬性的流程注釋。

      //1.判斷輸入參數是否有效。

      ……

      //2.設定本地變數

      ……

 

樣本:這裡主要是對閏年演算法的說明。

      //1.如果能被4整除,是閏年;

      //2.如果能被100整除,不是閏年;

      //3.如果能被400整除,是閏年;

 

格式:  com.huawei.產品名.模組名稱

        com.huawei.部門名稱.項目名稱

樣本:  融合WEBSMAP包名  com.huawei.iin.websmap

        通用訊息轉寄包名     com.huawei.insa2.msgtrans

 

樣本:OrderInformation,CustomerList,LogManager,LogConfig,SmpTransation

 

樣本:  private void calculateRate();

        public void addNewOrder();

 

格式:  get+非布爾屬性名稱()

         set+ 屬性名稱()

         is+布爾屬性名稱()

動詞()

動詞+賓語()

樣本:public String getType();

      public boolean isFinished();

      public void setVisible(boolean);

      public void addKeyListener(Listener);

樣本: private customerName;

       private orderNumber;

       private smpSession;

 

樣本:public final static int MAX_VALUE=1000;

      public final static String DEFAULT_START_DATE=“2008-11-06”;

 

樣本:public class Person

{

private String name;

private static List properties;

 

public void setName(String name)

{

       this.name=name;

}

 

public void setProperties (List properties)

{

       Person. Properties= properties;

}

 

}

 

樣本:Application類型的,命名以App結尾---MainApp;

          Frame類型的,建議命名以Frame結尾---TopoFrame;

Panel類型的,建議命名以Panel結尾—CreateCircuitPanel;

Bean類型的,建議命名以Bean結尾---DataAccessBean;

EJB類型的,建議命名以EJB結尾--DBProxyEJB;

Applet類型的,建議命名以Applet結尾---PictureShowApplet;

 

樣本:getCustomerInformation()改為getCustomerInfo()

 

樣本:protected void setUserName()

      private void calculateRate()

 

樣本:customes;orderItems

 

說明:雖然為僅用一兩行就可以完成的功能去編寫方法好像沒有必要,但用方法可使功能明確化,增加程式可讀性,亦可方便維護、測試。

 

說明:對於模組間介面方法參數的合法性檢查這一問題,往往有兩個極端現象,即:要麼是調用者和被調用者對參數均不作合法性檢查,結果就遺漏了合法性檢查這一必要的處理過程,造成問題隱患,要麼就是調用者和被調用者均對參數進行合法性檢查,這種情況雖不會造成問題,但產生了冗餘代碼,降低了效率。

 

說明:劃分類的時候,應該盡量把邏輯處理、資料和顯示分離。實作類別功能的單一性。

樣本:資料類不能包含數組處理的邏輯

      通訊類不能包含顯示處理的邏輯

 

說明:父類如果實現了比較合理的toString(),子類可以繼承不必再重寫。

樣本:   public TopoNode

         {

              private String nodeName;

            

              public String toString()

{

     Return“NodeName:”+nodeName;

}

 

樣本:try

{

      //……

}

Catch(IOException ioe)

{

      //……

}

finally

{

            try

{

          out.close();

}

catch(IOException ioe)

{

          //……

}

}

100.不定義在包中沒有被用到的友好的屬性,方法和類

101.沒有子類的友好類應該定義為final方法定義為final

102.資料庫操作,IO操作等需要使用結束close()的對象必須try-catch-catch-finally的finally中close().

103.為switch語句提供一個default選項

104.不要在for迴圈體中對計數器賦值

105.不要給非公有類定義public構造器

106.不要對浮點數進行比較運算 如== != 減少<  ,>運算

107.實現equals() 方法時先用getClass()或者instanceof進行類型比較通過後才能繼續比較

108.不要重載main()方法用作除入口以外的其它用途

109.方法的參數後不要和類中的方法名相同

110.除了構建器外,不要使用和類名相同的方法名

111.不要定義Error和RuntimeException的子類,可以定義Exception的子類

112.線程中需要實現run()方法

113.使用equals()比較兩個類的值是否相同

114.字串和數字運算結果串連的時候,應該是把數字運算部分用小括弧括起來

115.類中不要使用非私人(公有,保護,友好)的非靜態屬性

116.在類中對於沒有實現的介面應該定義成抽象方法,類應該定義成抽象類別

117.不要顯示匯入java.lang.*包

118.初始化時不要使用類的非靜態屬性

119.顯示初始化時所有的局部變數,

120.按照方法名把方法排序放置,同名和同類型的方法應該放在一起

121.不要在抽象類別的構造器中調用抽象方法

122.重載equals()方法時應該重載hashcode()方法

123.工具類不要定義構造器包括私人構造器

124.不要在switch中使用10個以上的case語句

125.把main()方法放在類的最後

126.生命方法違例的時候不要使用Exception應該使用它的子類

127.不要直接扔出一個error 應該扔出它的子類

128.在進行比較的時候,總是把常量放在同一邊

129.在可能的情況下,總是為類定義一個預設的構造器

130.在捕捉異常的時候不使用Exception ,, RuntimException,,,, Throwable 最好用它子類

131.在介面和工具類中定義常量,

132.使用大寫”L”表示long常量

133.方法需要同樣數量參數的注釋用@param

134.不要在注釋中使用不支援的標示@unsupported

135.不要使用Runtime,exec()方法

136.不要使用自訂本地方法

137.使用集合時初始化容量

 

138.不要在迴圈體內調用同步方法和使用複雜的運算式

139.不要在迴圈體內定義變數,

140.使用StringBuffer時初始化容量

141.少用!

142.儘可能對介面進行instanceof運算

 

143.不要顯示調用finalize()

144.不要使用靜態集合 其記憶體佔用增長沒有界限

145.不要重複調用一個方法擷取對象,使用局部變數重用對象

146.線程中用notifyAll() 代替notify();

147.避免在同步方法中調用另一個同步方法造成的死結,

148.非同步方法中不能調用wait() notify()方法

149.不要使用同步方法,使用同步塊

150.用wait() notify() 代替while() sleep(),

151.把所有的公有方法定義為同步方法

152.實現Runable,run() 方法必須是同步方法

153.在clone()方法中應該而且必須使用super.clone() 而不是new

154.使用StringTokenizer代替indexof() 和substrin()

155.不要對參數進行賦值

156.不要使用String類的compareTo() equals()方法

157.不要使用servler的SingletThreadModel 會消耗大量資源

158. 在Switch中每個Case語句都應該包含break或者return。

159. 不要使用空的for, if,,while語句。

160. 在運算中不要減小資料的精度。

161. Switch語句中的Case關鍵字要和後面的常量保持一個空格,Switch語句中不要定義Case之外的無用標籤。

162. 不要在if語句中使用等號=進行賦值操作。

163. 靜態成員或者方法使用類名訪問,不使用控制代碼訪問。

164. 方法重載的時候,一定要注意方法名相同,避免類中使用兩個非常相似的方法名。

165. 不要在ComponentListener,ComponentResized()方法中調用serResize()方法。

166. 不要覆蓋父類的靜態方法和私人方法。

167. 不要覆蓋父類的屬性。

168. 不要使用兩級以上的內部類。

169. 把內部類定義成私人類。

170. 去掉介面中多餘的定義(不使用public,abstrac,static,final等,這是介面中預設的)。

171. 不要定義不會被用到的局部變數,類私人屬性,類私人方法和方法參數。

172. 顯式寢化所有的靜態屬性。

173. 不要使用System  getenr()方法。

174. 不要寫入程式碼’\n’和’\r’作為分行符號號。

175. 不要直接使用java.awt.peer.*裡面的介面。

176. 使用System .arraycopy(),不要使用迴圈來複製數組。

177. 避免不必要的instenceof比較運算和類造型運算。

178. 不要在finalize()方法中刪除臨聽器(listeners)。

179. 在finalize()方法中一定要調用super finalize()方法。

180. 在finalize()方法中的finally中調用super finalize()方法。

181. 進行字元轉換的時候應該儘可能的較少用臨時變數。

182. 使用Object stream的方法後,調用reset()釋放對象。

183. 線程同步中,在迴圈裡面使用條件測試(使用while(isWait) Wait()代替if(isWait) Wait())。

184. 不使用Thread類的resume(),suspend(),stop()方法。

185. 減小單個方法的複雜性度,使用的if,while,for,switch語句要在10個以內。

186. 在Servlet中,重用JDBC串連的資料來源。

187. 減少在Servlets中使用的同步方法。

188. 不定義在包中沒有被用到的友好屬性,方法和類。

189. 沒有子類的友好類應該定義成final。

190. 沒有被覆蓋的友好方法應該定義成final。

191. 為Switch語句提供一個default選項。

192. 不要在for迴圈體中對計數器的賦值。

193. 不要給非公有類定義public構建器。

194. 不要對浮點數進行比較運算,尤其是不要進行==,!=運算,減少><運算。

195. 實現equals()方法時,先用getclass()或者instanceof進行類型比較,通過後才能繼續比較。

196. 不要重載main()方法用作除放口以外的其他用途。

197. 方法的參數名不要和類中方法名相同。

198. 除了構建器外,不要使用和類名相同的方法名。

199. 不要定義Error和RuntimeException的子類,可以定義Exception了子類。

200. 線程中需要實現run()實現。

201. 使用equals()比較兩個類的值是否相同。

202. 字串和數字運算結果相串連的時候應該把數字運算部分用小括弧括起來。

203. 類中不要使用非私人(公月,保護和友好)的非靜態屬性。

204. 在類中對於沒有實現的介面,應該定義成抽象方法,類應該定義成抽象類別(5級)

205. 不要顯示匯入Java.lang.*包。

206. 初始化時,不要使用類的非靜態屬性。

207. 顯示初始化所有的局部變數。

208. 按照方法名把方法排序放置,同名合約類型的方法應該放在一起。

209. 不要使用嵌套賦值,即在一個運算式中使用多個=。

210. 不要在抽象類別的構建器中調用抽象方法。

211. 重載equals()方法的同時,也應該重載hush code()方法。

212. 工具類(utility)不要定義構建器。包括私人構建器。

213. 不要在switch中使用10個以上的case語句。

214. 把main()方法放在類的最後。

215. 聲明方法違例的時候不要使用Exception,應該使用它的子類。

216. 不要直接仍出Error,應該扔出它的子類。

217. 在進行比較的時候,總是把常量放在同一邊(都放在左邊或者都放在右邊)。

218. 在可能的情況下,總是為類定義一個預設的構造器。

219. 在捕獲違例的時候,不使用Exception,runtimeException,Throwable儘可能使用它們的子類。

220. 在介面或者工具類中定義常量(5級)。

221. 使用大寫“L”表示Long常量(5級)。

222. main()方法必需是public static void main(String[])。

223. 對傳回型別為boolean的方法使用is開頭,其它類型的不能使用。

224. 對非boolean類型取值方法(getter)使用get開頭,其它類型的不能使用。

225. 對於設定值的方法(setter)使用set開頭,其它類型不能使用。

226. 方法需要有同樣數量參數的注釋@param。

227. 不要在注釋中使用不支援的標記,如:@unsupported.

228. 不要使用Runtime,exec()方法。

229. 不要自訂本地方法(native method)。

230. 使用盡量簡潔的運算子號。

231. 使用集合時設定初始容量。

232. 單個首字元的比較使用charAt()不要使用startsWith()。

233. 對於被除數或者被乘數為2的N次方的乘除運算使用移位元運算符>>,<<。

234. 一個字元的串連使用’’而不使用“”,如:String a=b+’c’。

235. 不要在迴圈體內調用同步方法和使用try-catch塊。

236. 不要使用不必要的布爾值比較,如:if(a equals(b)),而不是if(a equals(b)==true)。

237. 常量字串使用String,非常量字串使用StringBuffer。

238. 在迴圈條件判斷的時候不要使用複雜的運算式。

239. 對於”if(condition)do1;else do2;”語句使用條件操作符“if(condition)?do1:do2”。

240. 不要在迴圈體內定義變數。

241. 使用StringBuffer的時候設定初始容量。

242. 儘可能的使用局部變數進行運算。

243. 儘可能少的使用“!”操作符。

244. 儘可能的對介面進行instanceof運算。

245. 不要使用Date[],而要使用long[]替代。

246. 不要顯式調用finalize()。

247. 不要使用靜態集合,其記憶體佔用增長沒有邊界。

248. 不要重複調用一個方法擷取對象,使用局部變數重用對象。

249. 線程同步中,使用notifyAll()代替notify()

250. 避免在同步方法中不能調用另一個同步方法造成死結。

251. 非同步方法中不能調用wait(),notify()方法。

252. 使用wait(),notify()代替while(),sheep().

253. 不要使用同步方法,使用同步塊(5級)。

254. 把所有的公有方法定義為同步方法(5級)。

255. 實現的Runnable run()方法必須是同步方法(5級)。

256. 一個只有abstract方法final static 屬性的類應該定義成介面。

257. 在clone()方法中應該而且必須使用super clone()而不是new.

258. 常量必須定義為final.

259. 在for迴圈中提供終止條件。

260. 在for,while迴圈中使用增量計數。

261. 使用String Tokenizer代替indexof()和substring.

262. 不要在構造器中使用非final方法。

263. 不要對參數進行賦值操作。

264. 不要通過名字比較兩對象的類,應該使用getclass().

265. 安全:盡量不要使用內部類。

266. 安全:盡量不要使用類可以複製。

267. 安全:盡量不要使用介面可以序列化。

268. 安全:盡量不要使用友好方法,屬性和類。

269. servlet:不要使用Javabeans Beans instantiate()方法。

270. servlet:不要使用Http Session時,應該儘早使用inralidate方法釋放.

271. servlet:不要使用JDBC資源時,應該使用close()方法釋放.

272. servlet:不要使用servlet的Single Thread Monde,會消耗大量資源。

273. 國際化:不要使用一個字元進行邏輯操作,使用Messag Format

274. 國際化:不要使用Date to String(),Time to String()方法。

275. 國際化:字元和字串常量應該放在資源檔中

276. 國際化:字元使用數字toString()方法。

277. 國際化:不要使用StringBuffer String Tokenizer類。

278. 國際化:不要使用String 類的compareTo(),equals()方法。

279. 複雜度:建議最大規模:

280. 繼承層次    5層

281. 類的行數    1000行(包含{})                                                             

282. 類的屬性    10個

283. 類的方法     20個

284. 類的友方法    10個

285. 類私人方法    15個

286. 類保護方法     10個

287. 類公有方法     10個

288. 類調用方法     20個

289. 方法參數       5個

290. Return語句      1個

291. 方法行數       30行

292. 方法代碼       20

293. 注釋比率       30%``50%            

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.