IV. 命名规范
A. 规则
1. 包名采用域后缀倒置的加上自定义的包名,采用小写字母。在部门内部应该规划好包名的范围,防止产生冲突。部门内部产品使用部门的名称加上模块名称。产品线的产品使用产品的名称加上模块的名称。
格式:
com.公司名.产品名.模块名称
com.公司名.部门名称. 项目名称
示例:
融合WEBSMAP包名 com.公司名.iin.websmap
通用消息转发包名 com.公司名.insa2.msgtrans
2. 类名和接口使用类意义完整的英文描述,每个英文单词的首字母使用大写、其余字母使用小写的大小写混合法。
示例:OrderInformation, CustomerList, LogManager, LogConfig, SmpTransaction
3. 方法名使用类意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。
示例:
private void calculateRate();
public void addNewOrder();
4. 方法中,存取属性的方法采用setter 和 getter方法,动作方法采用动词和动宾结构。
格式:
get + 非布尔属性名()
is + 布尔属性名()
set + 属性名()
动词()
动词 + 宾语()
示例:
public String getType();
public boolean isFinished();
public void setVisible(boolean);
public void show();
public void addKeyListener(Listener);
5. 属性名使用意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。属性名不能与方法名相同。
示例:
private customerName;
private orderNumber;
private smpSession;
6. 常量名使用全大写的英文描述,英文单词之间用下划线分隔开,并且使用 final static 修饰。
示例:
public final static int MAX_VALUE = 1000;
public final static String DEFAULT_START_DATE = "2001-12-08";
7. 属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量时使用 this 引用,引用静态成员变量时使用类名引用。
示例:
public class Person
{
private String name;
private static List properties;
public void setName (String name)
{
this.name = name;
}
public void setProperties (List properties)
{
Person.properties = properties;
}
B. 建议
1. 常用组件类的命名以组件名加上组件类型名结尾。
示例:
Application 类型的,命名以App 结尾——MainApp
Frame 类型的,命名以Frame 结尾——TopoFrame
Panel 类型的,建议命名以Panel 结尾——CreateCircuitPanel
Bean 类型的,建议命名以Bean 结尾——DataAccessBean
EJB 类型的,建议命名以EJB 结尾——DBProxyEJB
Applet 类型的,建议命名以Applet 结尾——PictureShowApplet
2. 如果函数名超过15 个字母,可采用以去掉元音字母的方法或者以行业内约定俗成的缩写方式缩写函数名。
示例:getCustomerInformation() 改为 getCustomerInfo()
3. 准确地确定成员函数的存取控制符号,不是必须使用 public 属性的,请使用 protected,不是必须使用 protected, 请使用 private。
示例: protected void setUserName(), private void calculateRate()
4. 含有集合意义的属性命名,尽量包含其复数的意义。
示例:customers, orderItems
V. 编码规范
A. 规则
1. *明确方法功能,精确(而不是近似)地实现方法设计。一个函数仅完成一件功能,即使简单功能也应该编写方法实现。
说明:虽然为仅用一两行就可完成的功能去编方法好象没有必要,但用方法可使功能明确化,增加程序可读性,亦可方便维护、测试。
2. 应明确规定对接口方法参数的合法性检查应由方法的调用者负责还是由接口方法本身负责,缺省是由方法调用者负责。
说明:对于模块间接口方法的参数的合法性检查这一问题,往往有两个极端现象,即:要么是调用者和被调用者对参数均不作合法性检查,结果就遗漏了合法性检查这一必要的处理过程,造成问题隐患;要么就是调用者和被调用者均对参数进行合法性检查,这种情况虽不会造成问题,但产生了冗余代码,降低了效率。
3. 明确类的功能,精确(而不是近似)地实现类的设计。一个类仅实现一组相近的功能。
说明:划分类的时候,应该尽量把逻辑处理、数据和显示分离,实现类功能的单一性。
示例:
数据类不能包含数据处理的逻辑。
通信类不能包含显示处理的逻辑。
4. 所有的数据类必须重载toString() 方法,返回该类有意义的内容。?????????
说明: 父类如果实现了比较合理的toString() ,子类可以继承不必再重写。
示例:/
public TopoNode
{
private String nodeName;
public String toString()
{
return "NodeName : " + nodeName;
}
}
5. 数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally 的finally中close()。
示例:
try
{
// ... ...
}
catch(IOException ioe)
{
//... ...
}
finally
{
try
{
out.close();
}
catch (IOException ioe)
{
//... ...
}
}
6. 异常捕获后,如果不对该异常进行处理,则应该纪录日志或者ex.printStackTrace() 。
说明:若有特殊原因必须用注释加以说明。
示例:
try
{
//.... ...
}
catch (IOException ioe)
{
ioe.printStackTrace ();
}
7. 自己抛出的异常必须要填写详细的描述信息。?????????????
说明:便于问题定位。
示例:
throw new IOException("Writing data error! Data: " + data.toString());
8. 运行期异常使用RuntimeException的子类来表示,不用在可能抛出异常的方法声明上加throws子句。非运行期异常是从Exception继承而来的,必须在方法声明上加throws子句。
说明:
非运行期异常是由外界运行环境决定异常抛出条件的异常,例如文件操作,可能受权限、磁盘空间大小的影响而失败,这种异常是程序本身无法避免的,需要调用者明确考虑该异常出现时该如何处理方法,因此非运行期异常必须有throws子句标出,不标出或者调用者不捕获该类型异常都会导致编译失败,从而防止程序员本身疏忽。
运行期异常是程序在运行过程中本身考虑不周导致的异常,例如传入错误的参数等。抛出运行期异常的目的是防止异常扩散,导致定位困难。因此在做异常体系设计时要根据错误的性质合理选择自定义异常的继承关系。
还有一种异常是Error 继承而来的,这种异常由虚拟机自己维护,表示发生了致命错误,程序无法继续运行例如内存不足。我们自己的程序不应该捕获这种异常,并且也不应该创建该种类型的异常。
9. 在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常。
说明:
一个系统或者模块应该统一规划异常类型和返回码的含义。
但是不能用异常来做一般流程处理的方式,不要过多地使用异常,异常的处理效率比条件分支低,而且异常的跳转流程难以预测。
10. *注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。
示例:
下列语句中的表达式
word = (high << | low (1)
if ((a | b) && (a & c)) (2)
if ((a | b) < (c & d)) (3)
如果书写为
high << 8 | low
a | b && a & c
a | b < c & d
(1)(2)虽然不会出错,但语句不易理解;(3)造成了判断条件出错。
11. *避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的静态变量来代替。
示例:如下的程序可读性差。
if (state == 0)
{
state = 1;
... // program code
}
应改为如下形式:
private final static int TRUNK_IDLE = 0;
private final static int TRUNK_BUSY = 1;
private final static int TRUNK_UNKNOWN = -1;
if (state == TRUNK_IDLE)
{
state = TRUNK_BUSY;
... // program code
}
12. 数组声明的时候使用 int[] index ,而不要使用 int index[] 。
说明:使用int index[] 格式使程序的可读性较差
示例:
如下程序可读性差:
public int getIndex()[]
{
....
}
如下程序可读性好:
public int[] getIndex()
{
....
}
13. 调试代码的时候,不要使用 System.out 和 System.err 进行打印,应该使用一个包含统一开关的测试类进行统一打印。
说明:代码发布的时候可以统一关闭调试代码,定位问题的时候又可以打开开关。
14. 用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文件,以减少维护的难度。
B. 建议
1. 记录异常不要保存exception.getMessage(),而要记录exception.toString()。
示例:NullPointException抛出时常常描述为空,这样往往看不出是出了什么错。
2. 一个方法不应抛出太多类型的异常。
说明: 如果程序中需要分类处理,则将异常根据分类组织成继承关系。如果确实有很多异常类型首先考虑用异常描述来区别,throws/exception子句标明的异常最好不要超过三个。
3. 异常捕获尽量不要直接 catch (Exception ex),应该把异常细分处理。
4. *如果多段代码重复做同一件事情,那么在方法的划分上可能存在问题。
说明:若此段代码各语句之间有实质性关联并且是完成同一件功能的,那么可考虑把此段代码构造成一个新的方法。
5. 对于创建的主要的类,最好置入main()函数,包含用于测试那个类的代码 。
说明:主要类包括:
1、能完成独立功能的类,如通讯。
2、具有完整界面的类,如一个对话框、一个窗口、一个帧等。
3、JavaBean 类。
示例:
public static void main(String[] arguments)
{
CreateCircuitDialog circuitDialog1 = new CreateCircuitDialog (null, "Ciruit", false);
circuitDialog1.setVisible(true);
}
6. 集合中的数据如果不使用了应该及时释放,尤其是可重复使用的集合。???????
说明:由于集合保存了对象的句柄,虚拟机的垃圾收集器就不会回收。
7. *源程序中关系较为紧密的代码应尽可能相邻。
说明:便于程序阅读和查找。
示例:矩形的长与宽关系较密切,放在一起。
rect.length = 10;
rect.width = 5;
8. *不要使用难懂的技巧性很高的语句,除非很有必要时。
说明:高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。
A. 规则
1. 包名采用域后缀倒置的加上自定义的包名,采用小写字母。在部门内部应该规划好包名的范围,防止产生冲突。部门内部产品使用部门的名称加上模块名称。产品线的产品使用产品的名称加上模块的名称。
格式:
com.公司名.产品名.模块名称
com.公司名.部门名称. 项目名称
示例:
融合WEBSMAP包名 com.公司名.iin.websmap
通用消息转发包名 com.公司名.insa2.msgtrans
2. 类名和接口使用类意义完整的英文描述,每个英文单词的首字母使用大写、其余字母使用小写的大小写混合法。
示例:OrderInformation, CustomerList, LogManager, LogConfig, SmpTransaction
3. 方法名使用类意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。
示例:
private void calculateRate();
public void addNewOrder();
4. 方法中,存取属性的方法采用setter 和 getter方法,动作方法采用动词和动宾结构。
格式:
get + 非布尔属性名()
is + 布尔属性名()
set + 属性名()
动词()
动词 + 宾语()
示例:
public String getType();
public boolean isFinished();
public void setVisible(boolean);
public void show();
public void addKeyListener(Listener);
5. 属性名使用意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。属性名不能与方法名相同。
示例:
private customerName;
private orderNumber;
private smpSession;
6. 常量名使用全大写的英文描述,英文单词之间用下划线分隔开,并且使用 final static 修饰。
示例:
public final static int MAX_VALUE = 1000;
public final static String DEFAULT_START_DATE = "2001-12-08";
7. 属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量时使用 this 引用,引用静态成员变量时使用类名引用。
示例:
public class Person
{
private String name;
private static List properties;
public void setName (String name)
{
this.name = name;
}
public void setProperties (List properties)
{
Person.properties = properties;
}
B. 建议
1. 常用组件类的命名以组件名加上组件类型名结尾。
示例:
Application 类型的,命名以App 结尾——MainApp
Frame 类型的,命名以Frame 结尾——TopoFrame
Panel 类型的,建议命名以Panel 结尾——CreateCircuitPanel
Bean 类型的,建议命名以Bean 结尾——DataAccessBean
EJB 类型的,建议命名以EJB 结尾——DBProxyEJB
Applet 类型的,建议命名以Applet 结尾——PictureShowApplet
2. 如果函数名超过15 个字母,可采用以去掉元音字母的方法或者以行业内约定俗成的缩写方式缩写函数名。
示例:getCustomerInformation() 改为 getCustomerInfo()
3. 准确地确定成员函数的存取控制符号,不是必须使用 public 属性的,请使用 protected,不是必须使用 protected, 请使用 private。
示例: protected void setUserName(), private void calculateRate()
4. 含有集合意义的属性命名,尽量包含其复数的意义。
示例:customers, orderItems
V. 编码规范
A. 规则
1. *明确方法功能,精确(而不是近似)地实现方法设计。一个函数仅完成一件功能,即使简单功能也应该编写方法实现。
说明:虽然为仅用一两行就可完成的功能去编方法好象没有必要,但用方法可使功能明确化,增加程序可读性,亦可方便维护、测试。
2. 应明确规定对接口方法参数的合法性检查应由方法的调用者负责还是由接口方法本身负责,缺省是由方法调用者负责。
说明:对于模块间接口方法的参数的合法性检查这一问题,往往有两个极端现象,即:要么是调用者和被调用者对参数均不作合法性检查,结果就遗漏了合法性检查这一必要的处理过程,造成问题隐患;要么就是调用者和被调用者均对参数进行合法性检查,这种情况虽不会造成问题,但产生了冗余代码,降低了效率。
3. 明确类的功能,精确(而不是近似)地实现类的设计。一个类仅实现一组相近的功能。
说明:划分类的时候,应该尽量把逻辑处理、数据和显示分离,实现类功能的单一性。
示例:
数据类不能包含数据处理的逻辑。
通信类不能包含显示处理的逻辑。
4. 所有的数据类必须重载toString() 方法,返回该类有意义的内容。?????????
说明: 父类如果实现了比较合理的toString() ,子类可以继承不必再重写。
示例:/
public TopoNode
{
private String nodeName;
public String toString()
{
return "NodeName : " + nodeName;
}
}
5. 数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally 的finally中close()。
示例:
try
{
// ... ...
}
catch(IOException ioe)
{
//... ...
}
finally
{
try
{
out.close();
}
catch (IOException ioe)
{
//... ...
}
}
6. 异常捕获后,如果不对该异常进行处理,则应该纪录日志或者ex.printStackTrace() 。
说明:若有特殊原因必须用注释加以说明。
示例:
try
{
//.... ...
}
catch (IOException ioe)
{
ioe.printStackTrace ();
}
7. 自己抛出的异常必须要填写详细的描述信息。?????????????
说明:便于问题定位。
示例:
throw new IOException("Writing data error! Data: " + data.toString());
8. 运行期异常使用RuntimeException的子类来表示,不用在可能抛出异常的方法声明上加throws子句。非运行期异常是从Exception继承而来的,必须在方法声明上加throws子句。
说明:
非运行期异常是由外界运行环境决定异常抛出条件的异常,例如文件操作,可能受权限、磁盘空间大小的影响而失败,这种异常是程序本身无法避免的,需要调用者明确考虑该异常出现时该如何处理方法,因此非运行期异常必须有throws子句标出,不标出或者调用者不捕获该类型异常都会导致编译失败,从而防止程序员本身疏忽。
运行期异常是程序在运行过程中本身考虑不周导致的异常,例如传入错误的参数等。抛出运行期异常的目的是防止异常扩散,导致定位困难。因此在做异常体系设计时要根据错误的性质合理选择自定义异常的继承关系。
还有一种异常是Error 继承而来的,这种异常由虚拟机自己维护,表示发生了致命错误,程序无法继续运行例如内存不足。我们自己的程序不应该捕获这种异常,并且也不应该创建该种类型的异常。
9. 在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应该混合使用,推荐使用异常。
说明:
一个系统或者模块应该统一规划异常类型和返回码的含义。
但是不能用异常来做一般流程处理的方式,不要过多地使用异常,异常的处理效率比条件分支低,而且异常的跳转流程难以预测。
10. *注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。
示例:
下列语句中的表达式
word = (high << | low (1)
if ((a | b) && (a & c)) (2)
if ((a | b) < (c & d)) (3)
如果书写为
high << 8 | low
a | b && a & c
a | b < c & d
(1)(2)虽然不会出错,但语句不易理解;(3)造成了判断条件出错。
11. *避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的静态变量来代替。
示例:如下的程序可读性差。
if (state == 0)
{
state = 1;
... // program code
}
应改为如下形式:
private final static int TRUNK_IDLE = 0;
private final static int TRUNK_BUSY = 1;
private final static int TRUNK_UNKNOWN = -1;
if (state == TRUNK_IDLE)
{
state = TRUNK_BUSY;
... // program code
}
12. 数组声明的时候使用 int[] index ,而不要使用 int index[] 。
说明:使用int index[] 格式使程序的可读性较差
示例:
如下程序可读性差:
public int getIndex()[]
{
....
}
如下程序可读性好:
public int[] getIndex()
{
....
}
13. 调试代码的时候,不要使用 System.out 和 System.err 进行打印,应该使用一个包含统一开关的测试类进行统一打印。
说明:代码发布的时候可以统一关闭调试代码,定位问题的时候又可以打开开关。
14. 用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文件,以减少维护的难度。
B. 建议
1. 记录异常不要保存exception.getMessage(),而要记录exception.toString()。
示例:NullPointException抛出时常常描述为空,这样往往看不出是出了什么错。
2. 一个方法不应抛出太多类型的异常。
说明: 如果程序中需要分类处理,则将异常根据分类组织成继承关系。如果确实有很多异常类型首先考虑用异常描述来区别,throws/exception子句标明的异常最好不要超过三个。
3. 异常捕获尽量不要直接 catch (Exception ex),应该把异常细分处理。
4. *如果多段代码重复做同一件事情,那么在方法的划分上可能存在问题。
说明:若此段代码各语句之间有实质性关联并且是完成同一件功能的,那么可考虑把此段代码构造成一个新的方法。
5. 对于创建的主要的类,最好置入main()函数,包含用于测试那个类的代码 。
说明:主要类包括:
1、能完成独立功能的类,如通讯。
2、具有完整界面的类,如一个对话框、一个窗口、一个帧等。
3、JavaBean 类。
示例:
public static void main(String[] arguments)
{
CreateCircuitDialog circuitDialog1 = new CreateCircuitDialog (null, "Ciruit", false);
circuitDialog1.setVisible(true);
}
6. 集合中的数据如果不使用了应该及时释放,尤其是可重复使用的集合。???????
说明:由于集合保存了对象的句柄,虚拟机的垃圾收集器就不会回收。
7. *源程序中关系较为紧密的代码应尽可能相邻。
说明:便于程序阅读和查找。
示例:矩形的长与宽关系较密切,放在一起。
rect.length = 10;
rect.width = 5;
8. *不要使用难懂的技巧性很高的语句,除非很有必要时。
说明:高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。
发表评论
-
你属于那种?
2013-01-09 15:25 917IT领袖:年入过亿(例如任正非、马化腾、李彦宏、丁磊、马云 ... -
snake 哈哈
2013-01-08 11:35 666附件里面的额 -
初学 canvas 写的贪吃蛇, 各种bug
2012-12-31 16:51 0<!DOCTYPE HTML> <html& ... -
Java编程规范 三
2012-12-26 17:24 1141VI. JTEST规范 A. 规则 ... -
Java编码规范 一
2012-12-26 17:21 7031 术语和定义 规则:编程时强制必须遵守的原则。 建议 ... -
世界末日那点事
2012-12-21 09:12 5江音音~喝喝茶,敲敲代 ... -
编程规范之多选题
2012-12-14 15:10 0abcdfef -
编程规范之 单选断题
2012-12-14 15:09 0abcdef -
编程规范之 判断题
2012-12-14 14:57 0一、判断题(每题2分,共28分) 1、if, for, do, ... -
编程规范答案
2012-12-14 14:54 749一、判断题 (每题2分,共28分,正确打√,错误打×) ...
相关推荐
Java、编码规范、Java编码规范、阿里巴巴、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里...
阿里巴巴java编码规范 ,Java 并发编程培训(阿里巴巴) 《阿里巴巴Java开发手册》,首次公开阿里官方Java代码规范标准。这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大...
华为JAVA编码规范.pdf 华为JAVA编码规范.pdf是华为公司编写的JAVA编程语言编码规范,旨在提供一个统一的编程风格和代码组织方式,以提高代码的可读性、维护性和可重用性。该规范涵盖了编程语言的基本结构、命名规则...
Java 编码规范 Java 编码规范是指在 Java 语言中编写代码时需要遵守的一些约定和规则,以确保代码的可读性、可维护性和可扩展性。本文将对 Java 编码规范的主要内容进行详细讲解。 命名风格是 Java 编码规范的重要...
腾讯 Java 编码规范 腾讯 Java 编码规范是腾讯集团管理标准的一部分,旨在确保公司项目代码的易维护性和编码安全性。该规范涵盖了 Java 编码风格、文件组织、代码风格、注释、命名、声明、异常、习惯等方面。 一、...
"java编码规范考试题答案" 一、Java编码规范考试题答案 本文档涵盖了Java编码规范的各种方面,包括集合类、线程、对称密码算法、异常处理、命名规范、随机数生成、压缩文件解压、安全编程规范、操作系统登录用户名...
编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范
JAVA 编码规范试题 JAVA 编码规范试题是一套涵盖了 JAVA 编程规范的试题,旨在帮助开发者掌握 JAVA 编程的基本规范和best practice。该试题涵盖了 JAVA 编程规范的多个方面,包括变量命名、代码格式、异常处理、...
JAVA编码规范培训
Java编码规范是软件开发中非常重要的一个环节,它旨在提高代码质量、可读性、可维护性和团队协作效率。这份文档,"Java编码规范.doc",由东软集团有限公司的商用软件事业部编写,包含了国内大型Java项目和国际知名...
**百度Java编码规范** 在软件开发中,遵循一定的编码规范是非常重要的,它能提高代码的可读性,便于团队协作,降低维护成本。百度作为一家技术驱动的公司,也提出了其内部使用的Java编码规范,旨在确保代码的一致性...
1. **命名约定**:Java编码规范对变量、方法、类和包的命名有明确的要求。例如,类名应采用驼峰式命名法,每个单词首字母大写;方法名和变量名则使用小驼峰式,首个单词全小写;常量全大写,单词间用下划线分隔。包...
java编码规范,非常详细 每个switch-case语句都有最后一个default以确保处理了全集。switch中,每一条case分支必须使用break语句结束
Java编码规范(Java Coding Standard) oiNSFT-BS-OT0105 V3.0 2005-5-11 东软集团有限公司 商用软件事业部 版权所有 中国 沈阳浑南高新技术产业开发区 东软软件园
【公司Java编码规范】是确保团队协作和代码质量的重要文档,它定义了开发人员在编写Java代码时应遵循的一系列规则和最佳实践。这些规范旨在提高代码可读性、可维护性和可扩展性,减少错误,并使代码更容易理解和调试...
### Java编码规范终极版知识点详解 #### 一、引言:为何制定编码规范? 编码规范在软件开发过程中扮演着至关重要的角色。一个清晰且统一的编码标准能够显著提升代码的质量,进而提高软件的整体性能和可维护性。在...