动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Eclipse 走上榜首 照亮Java众生.
.1年Java历程的回顾、反思与展望(.
.利用java Api打印JTable.
.Java中正则表达式使用方法详解.
.java、J2EE基础问题汇总.
.J2ME蓝牙实战入门.
.Servlet基础例程-HelloServlet(L.
.开源技术:hibernate点滴.
.[JAVA100例]017、文件对话框.
.SpringSide推荐的JDK5.0 feature.
.基于MVC的Struts在财务系统中的应.
.优化entity Bean的七条准则.
.Merlin 的魔力:Java 联网增强技.
.Java基本语法(五)——控制流程.
.Java远程方法调用.
.Apache Tomcat 5.0.2x 的虚拟目录.
.Java中this、super用法简谈.
.Java建立Zip压缩文件.
.String 对象.
.wait,notify,sleep,join和线程同.

Java程序编码规范与技巧

发表日期:2008-1-5 |



  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 的来防止继续类使用他
上一篇:Java连接器架构:EAI的未来? 人气:564
下一篇:JAVA规则中级篇 人气:524
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-2 OpenPNE中文 v2.12.5 for win 中
2008-12-2 谷秋精品课程软件课程版 v2.3
2008-12-2 晴天电影系统(带一键迅雷/自定义
2008-12-2 QQip138闪字程序
2008-12-2 SmartWeb企业智能建站系统 v1.0.2
2008-12-2 梦想不死个人主页 v2009
2008-12-2 开良ASP小偷程序生成器 v1.1
2008-12-2 toolxp.cnalexa世界排名查询 php
2008-12-2 腾讯留言板 v1.3
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成