Java 编码规范推荐-转载

http://wiki.springside.org.cn/display/springside/Coding+Standards

SpringSide代码规范

前言

    本文档反映的是SpringSide 团队的编码规范,同时推荐所有使用SpringSide框架的开发人员遵循。

    本文档基本遵循Sun's Coding Conventions,补充了其中没有说明或者有所改动的地方。

版权声明   

    本规范由springside团队维护,相关评论与意见请发至springside@gmail.com,转载请注明出处。

规范等级说明

  • 级别I:   默认级别,要求所有项目中的所有成员遵守。
  • 级别II:  建议所有项目中的所有成员遵守。
  • 级别III: 鼓励各个项目根据实际情况执行。

1.格式与命名规范(Formating and Naming Conventions)

1.1  缩进

  使用Tab缩进,而不是空格键--将缩进2,4,8字符的选择权留给阅读者。

1.2 换行

   每行120字符--因为已是1024*768的年代。

   if,for,while语句只有单句时,如果该句可能引起阅读混淆,需要用" {"和"}"括起来,否则可以省略。

//错误,需要使用花括号{}括起来
if (condition)
    if(condition) doSomething();
else
    doSomething();

1.3 命名规则 

  • 不允许使用汉语拼音命名 
  • 遇到缩写如XML时,仅首字母大写,即loadXmlDocument()而不是loadXMLDocument()
  • Package名必须全部小写,尽量使用单个单词
  • Interface名可以是一个名词或形容词(加上'able','ible', or 'er'后缀),如Runnable,Accessible。
    为了基于接口编程,不采用首字母为I或加上IF后缀的命名方式,如IBookDao,BookDaoIF。
  • 页面部件名建议命名为:btnOK、lblName或okBtn、nameLbl。(II)
    其中btn、lbl缩写代表按钮(Button)、标签(Label)。
  • 局部变量及输入参数不要与类成员变量同名(get/set方法与构造函数除外)

1.4 声明

  • 修饰符应该按照如下顺序排列:public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp。
  • 类与接口的声明顺序(可用Eclipse的source->sort members功能自动排列): 
    1. 静态成员变量 / Static Fields
    2. 静态初始化块 / Static Initializers
    3. 成员变量 / Fields
    4. 初始化块 / Initializers
    5. 构造器 / Constructors
    6. 静态成员方法 / Static Methods
    7. 成员方法 / Methods
    8. 重载自Object的方法如toString(), hashCode() 和main方法
    9. 类型(内部类) / Types(Inner Classes)

     同等的类型,按public, protected, private的顺序排列。

2.注释规范(Document Convertions)

2.1 注释类型

2.1.1 JavaDoc注释

  略。

2.1.2 失效代码注释

  由/*...*/界定,标准的C-Style的注释。专用于注释已失效的代码。

/*
 * Comment out the code
 * String s = "hello";
 * System.out.println(s);
 */
2.1.3 代码细节注释

  由//界定,专用于注释代码细节,即使有多行注释也仍然使用//,以便与用/**/注释的失效代码分开

  除了私有变量外,不推荐使用行末注释。

class MyClass {

    private int myField; // An end-line comment.

    public void myMethod {

       //a very very long
       //comment.
       if (condition1) {
          //condition1 comment
          ...
        } else {
          //elses condition comment
          ...
        }
    }
}

2.2 注释的格式

  • 注释中的第一个句子要以(英文)句号、问号或者感叹号结束。Javadoc生成工具会将注释中的第一个句子放在方法汇总表和索引中。
  • 为了在JavaDoc和IDE中能快速链接跳转到相关联的类与方法,尽量多的使用@see xxx.MyClass,@see xx.MyClass#find(String)。
  • Class必须以@author 作者名声明作者,不需要声明@version与@date,由版本管理系统保留此信息。(II)
  • 如果注释中有超过一个段落,用<p>分隔。(II)
  • 示例代码以<pre></pre>包裹。(II)
  • 标识(java keyword, class/method/field/argument名,Constants) 以<code></code>包裹。(II)
  • 标识在第一次出现时以{@linkxxx.Myclass}注解以便JavaDoc与IDE中可以链接。(II)

2.3 注释的内容

2.3.1 可精简的注释内容

    注释中的每一个单词都要有其不可缺少的意义,注释里不写"@param name -名字"这样的废话。
    如果该注释是废话,连同标签删掉它,而不是自动生成一堆空的标签,如空的@param name,空的@return。

2.3.2 推荐的注释内容
  • 对于API函数如果存在契约,必须写明它的前置条件(precondition),后置条件(postcondition),及不变式(invariant)。(II)
  • 对于调用复杂的API尽量提供代码示例。(II)
  • 对于已知的Bug需要声明。(II)
  • 在本函数中抛出的unchecked exception尽量用@throws说明。(II)
2.3.3 Null规约

   如果方法允许Null作为参数,或者允许返回值为Null,必须在JavaDoc中说明。
   如果没有说明,方法的调用者不允许使用Null作为参数,并认为返回值是Null Safe的。

/**
 * 获取对象.
 *
 * @ return the object to found or null if not found.
 */
Object get(Integer id){
    ...
}
2.3.4 特殊代码注释
  • 代码质量不好但能正常运行,或者还没有实现的代码用//TODO: 或 //XXX:声明 
  • 存在错误隐患的代码用//FIXME:声明

3.编程规范(Programming Conventions)

3.1基本规范

  1. 当面对不可知的调用者时,方法需要对输入参数进行校验,如不符合抛出IllegalArgumentException,建议使用Spring的Assert系列函数。 
  2. 隐藏工具类的构造器,确保只有static方法和变量的类不能被构造实例。
  3. 变量,参数和返回值定义尽量基于接口而不是具体实现类,如Map map = new HashMap();
  4. 代码中不能使用System.out.println(),e.printStackTrace(),必须使用logger打印信息。

3.2 异常处理

  1. 重新抛出的异常必须保留原来的异常,即throw new NewException("message", e); 而不能写成throw new NewException("message")。
  2. 在所有异常被捕获且没有重新抛出的地方必须写日志。 
  3. 如果属于正常异常的空异常处理块必须注释说明原因,否则不允许空的catch块。
  4. 框架尽量捕获低级异常,并封装成高级异常重新抛出,隐藏低级异常的细节。(III)

3.3 代码度量

3.3.1 耦合度度量
  • DAC度量值不要不大于7 ( III )
    解释:DAC(Data Abstraction Coupling)数据抽象耦合度是描述对象之间的耦合度的一种代码度量。DAC度量值表示一个类中有实例化的其它类的个数。
  • CFO度量值不要不大于20 ( III )
    解释:CFO(Class Fan Out)类扇出是描述类之间的耦合度的一种代码度量。CFO度量值表示一个类依赖的其他类的个数。
3.3.2 方法度量
  • 方法(构造器)参数在5个以内 ( II )
    太多的方法(构造器)参数影响代码可读性。考虑用值对象代替这些参数或重新设计。
  • 方法长度150行以内 ( II )
  • CC 度量值不大于10(III )
    解释:CC(CyclomaticComplexity)圈复杂度指一个方法的独立路径的数量,可以用一个方法内if,while,do,for,catch,switch,case,?:语句与&&,||操作符的总个数来度量。
  • NPath度量值不大于200 ( III )
    解释:NPath度量值表示一个方法内可能的执行路径的条数。
3.3.3 其他度量
  • 布尔表达式中的布尔运算符(&&,||)的个数不超过3个(III) 
  • if语句的嵌套层数3层以内(II)
  • 文件长度2000行以内(II)
  • 匿名内部类20行以内 ( II )
    太长的匿名内部类影响代码可读性,建议重构为命名的(普通)内部类。

3.4 JDK5.0

  1. 重载方法必须使用@Override,可避免父类方法改变时导致重载函数失效。
  2. 不需要关心的warning信息用@SuppressWarnings("unused"), @SuppressWarnings("unchecked"), @SuppressWarnings("serial") 注释。

4.自动代码检查

   使用EclipseInellij IDEA的代码校验功能已经排除了很多问题。

   再配合使用CheckstylePMDFindBugs三重检查,总共五层的校验涵盖了Java编码大部分的Guide Line。

   如果要求不苛刻,可以只使用Eclipse或IDEA 搭配 Checkstyle的两重保湿效果。

  1. Eclipse:在Windows->Preferences->Java-Compiler->Errors/Warnings中,按本文档将一些原来Ignore的规则打开。
    也可以将springside团队预设在/tools/codereviewer/eclipse.check.prefs的内容拷贝到项目的.setting/org.eclipse.jdt.core.prefs 文件中。
  2. IDEA:在Setting->Errors中设定规则,调用Analyzer->Inspece Code进行校验。
  3. CheckStyle:安装CheckStyle的Eclipse插件,在Windows->Preferences->CheckStyle导入springside团队预设在/tools/codereviewer/springside_check.xml的规则。
  4. PMD:安装PMD的Eclipse插件,Windows->Preferences->PMD清除原来所有规则,导入springside团队预设在/tools/codereviewer/springside_pmd.xml的规则。
  5. FindBugs:安装FindBugs的Eclipse插件,在项目属性->FindBugs中,取消下列警告MS/EI/EI2/ , SnVI/SE/WS/RS ,ST/NP/UwF/SS/UuF|UrF|SIC。
ADS仿真过孔阻抗(via designer) 目录一、将PCB层叠导入ADS(个人习惯)二、过孔的参数化设置三、过孔的仿真四、仿真结果查看五、导出仿真结果和模型六、过孔的经验法则欢迎交流,欢迎转载转载请注明出处~ 工具:Via Designer Via Designer 调用的是ADS EMPro 仿真引擎,采用的FEM(三维全波有限元法)。 优点: 1、利用ADS已经做好的参数化和流程化的设计,不需要工程师完成过孔的建模这一繁琐的过程。 2、可以输出EMmodule 完成原理图协仿真。 一、将PCB层叠导入ADS(个人习惯) 个人认为在ADS中设置 阅读详情

相关推荐

基于MATLAB的变分模态分解(VMD)算法详解

变分模态分解(VMD)是一种先进的信号处理方法,通过变分框架将复杂信号分解为多个模态分量。相比传统经验模态分解(EMD),VMD具有坚实的数学基础,能有效抑制模态混叠和端点效应。其核心思想是将信号分解转化为约束优化问题,通过交替方向乘子法迭代求解各模态的中心频率和带宽。VMD在机械故障诊断、生物医学信号处理等领域展现出优越性能,尤其适合处理非平稳非线性信号。该算法通过严格的数学模型实现自适应频谱优化,为信号分析提供了更可靠的工具。

qq_42212808的博客 682

SpringSide的Coding Standards

前言       本文档反映的是SpringSide 团队的编码规范,同时推荐所有使用SpringSide框架的开发人员遵循。    本文档基本遵循Suns Coding Conventions,补充了其中没有说明或者有所改动的地方。   本文档随SpringSide的开发而不断更新,最新版本请访问SpringSide Wiki:        http://wiki.springs

花钱的年华 5650

【OpenClaw从入门到精通】第41篇:2026年4月最新版——从零开始搭建你的第一个安全AI助理(保姆级实战教程)

2026年3月CNCERT联合发布《OpenClaw安全使用实践指南》后,安全部署成为OpenClaw使用的核心前提。本文针对新手及进阶用户,基于官方安全指引,提供三套实战部署方案:阿里云一键部署(新手首选)、Docker容器隔离部署(进阶推荐)、本地安全安装(测试专用),并详解阿里云百炼Coding Plan API接入流程。全文涵盖环境准备、分步实操、安全加固、问题排查等全流程,所有命令可直接复制执行,无需依赖外部代码库。通过本文,读者可零基础搭建安全隔离的OpenClaw AI助理,兼顾实用性与安全性

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2138

Java编程规范-代码度量

1耦合度度量 DAC 度量值不要大于 7 解释: DAC(Data Abstraction Coupling) 数据抽象耦合度是描述对象之间的耦合度的一种代码度量。 DAC 度量值表示一个类中有实例化的其它类的个数。 实例化其他类是指其他类的对象作为这个类的成员变量,并且由这个类主动创建这个类的实例。比如一下代码: public class B{ ….. } public class A{ B bMember = new B ; } 在这种情况下, A 的 DAC

想着百万年薪努力的小赵 995

Clang、Infer、OCLint、SwiftLint静态分析

OCLint 是基于 Clang Tooling开发的静态分析工具,主要用来发现编译器检查不到的那些潜在的关键技术问题。2017 年 9 月份新发布的 OCLint 0.13 版本中,包含了 71 条规则。这些规则已经基本覆盖了具有通用性的规则,主要包括语法上的基础规则、Cocoa 库相关规则、一些约定俗成的规则、各种空语句检查、是否按新语法改写的检查、命名上长变量名短变量名检查、无用的语句变量和参数的检查。除此之外,还包括了和代码量大小是否合理相关的一些规则,比如。

weixin_45157020的博客 697

CheckStyle检查复杂度Metrics

新版本的checkstyle提供了六种检查换型复杂度的标签 1.Boolean Expression Complexity(布尔表达式复杂度) 限制一个表达式中的&&、||、&、|、^等逻辑运算符的数量。 解释:过多的条件会导致代码难以读懂、调试和维护。 注意,&和|运算符并不仅仅是整数的位运算符,它们还是布尔运算符&&和||的非快捷版本。 报错:布尔表达式复杂度:14(最多

dubinglin的博客 5188

Java项目的命名规范

Java项目的命名规范 ———————————————— 1、 项目名全部小写。 2、 包名全部小写。 3、 类名首字母大写,一般都是使用驼峰式命名。 如:public class MyFirstClass{} 4、同上: 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。 如:int index=0; public void toString(){} 5、 常量名全部大写。 如:public static final String GAME_COLOR=”RED”; ——

ChengShuang2001的博客 1万+

Java编码规范总结(腾讯+阿里)

转载自:https://blog.csdn.net/pursue_vip/article/details/89890672 以下内容转自他人,总结,感谢他人的分享!!! Java编码规范总结(参考腾讯编码规范) 一、java文件组织 文件组织规则:由于超过2000行的程序难以阅读,应该尽量避免出现超过2000行的程序。一个Java源文件都包含一个单一的公共类或接口。若私有类和接口与一个公共类相关联,可以将它们和公共类放入同一个源文件。公共类必须是这个文件中的第一个类或接口。 文件组织顺序: 1.文件注释:所

ACM-ICPC 现役(铜牌) Codeforces Rating: 2172 816

JAVA学习 DAY3 注释与编码规范讲解

Java学习系列文章系统梳理了Java基础入门知识体系,涵盖Java核心概念、开发环境搭建、基础语法等概论内容,重点解析了单行/多行/Javadoc三类注释的规范用法及Javadoc工具使用技巧,同时详细阐述了编码规范要求,包括UTF-8编码、行宽限制、缩进规范及两种代码风格对比。强调规范编码对提升可读性、统一团队协作及优化文档生成的重要性,为Java学习者奠定坚实基础。

HRDMN的博客 1599

资料推荐--Google Java编码规范

之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的英文很简单,但是最近发现有人译了这篇文章,所以专门写一篇文章推荐一下: http://hawstein.com/posts/google-java-sty...

weixin_34194702的博客 82

Java编码规范】《阿里巴巴Java开发手册(正式版)》【转载

2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Java代码规范标准。这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大降低代码维护成本。 点击下载《阿里巴巴Java开发手册》:https://yq.aliyun.com/attachment/download/?id=1173 (点击参与话题讨论:Java...

acjxe44224的专栏 763

Google 编码规范

今天看了之前李开复在腾讯微博上推荐Google的C++编码规范:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml。 往上再追溯一下,http://code.google.com/p/google-styleguide/。不光有C++,还有 JavaScript Style Guide,Objecti...

weixin_34240657的博客 100

Google Java编码规范

原文出处: http://www.cnblogs.com/rollenholt/p/3690432.html 之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的英文很简单,但是最近发现有人译了这篇文章,所以专门写一篇文章推荐

路卫杰的专栏 838

网站开发编码规范(参考Google Java部分编码规范)

网站开发编码规范 (参考Google Java部分编码规范) 类型 描述 ...

weixin_34306593的博客 152

Android编码规范的那些事情

1、 Code Style Guidelines for Contributors google推荐了一个android的编码规范建议: 英文版地址: http://source.android.com/source/code-style.html 中文版,转载于:http://blog.sina.com.cn/s/blog_48d491300100zwzg.h

穆雨-札记 894

阿里java编码规范考试总结

前几天,考了阿里编码规范刚好80险过,总结出以下例题,答案有错,欢迎评论 1.关于方法的返回值是否可以为null,下列说法正确的是(BCD) A.方法的返回值可以为null,如果是集合,必须返回空集合 B.方法的返回值可以为null,不强制返回空集合,或者空对象等 C.方法实现者必须添加注释,充分说明什么情况下会返回null值 D.防止NPE是调用者的责任 ...

DS_1258的博客 2708

Java/Android 编码规范,从第一行代码开始

转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/52219812谈到编码规范,对于团队项目开发来说,是很有必要的。如果说代码是一种社会行为,那么代码规范可以说是法律,通过法律来约束行为。养成一个良好编码规范的习惯,一是可以统一代码风格;二是便于团队成员协作开发;三是在review代码的时候,更加容易精确地判断需要修改的地方;四是提高

LeBron_Six的专栏 4450

Objective-C开发编码规范

Objective-C编码规范,内容来自苹果、谷歌的文档译,自己的编码经验和对其它资料的总结。 转载请注明出处。 概要 Objective-C是一门面向对象的动态编程语言,主要用于编写iOS和Mac应用程序。关于Objective-C的编码规范,苹果和谷歌都已经有很好的总结: Apple Coding Guidelines for Cocoa Google Objective-C

cactusz的博客 288

数据集-国控地表水质监测数据(2021-2025年).txt

因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/li514006030/article/details/155459456

Vcredist运行库【2005、2008、2010、2012、2013、2015-2022】X86+X64集合打包

Vcredist运行库是Microsoft Visual C++的组件,它包含了运行使用Visual C++编译器开发的程序所必需的运行时库。这个集合打包包含了从2005年至2022年的多个版本,适用于X86(32位)和X64(64位)操作系统。每个版本的Vcredist都有其特定的功能和兼容性,下面我们来详细了解一下这些版本及其重要性。2005版的Vcredist,也称为Visual C++ 2005 Redistributable,包含了MFC(Microsoft Foundation Classes)、ATL(Active Template Library)和C运行时库(CRT)。这个版本的运行库支持.NET Framework 2.0,对于运行使用VC++ 2005编译的程序至关重要。接下来是2008版的Vcredist,对应于Visual C++ 2008 Redistributable。此版本支持.NET Framework 3.5,引入了对C++/CLI(Common Language Infrastructure)的支持,使得C++代码可以无缝集成到.NET环境

上一篇: 开发中遇到的几个问题
下一篇: 10个方法提高你的编程生产力 --转载
studyoo
博客等级 码龄19年 0粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值