代码审查作为JBuilder 强大的新特性闪亮登场直指编码中的软肋力争将编码中的错误或隐患扼杀于萌芽态强力提升开发人员的编码质量 JBuilder 根据Sun的编码规范及软件开发界总结出的一套行之有效的编码习惯对Java开发中的编码风格声明风格Javadoc文档注释EJB规范命名风格潜在错误编码中的画蛇添足等诸多方面进行代码审查并给出警示以便开发人员发现这些不足和隐患予以及时更正 代码审查和语法错误检查是两个不同层次的概念语法错误是低层次强制性的检查任何违反语法的程序都是无法通过编译的也就是说可运行的程序必须是语法正确的而代码审查是高级别非强制性的检查它对语法正确的程序施加了更高更严格的要求从而提升程序的可读性降低因变量命名方法定义程序逻辑的不完整性等问题而导致程序的潜在出错机率增加程序的可维护性和健壮性 林林总总的Java编程规范编程范式以及编程经验都致力于提升代码质量程序性能软件维护性等非语法方法的课题JBuilder 代码审查即是将各种行之有效的编程规范范式经验施加于你的程序中以使你的程序遵守这些业已被大量的实践证明是成功的编程准则 JBuilder 在默认的情况下设置的代码审查机制即是Sun的代码编程规范此外还提供了大量可供选择的审查规则你可以根据需要激活或关闭这些审查的规则 对于初学者来说代码审查无疑是学习和工作的良师益友JBulder 通过即时的代码审查达到了对开发人员监督匡正笃行扶弱的作用开发人员也可以通过代码审查所反馈的问题学习有关语法之外更多的编程要求和经验 一使用代码审查 在默认情况下JBuilde 未激活代码审查的功能可以通过Project>Project Properties>Code Audits调用代码审查的设置页 二代码风格审查 往往有些程序员热衷于将Java的语法发挥到极致以资其对Java语法精通的凭据但在需要充分协作沟通的软件项目中简洁明了清晰易懂将会受到推崇晦涩难懂的语句将会受到奚落故大部分的软件公司的规范都对语句的精简明了提出了要求JBuilder 代码审查可以在一定程度上帮助公司落实和贯彻这一要求 三声明审查 成员变量和局部变量的隐藏常常会使开发人员张冠李戴犯一些不经意的错误而子类隐藏父类的成员和静态变量常常是由于没有注意到父类中已经具有相同的名字而引起的由此而生产的程序Bug由于其隐身性强是很难被发现JBuilder 提供几个对声明进行审查的工具 四命名风格 良好的命名风格在遵守Java命名语法之上对命名提出了更高的要求良好的命名风格必须遵守Java的命名规则 五潜在错误审查 由于流程控制语句语法的特殊性编写程序时需要特别注意否则将会埋下祸根JBuilder从多个方面对这些语句进行审查 六规避各种画蛇添足 JBuilder 代码审查功能的强大还在于能够判断多余的import包引入不必要的强制类型转换无用成员多余的接口修饰符等 七其他 在程序中由于种种原因存在无效表达式或者程序永远不能使用的程序段对于这些无用的代码JBuilder 提供的代码审查功能也能查出来并提醒程序员 总结 JBuilder 提供了语法之上的代码审查功能使用好代码审查功能不但可以增强程序代码的简洁性可读性还可以尽早发现潜在的编码错误防患于未然 JBuilder 代码审查功能无疑是一项开创性的工作将对程序开发产生深远的影响也是智能开发工具的一个发展方向 使用Jbuilder 代码审查 在默认情况下JBuilde 未激活代码审查的功能可以通过Project>Project Properties>Code Audits调用代码审查的设置页如图所示 educitycn/img_///jpg> 图代码审查设置 勾选Code Audits设置页中的Enable Code Audits激活当前工程的代码审查功能Code Audits设置页的左边是一棵代码审查规则项的树分为两级第一级为审查规则项的归类点开第一级的节点第二级的各节点为具体的一个规则项可以根据需要勾选可取消这些审查的规则 点击规则项在Code Audits设置页的右边显示出了该规则的详细描述信息并提供了实例方便开发人员学习和理解 在激活代码审查规则后JBuilder 实时地审查编辑器中当前编写的程序文件并在违反审查规则代码附近的控制槽上标注违反规则代码的关键处将以一条粉红色的下划波浪线标识出来此外在结构窗格的Warning文件夹下列出当前程序所有违反审查规则的代码如图所示 educitycn/img_///jpg> 图结构窗格中代码审查结果汇总 审查结果项描述了代码中存在的问题的简要描述通过这个提示和编译器控制槽上的 标识点选审查结果项时编辑器中相应的代码内容将以下划虚线形式显示通过查看相应的代码开发人员将能够快速发现问题所在更正问题后对应的审查警告将自动从Warning文件夹中清除 代码风格审查 switch必须带一个default语句 根据Sun的编码规范每个switch流程控制语句都必须带一个default分支以保证逻辑分支的完整性在默认情况下该审查项未激活对应的设置项是Coding Style 下的switch Statement Should Include a Default Case 代码清单 所有switch必须带default分支 switch (formatType) { case : formatStr = yyyyMMddHHmmss; break; case : formatStr = yyyyMMdd HH:mm:ss; break; case : formatStr = yyyyMMdd HH:mm:ss; break; case : formatStr = yyyy年MM月dd HH:mm:ss; break; default: formatStr = yyyyMMdd HH:mm:ss; } 如果没有第~行的default代码代码审查将给出警告 提示 可以通过Ctrl+J 调用switch代码模板录入的switch流程控制语句代码块将带一个default分支这样不但加速了编码的录入效率还保证了代码块的规范性 应通过类名引用静态成员 类中所有的静态方法或变量都应该通过类名来引用如果通过类的实例来引用这些静态的成员将影响到程序的可读性如果通过类名来引用静态变量将容易分辨出这些成员的静态属性因为类静态成员变量在JVM中仅存在一份而非每个对象实例各自一份因此静态成员变量可以看成类的成员 代码清单 关于静态成员的引用 public class ASMO { void func() { ASMO obj = new ASMO(); ASMO obj = new ASMO(); objattr = ; //应更正为ASMOattr objattr = ; //应更正为ASMOattr objoper(); //应更正为ASMO oper(); objoper(); //应更正为ASMO oper(); thisattr++; //应更正为ASMO attr++; thisoper(); //应更正为ASMO oper(); }
static int attr; static void oper() {} }
class ASMO { static int attr; static void oper() {} } 该审查规则对应的设置项是Coding Style 下的Accessing Static Members by the Descendant Class Name 避免复杂晦涩代码 往往有些程序员热衷于将Java的语法发挥到极致以资其对Java语法精通的凭据如果是为了练习语法理解语法无可厚非但如果在需要充分协作沟通的软件项目中简洁明了清晰易懂将会受到推崇晦涩难懂的语句将会受到奚落 故此大部分的软件公司的规范都对语句的精简明了提出了要求JBuilder 代码审查可以在一定程度上帮助公司落实和贯彻这一要求 代码清单演示了晦涩的赋值语句及替代的写法 代码清单 复杂晦涩的赋值语句 int i = ; int j = ; int k = ; int l = ; i *= ++j; //应更改为 //++j; //i *= j;
k = j = ; //应更改为 //k = ; //j = ;
l = j += ; //应更改为 //j += ; //l = j;
i = j++ +; //应更改为 //i = j + ; //j++;
i = (j = ) + ; //应更改为 //j = ; //i = j + ;
i = j++ + ; //应更改为 //i = j + ; //j++;
i = (j = ) + ; //应更改为 //j = |