`

Java程序的编码规范(转载)

    博客分类:
  • java
阅读更多

转载地址:http://java.chinaitlab.com/base/2375.html

所有的程序开发手册都包含了各种规则。一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的。这不仅仅是为了开发效率来考虑,而且也是为了后期维护考虑。
  命名规范
  定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)
  ● 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 counters
   */
  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   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个空格,然后用 Format|Tabs 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()[/size][/size][/size]
分享到:
评论

相关推荐

    第五次作业函数第一题代码

    第五次作业函数第一题--

    基于深度学习的作物病害诊断内含数据集和运行环境说明.zip

    本项目旨在利用深度学习方法实现作物病害的自动诊断。作物病害是农业生产中的重要问题,及时诊断和处理对于减少产量损失至关重要。 我们采用深度学习算法,通过分析作物的图像,实现对病害的自动识别和分类。项目使用的数据集包括公开的作物病害图像数据集,如ISIC等,并进行了预处理,包括图像增强、分割和特征提取等。 在运行环境方面,我们使用Python编程语言,基于TensorFlow、PyTorch等深度学习框架进行开发。为了提高计算效率,我们还使用了GPU加速计算。此外,我们还采用了Docker容器技术,确保实验结果的可重复性。 项目完成后,将实现对作物病害的快速、准确诊断,为农业生产提供有力支持,有助于减少产量损失。同时,项目成果也可应用于其他图像识别和分类任务。

    机械设计CD驱动印刷设备step非常好的设计图纸100%好用.zip

    机械设计CD驱动印刷设备step非常好的设计图纸100%好用.zip

    tensorflow-2.7.2-cp37-cp37m-manylinux2010-x86-64.whl

    python烟花代码

    python烟花代码示例

    附件中是一个简单的烟花效果的代码示例: 在Python中,可以使用多种方式来模拟烟花效果,其中一种常用的方法是使用turtle模块,它提供了一个画布和一个小海龟,可以用来绘制各种图形。 这段代码首先导入了turtle模块和random模块,然后在屏幕上绘制了10次烟花爆炸的效果。每次爆炸都是由5个小圆组成,颜色随机选择,圆的大小也是随机的。 请注意,这段代码需要在支持turtle模块的Python环境中运行,并且需要有图形界面的支持。如果你在没有图形界面的环境中(比如某些服务器或者命令行界面),这段代码可能无法正常运行。

    商业化产品经理,到底如何实现产品商业化?.docx

    商业化产品经理,到底如何实现产品商业化?.docx

    Panduit 工业以太网部件内部销售指南

    Panduit 工业以太网部件内部销售指南

    Java版三维装箱代码示例

    在Java中,实现一个三维装箱(也称为三维背包问题)的算法通常涉及到组合优化和动态规划。这个问题是一个典型的优化问题,其中目标是在三个维度的限制下最大化价值的总和。下面是一个简单的Java代码示例,它使用动态规划来解决三维装箱问题。 请注意,这个代码只是一个简单的示例,它假设所有物品的第三个维度的大小都是1,并且没有给出如何回溯选择物品的完整逻辑。在实际应用中,三维装箱问题可能更加复杂,需要考虑所有三个维度的限制,并且可能需要更复杂的算法来解决。 此外,这个问题的解决方案可能需要根据具体问题的要求进行调整,例如物品是否可以分割、是否允许超过一个的物品等。如果你有特定的问题描述或者需要进一步的帮助,请提供更多的细节。

    常用品牌EPLAN部件库

    常用品牌EPLAN部件库

    单片机开发的教程.doc

    单片机开发的教程可以分为以下几个步骤: 1. 了解单片机基础知识:在学习单片机开发之前,需要了解单片机的相关知识,包括单片机的基本结构、指令系统、编程语言等。 2. 选择开发板:选择一款适合自己学习开发板的型号和厂商,通常需要关注开发板的性价比、开发环境是否友好等因素。 3. 学习开发环境:根据所选的开发板,学习相关的开发环境和使用方法,例如Keil、IAR等集成开发环境。 4. 掌握编程语言:单片机常用的编程语言包括C语言和汇编语言,根据实际情况选择其中一种进行学习。 5. 基础操作:熟悉单片机的引脚定义和IO口配置,了解单片机的启动代码,可以通过修改启动代码进行基本功能调试。 6. 综合实践:根据具体项目需求,进行单片机开发的综合实践。在实践中需要掌握如何编写程序、如何进行硬件调试、如何使用相关工具软件等技能。 下面是一个单片机开发的简单教程介绍: 首先,确定所使用的单片机型号和开发板类型。在这个阶段,需要查阅相关资料,了解开发板的规格书、芯片规格等基本资料。 其次,安装并配置开发环境。根据所选的开发板,安装相应的集成开发环境(IDE),并配置好开发环境。 接着,学习并掌

    Q1.ipynb

    Q1.ipynb

    (自适应手机端)IT网络建站公司pbootcms模板 互联网营销企业网站源码下载.zip

    (自适应手机端)IT网络建站公司pbootcms模板 互联网营销企业网站源码下载.zip

    Bematech 激光扫描器用户手册

    Bematech 激光扫描器用户手册

    激励视频接入文档.pdf

    激励视频接入文档.pdf

    java jdk1.8 202版本下载window linux打包

    java jdk1.8 202版本下载window linux打包

    Lite Beam M5快速指南 Lite Beam M5天线设置指南

    Lite Beam M5快速指南

    互联网金融导论.docx

    互联网金融导论.docx

    字节跳动青训营-抖音项目

    字节跳动青训营——抖音项目

    node-v12.22.10-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v12.12.0-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics