WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院WEB开发Jsp Java 程序编码规范与技巧 阅读

Java 程序编码规范与技巧

 2008-01-05 09:48:01 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫岄梺璇茬箲濮樸劑鍩€椤掍礁鍤柛鎾跺枎椤繐煤椤忓嫬鐎銈嗘礀閹冲酣宕滄导瀛樷拺闂侇偆鍋涢懟顖涙櫠椤斿墽纾煎璺猴功缁夎櫣鈧鍠栭…閿嬩繆濮濆矈妲烽梺绋款儐閹瑰洤螞閸愩劉妲堟繛鍡楃箲濞堟﹢姊绘担椋庝覆缂傚秮鍋撴繛瀛樼矤閸撶喖宕洪埀顒併亜閹烘垵鈧綊寮抽鍕厱閻庯綆浜烽煬顒傗偓瑙勬磻閸楀啿顕i崐鐕佹Ь闂佸搫妫寸粻鎾诲蓟閵娾晜鍋嗛柛灞剧☉椤忥拷
核心提示:java 程序编码规范 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,Java 程序编码规范与技巧,减少项目组中因为换人而带来的损失,(这些规范并不是一定要绝对遵守,最好在类文档中注明, 而不要将她定义为 final 的,但是一定要让程序有良好的可读性) Package 的命名 Pa

  java 程序编码规范
  命名规范
  定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)
  Package 的命名
   Package 的名字应该都是由一个小写单词组成。
  Class 的命名
  Class 的名字必须由大写字母开头而其他字母都小写的单词组成 Class
  变量的命名
  变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。
  Static Final 变量的命名
  Static Final 变量的名字应该都大写,并且指出完整含义。
  参数的命名
  参数的名字必须和变量的命名规范一致。
  数组的命名
  数组应该总是用下面的方式来命名:
  byte[] buffer;
  而不是: byte buffer[];
  方法的参数
  使用有意义的参数命名,假如可能的话,使用和要赋值的字段一样的名字:
  SetCounter(int size){
  this.size = size;
  }
  Java 文件样式
  所有的 Java(*.java) 文件都必须遵守如下的样式规则
  版权信息
  版权信息必须在 java 文件的开头,比如:
  /** * Copyright ? 2000 Shanghai XXX Co. Ltd.
  * All right reserved.
  */
  其他不需要出现在 javadoc 的信息也可以包含在这里。
  Package/Imports package 行要在 import 行之前,
  import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。
  假如 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。
  package hotlava.net.stats;
  import java.io.*;
  import java.util.Observable;
  import hotlava.util.application;
  这里 java.io.* 使用来代替InputStream and OutputStream 的。
  Class 接下来的是类的注释,一般是用来解释类的。
  /** * A class rePResenting a set of packet and byte counters
  * It is observable to allow it to be watched, but only
  * reports changes when the current set is complete
  */
  接下来是类定义,包含了在不同的行的 extends 和 implements public class
  CounterSet extends Observable
  implements Cloneable Class Fields
  接下来是类的成员变量:
  /** * Packet counter
  */
  protected int[] packets;
  public 的成员变量必须生成文档(JavaDoc)。
  proceted、private和 package 定义的成员变量假如名字含义明确的话,可以没有注释。
  存取方法
  接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话 ,可以简单的写在一行上。
  /** * Get the counters
  * @return an array containing the statistical data. This array has been
  * freshly allocated and can be modified by the caller.
  */
  public int[] getPackets() { return copyArray(packets, offset); }
  public int[] getBytes() { return copyArray(bytes, offset); }
  public int[] getPackets() { return packets; }
  public void setPackets(int[] packets) { this.packets = packets; }
  其它的方法不要写在一行上
  构造函数
  接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。
  访问类型 ("public", "private" 等.) 和 任何 "static", "final" 或 "synchronized" ?
  该在一行中 ,并且方法和参数另写一行,这样可以使方法和参数更易读。
  public CounterSet(int size){
  this.size = size;
  }
  克隆方法
  假如这个类是可以被克隆的,那么下一步就是 clone 方法:
  public Object clone() {
  try { CounterSet obj = (CounterSet)super.clone();
  obj.packets = (int[])packets.clone();
  obj.size = size; return obj;
  }catch(CloneNotSupportedException e) {
  throw new InternalError("UneXPected CloneNotSUpportedException: "
  + e.getMessage());
  }
  }
  类方法
  下面开始写类的方法:
  /** * Set the packet counters
  * (sUCh as when restoring from a database)
  */
  protected final void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
  throws IllegalArgumentException { // // Ensure the arrays are of equal size
  // if (r1.length != r2.length r1.length != r3.length
  // r1.length != r4.length)
  throw new IllegalArgumentException("Arrays must be of the same size");
  System.arraycopy(r1, 0, r3, 0, r1.length);
  System.arraycopy(r2, 0, r4, 0, r1.length);
  }
  toString 方法无论如何,每一个类都应该定义 toString 方法:
  public String toString() {
  String retval = "CounterSet: ";
  for (int i = 0; i < data.length(); i++) {
  retval += data.bytes.toString();
  retval += data.packets.toString();
  }
  return retval;
  }
  }
  main 方法
  假如main(String[]) 方法已经定义了, 那么它应该写在类的底部.
  代码编写格式
  代码样式
  代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)
  文档化
  必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的。
  缩进
  缩进应该是每行2个空格. 不要在源文件中保存Tab字符.
  在使用不同的源代码治理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.
  假如你使用 UltrEdit 作为你的 Java 源代码编辑器的话,
  你可以通过如下操作来禁止保存Tab字符,
  方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,
  然后用 FormatTabs to Spaces 菜单将 Tab 转换为空格。
  页宽
  页宽应该设置为80字符. 源代码一般不会超过这个宽度, 并导致无法完整显示,
  但这一设置也可以灵活调整. 在任何情况下, 超长的语句应该在一个逗号或者 一个操作符后折行. 一条语句折行后, 应该比原来的语句再缩进2个字符.
  {} 对 {} 中的语句应该单独作为一行.
  例如, 下面的第1行是错误的, 第2行是正确的:
  if (i>0) { i ++ }; // 错误, { 和 } 在同一行
  if (i>0) {
  i ++
  }; // 正确, { 单独作为一行
  } 语句永远单独作为一行. 假如 } 语句应该缩进到与其相对应的 {
  那一行相对齐的位置。
  括号
  左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格. 下面的例子说明括号和空格的错误及正确使用:
  CallProc( AParameter ); // 错误
  CallProc(AParameter); // 正确
  不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中。
  下面的例子说明错误和正确的用法:
  if ((I) = 42) { // 错误 - 括号毫无意义
  if (I == 42) or (J == 42) then // 正确 - 的确需要括号
  程序编写规范
  exit()
  exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。
  异常
  申明的错误应该抛出一个RuntimeException或者派生的异常。
  顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。
  垃圾收集
  JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:
  你必须在使用完对象的实例以后进行清场工作。比如一个prel的程序员可能这么
  写:
  ...
  {
  FileOutputStream fos = new FileOutputStream(projectFile);
  project.save(fos, "IDE Project File");
  }
  ...
  除非输出流一出作用域就关闭,非引用计数的程序语言, 比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:
  FileOutputStream fos = new FileOutputStream(projectFile);
  project.save(fos, "IDE Project File");
  fos.close();
  Clone
  下面是一种有用的方法:
  implements Cloneable public Object clone() {
  try {
  ThisClass obj = (ThisClass)super.clone();
  obj.field1 = (int[])field1.clone();
  obj.field2 = field2; return obj;
  } catch(CloneNotSupportedException e) {
  throw new InternalError("Unexpected CloneNotSUpportedException:
  " + e.getMessage());
  }
  }
  final 类绝对不要因为性能的原因将类定义为 final 的
  (除非程序要求这样定义) 假如一个类还没有预备好被继续,最好在类文档中注明,
  而不要将她定义为 final 的。这是因为没有人可以保证会不会由于什么原因需要继续她。
  访问类的成员变量
  大部分的类成员变量应该定义为 protected 的来防止继续类使用他

Tags:Java 程序 编码

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接