java编程宝典

c#小王子 c#小王子 2021-09-28 679 Java





java编程宝典


Java 程序编码规范



内容:


命名惯例


Java文件样式


代码编写格式


程序编写


编程技巧


Swing


调试


性能


可移植性


 所有的程序开发手册都包含了各种规则。一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的。这不仅仅是为了开发效率来考虑,而且也是为了后期维护考虑。

命名规范

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)


  • 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 < 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个空格,然后用 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()
    {
      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 的来防止继承类使用他们。
  • 注意,要用"int[]
  • packets",而不是"int packets[]",后一种永远也不要用。


    public void setPackets(int[] packets) { this.packets = packets; }

      CounterSet(int size)
        {
          this.size = size;
        }


【下载地址】

百度网盘链接:https://pan.baidu.com/s/13FpKajNASRVXCL0o9xJ4ig

提取码:6gfx


相关文章


使用-JFreeChart来创建基于web的图表

使用-JFreeChart来创建基于web的图表

XStream使用文档

XStream使用文档

WebService发布过程及常见问题

WebService发布过程及常见问题

webpack实战入门进阶调优分享

webpack实战入门进阶调优分享

weblogic调优参数及监控指标

weblogic调优参数及监控指标

weblogic节点管理

weblogic节点管理

weblogic管理控制台概述

weblogic管理控制台概述

weblogic-部署和启动

weblogic-部署和启动

WebLogic-Server-性能及调优-调优-Java-虚拟机

Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。

Velocity用户教程

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

Velocity用户手册

Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。


文章热度: 166291
文章数量: 333
推荐阅读

FlashFXP绿色版网盘下载,附激活教程 1782

FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具

Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1565

firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ

navicat for mysql中文绿色版网盘下载 1623

Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq

火车头采集器(旗舰版)绿色版网盘下载 1707

火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA

Photoshop(CS-2015-2023)绿色中文版软件下载 1824

安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64

知之

知之平台是全球领先的知识付费平台。提供各个领域的项目实战经验分享,提供优质的行业解决方案信息,来帮助您的工作和学习

使用指南 建议意见 用户协议 友情链接 隐私政策 Powered by NOOU ©2020 知之