a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 學院 > 開發設計 > 正文

Java 編碼規范

2019-11-14 09:53:26
字體:
來源:轉載
供稿:網友

問題

怎么規范項目組組員的java代碼?

背景

大公司都有自己的編碼規范,這里參考華為的編碼規范,并加以適當的修改。

方案

一、編碼格式規范

在Eclipse中導入如下兩個文件,具體的導入方法可以參考:[http://blog.csdn.net/pengych_321/article/details/50659493]

codetemplates.xml<?xml version="1.0" encoding="UTF-8"?><templates><template id="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name="gettercomment" description="Comment for getter method" context="gettercomment_context" enabled="true" deleted="false">/** * @return Returns the ${bare_field_name}. */</template><template id="org.eclipse.jdt.ui.text.codetemplates.settercomment" name="settercomment" description="Comment for setter method" context="settercomment_context" enabled="true" deleted="false">/** * @param ${param} The ${bare_field_name} to set. */</template><template id="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name="constructorcomment" description="Comment for created constructors" context="constructorcomment_context" enabled="true" deleted="false">/** * ${tags} */</template><template id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name="typecomment" description="Comment for created types" context="typecomment_context" enabled="true" deleted="false">/** * description: * * @author ${user} * @date ${date} * @since 1.0 */</template><template id="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name="fieldcomment" description="Comment for fields" context="fieldcomment_context" enabled="true" deleted="false">/** * 意義,目的和功能,以及被用到的地方&lt;br&gt; */</template><template id="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name="methodcomment" description="Comment for non-overriding methods" context="methodcomment_context" enabled="true" deleted="false">/** * function: * * ${tags} */</template><template id="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name="overridecomment" description="Comment for overriding methods" context="overridecomment_context" enabled="true" deleted="false">/* (non-Javadoc) * ${see_to_overridden} */</template><template id="org.eclipse.jdt.ui.text.codetemplates.newtype" name="newtype" description="Newly created files" context="newtype_context" enabled="true" deleted="false">/* * 文件名:${file_name} * 版權:Copyright by www.midea.com * 修改人:${user} * 修改時間:${date} */${package_declaration}${typecomment}${type_declaration}</template><template id="org.eclipse.jdt.ui.text.codetemplates.catchblock" name="catchblock" description="Code in new catch blocks" context="catchblock_context" enabled="true" deleted="false">// ${todo} Auto-generated catch block${exception_var}.PRintStackTrace();</template><template id="org.eclipse.jdt.ui.text.codetemplates.methodbody" name="methodbody" description="Code in created method stubs" context="methodbody_context" enabled="true" deleted="false">// ${todo} Auto-generated method stub${body_statement}</template><template id="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name="constructorbody" description="Code in created constructor stubs" context="constructorbody_context" enabled="true" deleted="false">${body_statement}// ${todo} Auto-generated constructor stub</template><template id="org.eclipse.jdt.ui.text.codetemplates.getterbody" name="getterbody" description="Code in created getters" context="getterbody_context" enabled="true" deleted="false">return ${field};</template><template id="org.eclipse.jdt.ui.text.codetemplates.setterbody" name="setterbody" description="Code in created setters" context="setterbody_context" enabled="true" deleted="false">${field} = ${param};</template></templates>codeformate.xml<?xml version="1.0" encoding="UTF-8"?><profiles version="1"><profile name="mcity_codeformat" version="1"><setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="18"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="18"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="0"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="18"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="18"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="4"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="0"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="0"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="17"/><setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="17"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="2"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="2"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/><setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="2"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/><setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/><setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines" value="true"/><setting id="org.eclipse.jdt.core.formatter.comment.format_comments" value="true"/><setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/><setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="false"/><setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/><setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/><setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/><setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/><setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/><setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="99"/><setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/><setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1"/><setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="1"/><setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/><setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/><setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/><setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/><setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/><setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/><setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/><setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/><setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/><setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_Operator" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/><setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/><setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/><setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="true"/><setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/><setting id="org.eclipse.jdt.core.formatter.lineSplit" value="99"/><setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/><setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/><setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/><setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/><setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/><setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/></profile></profiles>checkstyle.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd"><!-- Generated by RHY @will_awoke --><module name="Checker"> <property name="charset" value="UTF-8"/> <property name="severity" value="warning"/> <!-- Checks for Size Violations. --> <!-- 檢查文件的長度(行) default max=2000 --> <module name="FileLength"> <property name="max" value="2500"/> </module> <!-- Checks that property files contain the same keys. --> <!-- 檢查**.properties配置文件 是否有相同的key <module name="Translation"> </module> --> <module name="TreeWalker"> <!-- Checks for imports --> <!-- 必須導入類的完整路徑,即不能使用*導入所需的類 --> <module name="AvoidStarImport"/> <!-- 檢查是否從非法的包中導入了類 illegalPkgs: 定義非法的包名稱--> <module name="IllegalImport"/> <!-- defaults to sun.* packages --> <!-- 檢查是否導入了不必顯示導入的類--> <module name="RedundantImport"/> <!-- 檢查是否導入的包沒有使用--> <module name="UnusedImports"/> <!-- Checks for whitespace <module name="EmptyForIteratorPad"/> <module name="MethodParamPad"/> <module name="NoWhitespaceAfter"/> <module name="NoWhitespaceBefore"/> <module name="OperatorWrap"/> <module name="ParenPad"/> <module name="TypecastParenPad"/> <module name="WhitespaceAfter"/> <module name="WhitespaceAround"/> --> <!-- 檢查類和接口的javadoc 默認不檢查author 和version tags authorFormat: 檢查author標簽的格式 versionFormat: 檢查version標簽的格式 scope: 可以檢查的類的范圍,例如:public只能檢查public修飾的類,private可以檢查所有的類 excludeScope: 不能檢查的類的范圍,例如:public,public的類將不被檢查,但訪問權限小于public的類仍然會檢查,其他的權限以此類推 tokens: 該屬性適用的類型,例如:CLASS_DEF,INTERFACE_DEF --> <module name="JavadocType"> <property name="authorFormat" value="/S"/> <property name="scope" value="protected"/> <property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/> </module> <!-- 檢查方法的javadoc的注釋 scope: 可以檢查的方法的范圍,例如:public只能檢查public修飾的方法,private可以檢查所有的方法 allowMissingParamTags: 是否忽略對參數注釋的檢查 allowMissingThrowsTags: 是否忽略對throws注釋的檢查 allowMissingReturnTag: 是否忽略對return注釋的檢查 --> <module name="JavadocMethod"> <property name="scope" value="private"/> <property name="allowMissingParamTags" value="false"/> <property name="allowMissingThrowsTags" value="false"/> <property name="allowMissingReturnTag" value="false"/> <property name="tokens" value="METHOD_DEF"/> <property name="allowUndeclaredRTE" value="true"/> <property name="allowThrowsTagsForSubclasses" value="true"/> <!--允許get set 方法沒有注釋--> <property name="allowMissingPropertyJavadoc" value="true"/> </module> <!-- 檢查類變量的注釋 scope: 檢查變量的范圍,例如:public只能檢查public修飾的變量,private可以檢查所有的變量 --> <module name="JavadocVariable"> <property name="scope" value="private"/> </module> <!--option: 定義左大括號'{'顯示位置,eol在同一行顯示,nl在下一行顯示 maxLineLength: 大括號'{'所在行行最多容納的字符數 tokens: 該屬性適用的類型,例:CLASS_DEF,INTERFACE_DEF,METHOD_DEF,CTOR_DEF --> <module name="LeftCurly"> <property name="option" value="nl"/> </module> <!-- NeedBraces 檢查是否應該使用括號的地方沒有加括號 tokens: 定義檢查的類型 --> <module name="NeedBraces"/> <!-- Checks the placement of right curly braces ('}') for else, try, and catch tokens. The policy to verify is specified using property option. option: 右大括號是否單獨一行顯示 tokens: 定義檢查的類型 --> <module name="RightCurly"> <property name="option" value="alone"/> </module> <!-- 檢查在重寫了equals方法后是否重寫了hashCode方法 --> <module name="EqualsHashCode"/> <!-- Checks for illegal instantiations where a factory method is preferred. Rationale: Depending on the project, for some classes it might be preferable to create instances through factory methods rather than calling the constructor. A simple example is the java.lang.Boolean class. In order to save memory and CPU cycles, it is preferable to use the predefined constants TRUE and FALSE. Constructor invocations should be replaced by calls to Boolean.valueOf(). Some extremely performance sensitive projects may require the use of factory methods for other classes as well, to enforce the usage of number caches or object pools. --> <module name="IllegalInstantiation"> <property name="classes" value="java.lang.Boolean"/> </module> <!-- Checks for Naming Conventions. 命名規范 --> <!-- local, final variables, including catch parameters --> <module name="LocalFinalVariableName"/> <!-- local, non-final variables, including catch parameters--> <module name="LocalVariableName"/> <!-- static, non-final fields --> <module name="StaticVariableName"> <property name="format" value="(^[A-Z0-9_]{0,19}$)"/> </module> <!-- packages --> <module name="PackageName" > <property name="format" value="^[a-z]+(/.[a-z][a-z0-9]*)*$"/> </module> <!-- classes and interfaces --> <module name="TypeName"> <property name="format" value="(^[A-Z][a-zA-Z0-9]{0,19}$)"/> </module> <!-- methods --> <module name="MethodName"> <property name="format" value="(^[a-z][a-zA-Z0-9]{0,19}$)"/> </module> <!-- non-static fields --> <module name="MemberName"> <property name="format" value="(^[a-z][a-z0-9][a-zA-Z0-9]{0,19}$)"/> </module> <!-- parameters --> <module name="ParameterName"> <property name="format" value="(^[a-z][a-zA-Z0-9_]{0,19}$)"/> </module> <!-- constants (static, final fields) --> <module name="ConstantName"> <property name="format" value="(^[A-Z0-9_]{0,19}$)"/> </module> <!-- 代碼縮進 --> <module name="Indentation"> </module> <!-- Checks for redundant exceptions declared in throws clause such as duplicates, unchecked exceptions or subclasses of another declared exception. 檢查是否拋出了多余的異常 <module name="RedundantThrows"> <property name="logLoadErrors" value="true"/> <property name="suppressLoadErrors" value="true"/> </module> --> <!-- Checks for overly complicated boolean expressions. Currently finds code like if (b == true), b || true, !false, etc. 檢查boolean值是否冗余的地方 Rationale: Complex boolean logic makes code hard to understand and maintain. --> <module name="SimplifyBooleanExpression"/> <!-- Checks for overly complicated boolean return statements. For example the following code 檢查是否存在過度復雜的boolean返回值 if (valid()) return false; else return true; could be written as return !valid(); The Idea for this Check has been shamelessly stolen from the equivalent PMD rule. --> <module name="SimplifyBooleanReturn"/> <!-- Checks that a class which has only private constructors is declared as final.只有私有構造器的類必須聲明為final--> <module name="FinalClass"/> <!-- Make sure that utility classes (classes that contain only static methods or fields in their API) do not have a public constructor. 確保Utils類(只提供static方法和屬性的類)沒有public構造器。 Rationale: Instantiating utility classes does not make sense. Hence the constructors should either be private or (if you want to allow subclassing) protected. A common mistake is forgetting to hide the default constructor. If you make the constructor protected you may want to consider the following constructor implementation technique to disallow instantiating subclasses: public class StringUtils // not final to allow subclassing { protected StringUtils() { throw new UnsupportedOperationException(); // prevents calls from subclass } public static int count(char c, String s) { // ... } } <module name="HideUtilityClassConstructor"/> --> <!-- Checks visibility of class members. Only static final members may be public; other class members must be private unless property protectedAllowed or packageAllowed is set. 檢查class成員屬性可見性。只有static final 修飾的成員是可以public的。其他的成員屬性必需是private的,除非屬性protectedAllowed或者packageAllowed設置了true. Public members are not flagged if the name matches the public member regular expression (contains "^serialVersionUID$" by default). Note: Checkstyle 2 used to include "^f[A-Z][a-zA-Z0-9]*$" in the default pattern to allow CMP for EJB 1.1 with the default settings. With EJB 2.0 it is not longer necessary to have public access for persistent fields, hence the default has been changed. Rationale: Enforce encapsulation. 強制封裝 --> <module name="VisibilityModifier"/> <!-- 每一行只能定義一個變量 --> <module name="MultipleVariableDeclarations"> </module> <!-- Checks the style of array type definitions. Some like Java-style: public static void main(String[] args) and some like C-style: public static void main(String args[]) 檢查再定義數組時,采用java風格還是c風格,例如:int[] num是java風格,int num[]是c風格。默認是java風格--> <module name="ArrayTypeStyle"> </module> <!-- Checks that there are no "magic numbers", where a magic number is a numeric literal that is not defined as a constant. By default, -1, 0, 1, and 2 are not considered to be magic numbers. <module name="MagicNumber"> </module> --> <!-- A check for TODO: comments. Actually it is a generic regular expression matcher on Java comments. To check for other patterns in Java comments, set property format. 檢查是否存在TODO(待處理) TODO是javaIDE自動生成的。一般代碼寫完后要去掉。 --> <module name="TodoComment"/> <!-- Checks that long constants are defined with an upper ell. That is ' L' and not 'l'. This is in accordance to the Java Language Specification, Section 3.10.1. 檢查是否在long類型是否定義了大寫的L.字母小寫l和數字1(一)很相似。 looks a lot like 1. --> <module name="UpperEll"/> <!-- Checks that switch statement has "default" clause. 檢查switch語句是否有‘default’從句 Rationale: It's usually a good idea to introduce a default case in every switch statement. Even if the developer is sure that all currently possible cases are covered, this should be expressed in the default branch, e.g. by using an assertion. This way the code is protected aginst later changes, e.g. introduction of new types in an enumeration type. --> <module name="MissingSwitchDefault"/> <!--檢查switch中case后是否加入了跳出語句,例如:return、break、throw、continue --> <module name="FallThrough"/> <!-- Checks the number of parameters of a method or constructor. max default 7個. --> <module name="ParameterNumber"> <property name="max" value="5"/> </module> <!-- 每行字符數 --> <module name="LineLength"> <property name="max" value="200"/> </module> <!-- Checks for long methods and constructors. max default 150行. max=300 設置長度300 --> <module name="MethodLength"> <property name="max" value="300"/> </module> <!-- ModifierOrder 檢查修飾符的順序,默認是 public,protected,private,abstract,static,final,transient,volatile,synchronized,native --> <module name="ModifierOrder"> </module> <!-- 檢查是否有多余的修飾符,例如:接口中的方法不必使用public、abstract修飾 --> <module name="RedundantModifier"> </module> <!--- 字符串比較必須使用 equals() --> <module name="StringLiteralEquality"> </module> <!-- if-else嵌套語句個數 最多4層 --> <module name="NestedIfDepth"> <property name="max" value="3"/> </module> <!-- try-catch 嵌套語句個數 最多2層 --> <module name="NestedTryDepth"> <property name="max" value="2"/> </module> <!-- 返回個數 --> <module name="ReturnCount"> <property name="max" value="5"/> <property name="format" value="^$"/> </module> </module></module>

二、java代碼規范

傳說中的華為編碼軍規 …

轉至元數據起始1.1 排版1.1.1 規則規則1 程序塊要采用縮進風格編寫,縮進的空格數為4個,不允許使用TAB縮進。(1.42+)說明:縮進使程序更易閱讀,使用空格縮進可以適應不同操作系統與不同開發工具。規則2 分界符(如大括號‘{’和‘}’)應各獨占一行,同時與引用它們的語句左對齊。在函數體的開始、類和接口的定義、以及if、for、do、while、switch、case語句中的程序或者static、,synchronized等語句塊中都要采用如上的縮進方式。(1.42+) 示例: if (a>b) { doStart(); }規則3 較長的語句、表達式或參數(>80字符)要分成多行書寫,長表達式要在低優先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當的縮進,使排版整齊,語句可讀。(1.42+)示例: if (logger.isDebugEnabled()) { logger.debug("session destroyed,call-id" + event.getSession().getCallId()); }規則4 不允許把多個短語句寫在一行中,即一行只寫一條語句(1.42+) 說明:閱讀代碼更加清晰 示例:如下例子不符合規范。 Object o = new Object(); Object b = null;規則5 if, for, do, while, case, switch, default 等語句自占一行,且if, for, do, while,switch等語句的執行語句無論多少都要加括號{},case 的執行語句中如果定義變量必須加括號{}。(1.42+) 說明:閱讀代碼更加清晰,減少錯誤產生 示例: if (a>b){doStart();} case x:{int i = 9;}規則6 相對獨立的程序塊之間、變量說明之后必須加空行。 (1.42+)說明:閱讀代碼更加清晰示例:if(a > b){doStart();}//此處是空行return;規則7 在兩個以上的關鍵字、變量、常量進行對等操作時,它們之間的操作符之前、之后或者前后要加空格;進行非對等操作時,如果是關系密切的立即操作符(如.),后不應加空格。(1.42+)說明:閱讀代碼更加清晰示例:if (a == b){objectA.doStart();}a *= 2;1.1.2 建議建議1 類屬性和類方法不要交叉放置,不同存取范圍的屬性或者方法也盡量不要交叉放置。(1.42+)格式:類定義{ 類的公有屬性定義 類的保護屬性定義 類的私有屬性定義 類的公有方法定義 類的保護方法定義 類的私有方法定義}建議2 修飾詞按照指定順序書寫:[訪問權限][static][final] 。(1.42+) 示例: public static final String str = “abc”;1.2 注釋1.2.1 規則規則1 源程序注釋量必須在30%以上。(1.42+)說明:由于每個文件的代碼注釋不一定都可以達到30%,建議以一個系統內部模塊作為單位進行檢查規則2 包的注釋:寫入一個名為 package.html 的HTML格式的說明文件放入包所在路徑。包的注釋內容:簡述本包的作用、詳細描述本包的內容、產品模塊名稱和版本、公司版權。(1.42+)說明:方便JavaDoc收集,方便對包的了解示例:com/huawei/iin/websmap/comm/package.html<html><body><p>一句話簡述。<p>詳細描述。<p>產品模塊名稱和版本<br>公司版權信息</body></html>示例:<html><body><P>為 WEBSMAP 提供通信類,上層業務使用本包的通信類與 SMP-B 進行通信。<p>詳細描述。。。。。。。。<p>IIN V100R001 WEBSMAP<br>(C) 版權所有 2000-2001 華為技術有限公司</body></html>規則3 類和接口的注釋放在class 或者 interface 關鍵字之前,import 關鍵字之后。注釋主要是一句話功能簡述與功能詳細描述。類注釋使用“/** */”注釋方式(1.42+)說明:方便JavaDoc收集,沒有import可放在package之后。注釋可根據需要列出:作者、內容、功能、與其它類的關系等。功能詳細描述部分說明該類或者接口的功能、作用、使用方法和注意事項,每次修改后增加作者和更新版本號和日期,@since 表示從那個版本開始就有這個類或者接口,@deprecated 表示不建議使用該類或者接口。/** * 〈一句話功能簡述〉 * 〈功能詳細描述〉 * @author [作者](必須)* @see [相關類/方法](可選) * @since [產品/模塊版本] (必須) * @deprecated (可選) */示例:package com.huawei.iin.logwebsmap.comm;import java.util.*;/** * LogManager 類集中控制對日志讀寫的操作。 * 全部為靜態變量和靜態方法,對外提供統一接口。分配對應日志類型的讀寫器, * 讀取或寫入符合條件的日志紀錄。 * @author 張三,李四,王五* @see LogIteraotor * @see BasicLog * @since CommonLog1.0 */public class LogManager規則4 類屬性(成員變量)、公有和保護方法注釋:寫在類屬性、公有和保護方法上面,注釋方式為“/** */”.(1.42+)示例:/** * 注釋內容 */private String logType;/** * 注釋內容 */public void write()規則5 公有和保護方法注釋內容:列出方法的一句話功能簡述、功能詳細描述、輸入參數、輸出參數、返回值、異常等。(1.42+)格式:/** * 〈一句話功能簡述〉 * 〈功能詳細描述〉 * @param [參數1] [參數1說明] * @param [參數2] [參數2說明] * @return [返回類型說明] * @exception/throws [異常類型] [異常說明] * @see [類、類#方法、類#成員]* @since [起始版本] * @deprecated */說明:@since 表示從那個版本開始就有這個方法,如果是最初版本就存在的方法無需說明;@exception或throws 列出可能仍出的異常;@deprecated 表示不建議使用該方法。示例: /** * 根據日志類型和時間讀取日志。 * 分配對應日志類型的LogReader, 指定類型、查詢時間段、條件和反復器緩沖數, * 讀取日志記錄。查詢條件為null或0的表示沒有限制,反復器緩沖數為0讀不到日志。 * 查詢時間為左包含原則,即 [startTime, endTime) 。 * @param logTypeName 日志類型名(在配置文件中定義的) * @param startTime 查詢日志的開始時間 * @param endTime 查詢日志的結束時間 * @param logLevel 查詢日志的級別 * @param userName 查詢該用戶的日志 * @param bufferNum 日志反復器緩沖記錄數 * @return 結果集,日志反復器 * @since 1.2 */ public static LogIterator read(String logType, Date startTime, Date endTime, int logLevel, String userName, int bufferNum)規則6 對于方法內部用throw語句拋出的異常,必須在方法的注釋中標明,對于所調用的其他方法所拋出的異常,選擇主要的在注釋中說明。 對于非RuntimeException,即throws子句聲明會拋出的異常,必須在方法的注釋中標明。(1.42+)說明:異常注釋用@exception或@throws表示,在JavaDoc中兩者等價,但推薦用@exception標注Runtime異常,@throws標注非Runtime異常。異常的注釋必須說明該異常的含義及什么條件下拋出該異常。規則7 注釋應與其描述的代碼相近,對代碼的注釋應放在其上方,并與其上面的代碼用空行隔開,注釋與所描述內容進行同樣的縮排。(1.42+)說明:可使程序排版整齊,并方便注釋的閱讀與理解。示例:/* * 注釋*/public void example2( ){ // 注釋 CodeBlock One // 注釋 CodeBlock Two}/* * 注釋*/public void example( ){ // 注釋 CodeBlock One // 注釋 CodeBlock Two}規則8 對于switch語句下的case語句,必須在每個case分支結束前加上break語句。(1.42+)說明:break才能真正表示該switch執行結束,不然可能會進入該case以后的分支。至于語法上合法的場景“一個case后進入下一個case處理”,應該在編碼設計上就避免。規則9 修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。(1.42+)規則10 注釋的內容要清楚、明了,含義準確,防止注釋二義性。(1.42+)說明:錯誤的注釋不但無益反而有害。規則11 避免在注釋中使用縮寫,特別是不常用縮寫。(1.42+)說明:在使用縮寫時或之前,應對縮寫進行必要的說明。規則12 對重載父類的方法必須進行@Override聲明(5.0+)說明:可清楚說明此方法是重載父類的方法,保證重載父類的方法時不會因為單詞寫錯而造成錯誤(寫錯方法名或者參數個數,類型都會編譯無法通過)示例: @Override public void doRequest(SipServletRequest req) throws ServletException, IOException1.2.2 建議建議1 避免在一行代碼或表達式的中間插入注釋。(1.42+)說明:除非必要,不應在代碼或表達中間插入注釋,否則容易使代碼可理解性變差。建議2 在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息。(1.42+)說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復注釋信息。示例:如下注釋意義不大。// 如果 receiveFlag 為真if (receiveFlag)而如下的注釋則給出了額外有用的信息。// 如果從連結收到消息if (receiveFlag)建議3 對關鍵變量的定義和分支語句(條件分支、循環語句等)必須編寫注釋。(1.42+)說明:這些語句往往是程序實現某一特定功能的關鍵,對于維護人員來說,良好的注釋幫助更好的理解程序,有時甚至優于看設計文檔。建議4 注釋應考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準確的英文表達。中文注釋中需使用中文標點。方法和類描述的第一句話盡量使用簡潔明了的話概括一下功能,然后加以句號。接下來的部分可以詳細描述。(1.42+)說明:注釋語言不統一,影響程序易讀性和外觀排版,出于對維護人員的考慮,建議使用中文。JavaDoc工具收集簡介的時候使用選取第一句話。建議5 方法內的單行注釋使用 //。(1.42+)說明:調試程序的時候可以方便的使用 /* 。。。*/ 注釋掉一長段程序。建議6 一些復雜的代碼需要說明。(1.42+)示例:這里主要是對閏年算法的說明。 //1. 如果能被4整除,是閏年; //2. 如果能被100整除,不是閏年; //3. 如果能被400整除,是閏年。建議7 使用Html標簽使JavaDoc生成更加美觀。(1.42+)示例:/** * Returns a hash code for this string. The hash code for a * <code>String</code> object is computed as * <blockquote><pre> * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] * </pre></blockquote> * using <code>int</code> arithmetic, where <code>s[i]</code> is the * <i>i</i>th character of the string, <code>n</code> is the length * of * the string, and <code>^</code> indicates exponentiation. * (The hash value of the empty string is zero.) * * @return a hash code value for this object. */public int hashCode() 生成后的JavaDoc圖1 生成后的JavaDoc1.3 命名1.3.1 規則規則1 類名和接口使用類意義完整的英文描述,每個英文單詞的首字母使用大寫、其余字母使用小寫的大小寫混合法。(1.42+)示例:OrderInformation, CustomerList, LogManager, LogConfig, SmpTransaction規則2 方法名使用類意義完整的英文描述:第一個單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。(1.42+)示例:private void calculateRate();public void addNeWorder();規則3 方法中,存取屬性的方法采用setter 和 getter方法,動作方法采用動詞和動賓結構。(1.42+)格式:get + 非布爾屬性名()is + 布爾屬性名()set + 屬性名()動詞()動詞 + 賓語()示例:public String getType();public boolean isFinished();public void setVisible(boolean);public void show();public void addKeyListener(Listener);規則4 屬性名使用意義完整的英文描述,第一個單詞的字母使用小寫,剩余單詞首字母大寫其余字母小寫的大小寫混合法。屬性名不能與方法名相同。(1.42+)示例:private customerName;private orderNumber;private smpSession;規則5 常量名使用全大寫的英文描述,英文單詞之間用下劃線分隔開,并且使用 static final修飾。(1.42+)示例:public static final int MAX_VALUE = 1000;public static final String DEFAULT_START_DATE = "2001-12-08";1.3.2 建議建議1 包名采用域后綴倒置的加上自定義的包名,采用小寫字母,都應該以com.huawei開頭(不包括一些特殊原因)。在部門內部應該規劃好包名的范圍,防止產生沖突。部門內部產品使用部門的名稱加上模塊名稱。產品線的產品使用產品的名稱加上模塊的名稱。(1.42+)說明:除特殊原因包結構都必須以com.huawei開頭,如果因為OEM合作等關系,可以不做要求。格式:com.huawei.產品名.模塊名稱示例:融合WEBSMAP包名 com.huawei.iin.websmap建議2 通過對函數或過程、變量、結構等正確的命名以及合理地組織代碼的結構,使代碼成為自注釋的。(1.42+)說明:清晰準確的函數、變量等的命名,可增加代碼可讀性,并減少不必要的注釋。建議3 常用組件類的命名以組件名加上組件類型名結尾。(1.42+)示例:application 類型的,命名以App 結尾——MainAppFrame 類型的,命名以Frame 結尾——TopoFramePanel 類型的,建議命名以Panel 結尾——CreateCircuitPanelBean 類型的,建議命名以Bean 結尾——DataAccessBeanEJB 類型的,建議命名以EJB 結尾——DBProxyEJBApplet 類型的,建議命名以Applet 結尾——PictureShowApplet建議4 如果函數名超過15 個字母,可采用以去掉元音字母的方法或者以行業內約定俗成的縮寫方式縮寫函數名。(1.42+)示例:getCustomerInformation() 改為 getCustomerInfo()建議5 準確地確定成員函數的存取控制符號:只是該類內部調用的函數使用 private 屬性,繼承類可以使用的使用protected屬性,同包類可以調用的使用默認屬性(不加屬性控制符號),對外公開的函數使用public屬性(1.42+)示例:protected void getUserName(){。。。。。。}private void calculateRate(){。。。。。。}建議6 含有集合意義的屬性命名,盡量包含其復數的意義。(1.42+)示例:customers, orderItems1.4 編碼1.4.1 規則規則1 數據庫操作、IO操作等需要使用結束close()的對象必須在try -catch-finally 的finally中close(),如果有多個IO對象需要close(),需要分別對每個對象的close()方法進行try-catch,防止一個IO對象關閉失敗其他IO對象都未關閉。(1.42+)示例:try{ // ... ...}catch(IOException ioe){ //... ...}finally{ try { out.close(); } catch (IOException ioe) { //... ...}try { in.close(); } catch (IOException ioe) { //... ... }}規則2 系統非正常運行產生的異常捕獲后,如果不對該異常進行處理,則應該記錄日志。 (1.42+)說明:此規則指通常的系統非正常運行產生的異常,不包括一些基于異常的設計。若有特殊原因必須用注釋加以說明。示例:try{ //.... ...}catch (IOException ioe){ logger.error(ioe);}規則3 自己拋出的異常必須要填寫詳細的描述信息。(1.42+)說明:便于問題定位。示例:throw new IOException("Writing data error! Data: " + data.toString());規則4 運行時異常使用RuntimeException的子類來表示,不用在可能拋出異常的方法聲明上加throws子句。非運行期異常是從Exception繼承而來的,必須在方法聲明上加throws子句。(1.42+)說明:非運行期異常是由外界運行環境決定異常拋出條件的異常,例如文件操作,可能受權限、磁盤空間大小的影響而失敗,這種異常是程序本身無法避免的,需要調用者明確考慮該異常出現時該如何處理方法,因此非運行期異常必須有throws子句標出,不標出或者調用者不捕獲該類型異常都會導致編譯失敗,從而防止程序員本身疏忽。運行期異常是程序在運行過程中本身考慮不周導致的異常,例如傳入錯誤的參數等。拋出運行期異常的目的是防止異常擴散,導致定位困難。因此在做異常體系設計時要根據錯誤的性質合理選擇自定義異常的繼承關系。還有一種異常是Error 繼承而來的,這種異常由虛擬機自己維護,表示發生了致命錯誤,程序無法繼續運行例如內存不足。我們自己的程序不應該捕獲這種異常,并且也不應該創建該種類型的異常。規則5 在程序中使用異常處理還是使用錯誤返回碼處理,根據是否有利于程序結構來確定,并且異常和錯誤碼不應該混合使用,推薦使用異常。(1.42+)說明:一個系統或者模塊應該統一規劃異常類型和返回碼的含義。但是不能用異常來做一般流程處理的方式,不要過多地使用異常,異常的處理效率比條件分支低,而且異常的跳轉流程難以預測。注意:Java 5.0 程序內部的錯誤碼可以使用枚舉來表示。規則6 注意運算符的優先級,并用括號明確表達式的操作順序,避免使用默認優先級。(1.42+)說明:防止閱讀程序時產生誤解,防止因默認的優先級與設計思想不符而導致程序出錯。示例:下列語句中的表達式word = (high << 8) | low (1)if ((a | b) && (a & c)) (2)if ((a | b) < (c & d)) (3)如果書寫為high << 8 | lowa | b && a & ca | b < c & d(1)(2)雖然不會出錯,但語句不易理解;(3)造成了判斷條件出錯。規則7 避免使用不易理解的數字,用有意義的標識來替代。涉及物理狀態或者含有物理意義的常量,不應直接使用數字,必須用有意義的靜態變量或者枚舉來代替。使用異常來表示方法執行錯誤,而不是使用C++的錯誤返回碼方式。(1.42+)示例:如下的程序可讀性差。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}注意:Java 5.0 下建議使用枚舉來表示。異常:public void function(){... throw new RuntimeException(“。。?!?;}規則8 數組聲明的時候使用 int[] index ,而不要使用 int index[] 。(1.42+)說明:使用int index[] 格式使程序的可讀性較差,int [] index 表示聲明了一個int數組(int [])叫做index示例:如下程序可讀性差:public int getIndex()[]{ ....}如下程序可讀性好:public int[] getIndex(){ ....}規則9 不要使用 System.out 與 System.err 進行控制臺打印,應該使用工具類(如:日志工具)進行統一記錄或者打印。(1.42+)說明:代碼發布的時候可以統一關閉控制臺打印,代碼調試的時候又可以打開控制臺打印,方便調試。規則10 用調測開關來切換軟件的DEBUG版和正式版,而不要同時存在正式版本和DEBUG版本的不同源文件,以減少維護的難度。 (1.42+)規則11 集合必須指定模板類型(5.0+)說明:方便程序閱讀,除去強制轉換代碼示例:Map<String,MyObject> map = new HashMap<String,MyObject>();規則12 一個文件不要定義兩個類(并非指內部類)。(1.42+)說明:方便程序的閱讀與代碼的維護規則13 所有的數據類必須覆寫toString()、hashCode()、equals() 方法,toString()方法返回該類有意義的內容。(1.42+)說明:方便數據類的比較,父類如果實現了比較合理的toString() ,子類可以繼承不必再重寫。hashCode與equals可以使用eclipse自動生成。示例:public TopoNode{ private String nodeName; public String toString() { return "NodeName : " + nodeName; }}規則14 判斷語句不要使用”* == true”來判斷為真說明:方便閱讀,減少沒有必要的計算以下錯誤:if (ok == true){……}以下正確:if (ok){……}規則15 不要寫沒有必要的向上強制轉型。(1.42+)說明:沒必要寫的向上強制轉型會浪費性能,增加代碼閱讀難度示例:以下錯誤:FileInputStream fis = new FileInputStream(f);InputStream is = (InputStream)fis;1.4.2 建議建議1 記錄異常不要保存exception.getMessage(),而要記錄exception.toString(),一般可通過日志工具記錄完整的異常堆棧信息。(1.42+)說明:NullPointException拋出時常常描述為空,這樣往往看不出是出了什么錯。示例:try { ... } catch (FileNotFoundException e) { logger.error(e); }建議2 一個方法不應拋出太多類型的異常。(1.42+)說明: 如果程序中需要分類處理,則將異常根據分類組織成繼承關系。如果確實有很多異常類型首先考慮用異常描述來區別,throws/exception子句標明的異常最好不要超過三個。建議3 異常捕獲盡量不要直接 catch (Exception ex),應該把異常細分處理。(1.42+)說明:可以設計更合理異常處理分支建議4 如果多段代碼重復做同一件事情,那么在方法的劃分上可能存在問題。(1.42+)說明:若此段代碼各語句之間有實質性關聯并且是完成同一件功能的,那么可考慮把此段代碼構造成一個新的方法。建議5 集合中的數據如果不使用了應該及時釋放,尤其是可重復使用的集合。(1.42+)說明:由于集合保存了對象的引用,虛擬機的垃圾收集器就不會回收。建議6 源程序中關系較為緊密的代碼應盡可能相鄰。(1.42+)說明:便于程序閱讀和查找。示例:矩形的長與寬關系較密切,放在一起。rect.length = 10;rect.width = 5;建議7 不要使用難懂的技巧性很高的語句,除非很有必要時。(1.42+)說明:高技巧語句不等于高效率的程序,實際上程序的效率關鍵在于設計與算法。建議8 明確方法功能,精確(而不是近似)地實現方法設計。一個函數僅完成一件功能,即使簡單功能也編寫方法實現。 (1.42+)說明:雖然為僅用一兩行就可完成的功能去編方法好象沒有必要,但用方法可使功能明確化,增加程序可讀性,亦可方便維護、測試。建議9 應明確規定對接口方法參數的合法性檢查應由方法的調用者負責還是由接口方法本身負責,缺省是由方法調用者負責。(1.42+)說明:對于模塊間接口方法的參數的合法性檢查這一問題,往往有兩個極端現象,即:要么是調用者和被調用者對參數均不作合法性檢查,結果就遺漏了合法性檢查這一必要的處理過程,造成問題隱患;要么就是調用者和被調用者均對參數進行合法性檢查,這種情況雖不會造成問題,但產生了冗余代碼,降低了效率。建議10 盡量使用Java 5.0新循環寫法。(5.0+)說明:代碼更加簡潔示例:ArrayList<String> list = new ArrayList<String>();list.add...for(String str:list){System.out.println(str);}建議11 使用Java 5.0枚舉來替代以前用數字與字符串的同等目的的操作。(5.0+)說明:Java 5.0以前沒有枚舉,大家都用數字或者字符串做枚舉同樣功能的事情示例:public enum EnumDemo{ ERROR,INFO,DEBUG}In other function:EnumDemo t = EnumDemo.DEBUG;if (t == EnumDemo.ERROR){ 。。。。。。 }建議12 interface 中定義的常量不要寫public、static、final的修飾詞,方法不要寫public修飾詞。(1.42+)說明:更加簡潔示例:public interface InterfaceT{ String TT = "abcl"; void doStart();}建議13 新起一個線程,都要使用Thread.setName(“…”)設置線程名。說明:性能測試時可對線程狀態進行監控,異常時也可以知道異常發生在哪個線程中1.5 性能與可靠性1.5.1 規則規則1 對Debug,Info級別日志輸出前必須對當前的調試等級先進行判斷。(1.42+)說明:日志一般都會有不少字符串的處理,如果不是Debug級別就沒有必要進行處理示例:if (logger.debugEnable()){logger.debug(“request : ” + request.getMethod());}規則2 數組復制使用System.arraycopy(*) 。(1.42+)說明:更好的性能規則3 不要使用循環將集合轉為數組,可以使用集合的toArray()方法。(1.42+)說明:更好的性能,代碼更加簡潔示例:ArrayList list = new ArrayList(); list.add.... String [] array = new String[list.size()]; list.toArray(array);規則4 大量字符串的相加等于處理應該使用StringBuffer。(1.42+)說明:大量的String相加等于處理性能消耗較多。“大量”一般指5次“+=”以上或者在循環中進行字符串+=操作。示例:不推薦:String str = “”;str += ”a”;str += ”b”;推薦:StringBuffer sb = new StringBuffer();sb.append(“aa”);sb.append(“bb”);sb.append(“cc”);規則5 對類中日志工具對象logger應聲明為static. (1.42+)說明:防止重復new 出logger對象(logger指各種日志工具類,可以是log4j,common log,jdk logger,內部API等,盡管一些logger對LogFactory工廠有一些優化,但是我們也必須防止代碼沒有必要的運行)。1.5.2 建議建議1 public類型的底層函數需對輸入參數進行判斷,參數不合法應該主動拋出RuntimeException。(1.42+)說明:底層函數必須保證輸入參數正確性再進行其他處理(防止后面的代碼拋出錯誤,減少沒有必要的后續代碼運行)。使用RuntimeException 減少了try catch滿天飛,并有利于快速定于異常代碼。示例:public void doDivide(int a,int b){if (b == 0){throw new IllegalArgumentException(“denominator can’t be zero”);}...}建議2 盡量使用JDK自帶的API函數,不要自己寫類似功能的函數. (1.42+)說明:JDK自身的函數在可靠性,性能方面一般有更好的表現,大家必須熟練掌握,特別是算法方面的。建議3 IO操作流使用有Buffer功能的class. (1.42+)說明:更好的性能,沒有Buffer的輸出流頻繁IO操作,效率反倒低。示例: FileOutputStream file= new FileOutputStream("test.txt"); BufferedOutputStream out = new BufferedOutputStream(file); for (int i = 0; i < bytes.length; i++ ){ out.write(…);} out.flush();

總結

從頭開始,調整好心態,現存的就是合理的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲欧美一区二区三区在线 | 国产视频一区二区三区四区 | 国产一区二区三区 | 日韩成人 | 男女做网站| 国产视频欧美视频 | 一区二区三区日韩 | 毛片91| 欧美午夜一区二区三区免费大片 | 久草在线中文最新视频 | 欧美日韩免费 | 欧美日韩在线电影 | av官网| 欧美日韩在线观看中文字幕 | 亚洲va中文字幕 | 中文字幕一二三区 | 日一日啪一啪 | 99精品国产在热久久 | 国产高清无密码一区二区三区 | 亚洲黄色影院 | 亚洲热在线观看 | 狠狠综合久久av一区二区老牛 | 久久高清 | 日韩中文字 | 中文字幕91 | 欧美日韩国产精品一区二区 | 日韩小视频在线播放 | 在线免费国产 | 欧美日韩在线看 | 国产精品国产 | 污片在线免费看 | 一区二区三区在线播放 | 亚洲欧美日韩在线 | 岛国在线免费 | 成人二区| 91精品国产综合久久婷婷香蕉 | 国产一区二区在线播放 | 久久久久久九九九 | 卡通动漫第一页 | 热久久这里只有精品 | 毛片链接 |