《电信事业部Java编程规范》由会员分享,可在线阅读,更多相关《电信事业部Java编程规范(35页珍藏版)》请在金锄头文库上搜索。
1、广州市聚晖电子科技有限公司电信事业部Java项目编程规范版本 _ 修订历史记录日期版本说明作者初步拟定田标杨济嘉补充错误处理和异常处理事件部分的内容田标目录1.简介61.1目的61.2范围61.3定义、首字母缩写词和缩略语61.4参考资料61.5概述62.代码组织与风格72.1开头注释72.2包和引入语句72.3类的注释72.4类声明72.5类的成员变量72.6构造函数82.7类方法82.8关于代码组织与风格的推荐示例93.缩进排版163.1行长度163.2换行164.注释164.1类的注释164.2方法的注释174.3类属性的注释174.4非JavaDoc的注释185.命名185.1包的命名
2、185.2类的命名185.3接口的命名185.4方法的命名185.5变量的命名185.6Final变量(常量)的命名185.7参数的命名186.声明186.1每行声明变量的数量186.2初始化186.3避免覆盖186.4数组的声明186.5类和接口的声明197.表达式和语句197.1简单语句197.2复合语句197.3选择和循环语句197.4switch-case语句207.5try-catch/try-catch-finally语句208.空白208.1空行218.2空格219.设计类和方法219.1创建具有很强内聚力的类219.2创建松散连接和高度专用的方法219.2.1使所有方法都执行专
3、门的任务219.2.2尽量使方法成为自成一体的独立方法229.2.3设计类和方法时,要达到下列目的229.3编程原则229.3.1为方法和类赋予表义性强的名字229.3.2为每个方法赋予单个退出点239.3.3创建方法时,始终都应显式地定义它的作用域。239.3.4用参数在方法之间传递数据2310.一些编程惯例2310.1提供对实例以及类变量的访问控制2310.2引用类变量和类方法2310.3常量2310.4变量赋值2310.5圆括号2311.内存管理2312.错误处理和异常事件2312.1错误捕获方式:2412.1.1FATAL级别的例外:2412.1.2其他级别的例外:2412.1.3释放
4、资源统一在final里面做.2412.2错误日志处理:2412.2.1FATAL级别:2412.2.2ERROR级别:2412.2.3WARN级别:2412.2.4INFO级别:2412.2.5DEBUG级别:2413.可移植性2414.复用2515.涉及到代码质量的问题2515.1制造多余代码2515.2质量上有缺陷的代码2615.3很多小技巧3115.4致命的问题3416.编译问题3517.附录:指南概要35Java项目编程指南1. 简介此编程指南的文档用来规范每一个一线开发人员代码的编写,试图确保代码编写的规范化和代码编写的质量,进而提高我们开发的项目的质量和开发团队的编码水平。此编程指
5、南的内容涵盖了从源代码文件的结构、格式,对常见代码要素的格式和内容两个方面的要求,到如何避免长犯的错误,避免bug、如何提高代码的严谨性、可靠性和提高质量等方方面面的内容,需要每一个开发人员在每天的工作中严格遵守。1.1 目的 提高编码工作的规范性 提高完成的代码的规范性 避免编写多余、低效、漏洞百出的代码 加强开发人员的技术素养、提高开发工作的质量1.2 范围这个文档的范围包括: 一个源代码文件的内容,应该怎样组织,风格怎样 代码中注释的位置、写法、要求 包、类、方法、常量、变量、属性等的命名的要求 声明的编写要求 表达式的编写要求 内存管理方面的要求 异常处理方面的要求 针对可移植性的编程
6、要求 针对复用的编程要求这些要求对于提高代码质量、提高代码的规范性有帮助,定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为人员变更而带来的损失。这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性,需要各开发同事努力遵守。1.3 定义、首字母缩写词和缩略语本小节应提供正确理解此编程指南所需的全部术语、首字母缩写词和缩略语的定义。这些信息可以通过引用项目词汇表来提供。1.4 参考资料Sun公司制定的Java编程规范一些基础Java库,包括JDK、Spring、Apache的一些开业项目的代码编写方式1.5 概述文档中接下来的内容首先阐述了关于代码的
7、组织和风格有关的建议,接下来阐述了围绕编写高效率、可移植性、错误处理等论题的一些建议。2. 代码组织与风格每个Java源文件都包含一个单一的公共类或接口。若私有类和接口与一个公共类相关联,可以将它们和公共类放入同一个源文件。公共类必须是这个文件中的第一个类或接口。Java源文件的组织如下:2.1 开头注释所有的源文件都应该在开头有一个C语言风格的注释,其中列出类名、版本信息、日期和版权声明:/* * Classname * * Version information * * Date * * Copyright notice */2.2 包和引入语句package 行要在 import 行之前
8、,两者之间以空行分隔。import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。(在Eclipse中,可以用快捷键Ctrl+Shift+O来导入需要的类和清除该类不需要的import语句。)package .stats;import java.io.*;import java.util.Observable;import hotlava.util.Application;2.3 类的注释接下来的是类的注释,一般用来解释类的作用,形式如下:/* * A class representing a set of packet and byte counters * It is observ
9、able to allow it to be watched, but only * reports changes when the current set is complete */2.4 类声明包括类的访问修饰符、类名、继承的父类、实现的接口等。2.5 类的成员变量建议以下面先后顺序组织类成员变量:a. 静态变量(static):首先是类的公共变量(public),随后是保护变量(protected),再后是包一级别的变量(没有访问修饰符),最后是私有变量(private)。b. 实例变量:首先是类的公共变量(public),随后是保护变量(protected),再后是包一级别的变量(
10、没有访问修饰符),最后是私有变量(private)。一般情况下,不鼓励以public的方式定义类的实例变量,对类的实例变量的操作应该通过类的方法,比如getter和setter来进行。public的成员变量必须生成文档(JavaDoc)。proceted、private和package定义的成员变量如果名字含义明确的话,可以没有注释。/* * Packet counters */protected int packets;2.6 构造函数构造函数应该用递增的方式写(比如:参数多的写在后面)。2.7 类方法静态方法一般放在最前面。类方法应该按功能,而非作用域或访问权限,分组。例如,一个私有的类方
11、法可以置于两个公有的实例方法之间。其目的是为了更便于阅读和理解代码。/* * Set the packet counters (such as when restoring from a database). * * param r1 * param r2 * param r3 * param r4 * throws IllegalArgumentException */protected final void setArray(int r1, int r2, int r3, int r4)throws IllegalArgumentException / Ensure the arrays
12、are of equal sizeif (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);下面JDK中NullPointerException这个类的源代码,是一个很好的示例:/* * (#)Null
13、PointerException.java1.20 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.lang;/* * Thrown when an application attempts to use null in a * case where an object is required. These include: * * Calling the instance method of a null object. * Accessing or modifying the field of a null object. * Taking the length of null as if i