JavaEE编程规范(中级)
- 格式:doc
- 大小:143.00 KB
- 文档页数:15
Java编程规范总结命名:1. 为包、类、⽅法、变量取⼀个好名字,使代码易于理解2. 禁⽌使⽤魔⿁数字3. 常量命名,由全⼤写单词组成,单词间⽤下划线分隔,且使⽤ static final修饰4. 变量、属性命名,使⽤名词,并采⽤⾸字母⼩写的驼峰命名法5. ⽅法的命名,⽤动词和动宾结构,并采⽤⾸字母⼩写的驼峰命名法6. 类和接⼝的命名,采⽤⾸字母⼤写的驼峰命名法7. 包的命名,由⼀个或若⼲个单词组成,所有的字母均为⼩写8. 数组声明的时候使⽤ int[] index,⽽不要使⽤ int index[]注释:1. 尽量⽤代码来解释⾃⼰2. 注释应解释代码的意图,⽽不是描述代码怎么做的3. 保证注释与代码⼀致,避免产⽣误导4. 注释应与其描述代码位置相邻,放在所注释代码上⽅或右⽅,并与代码采⽤同样缩进5. 不要⽤注释保留废弃代码6. 不要⽤注释记录修改⽇志7. ⼀般单⾏注释⽤//,块注释⽤,JavaDoc注释⽤排版:1. 团队应遵守⼀致的排版风格2. 将排版风格固化到IDE的代码格式化配置⽂件中,并让整个团队使⽤3. 在不同的概念之间,增加空⾏4. 将逻辑紧密相关的代码放在⼀起5. 控制⼀⾏的宽度,不要超过120个字符6. 在不同的概念间(关键字、变量、操作符等)增加空格,以便清楚区分概念7. 采⽤缩进来区分不同层次的概念8. 将局部变量的作⽤域最⼩化9. 给if、for、do、while、switch等语句的执⾏体加⼤括号{}10. 控制⽂件的长度,最好不要超过500⾏变量和类型:1. 谨慎使⽤静态成员变量2. 避免随意进⾏类型强制转换,应改善设计,或在转换前⽤instanceof进⾏判断33. 需要精确计算时不要使⽤float和double4. 不能⽤浮点数作为循环变量5. 浮点型数据判断相等不能直接使⽤==6. 避免同⼀个局部变量在前后表达不同的含义7. 不要在单个的表达式中对相同的变量赋值超过⼀次8. 基本类型优于包装类型,注意合理使⽤包装类型⽅法:1. ⽅法设计的第⼀原则是要短⼩2. ⽅法设计应遵循单⼀职责原则(SRP),⼀个⽅法仅完成⼀个功能3. ⽅法设计应遵循单⼀抽象层次原则(SLAP)4. ⽅法设计应遵循命令与查询职责分离原则(CQRS)5. 不要把⽅法的⼊参当做⼯作变量/临时变量,除⾮特别需要6. 使⽤类名调⽤静态⽅法,⽽不要使⽤实例或表达式来调⽤7. 应明确规定对接⼝⽅法参数的合法性检查由调⽤者负责还是由接⼝⽅法本⾝负责8. ⽅法的参数个数不宜过多9. 谨慎使⽤可变数量参数的⽅法包、类和接⼝:1. 类和接⼝的设计应遵循⾯向对象SOLID设计原则2. 类的设计应遵循迪⽶特法则3. 类的设计应遵循“Tell,Don't ask”原则4. 类设计时优选组合⽽不是继承5. 除提供给外部使⽤的全局常量外,应尽量避免类成员变量被外部直接访问6. 避免在⽆关的变量或⽆关的概念之间重⽤名字,避免隐藏(hide)、遮蔽(shadow)和遮掩(obscure)7. 覆写(override)——⼦类与⽗类间8. 重载(overload)——类内部9. 隐藏(hide)——⼦类与⽗类间10. 遮蔽(shadow)——类内部11. 遮掩(obscure)——类内部12. 不要在⽗类的构造⽅法中调⽤可能被⼦类覆写的⽅法13. 覆写equals⽅法时,应同时覆写hashCode⽅法14. ⼦类覆写⽗类⽅法时应加上@Override注解15. 接⼝定义中去掉多余的修饰词16. 设计时,考虑类的可变性最⼩化异常:1. 只针对真正异常的情况才使⽤exception机制2. 在抛出异常的细节信息中,应包含能捕获失败的信息3. 对可恢复的情况使⽤受检异常(checked exception),对编程错误使⽤运⾏时异常(runtime exception)4. 不要忽略异常5. ⽅法注释和⽂档中要包含所抛出异常的说明6. ⽅法抛出的异常,应该与本⾝的抽象层次相对应7. 对第三⽅API抛出⼤量各类异常进⾏封装8. 使⽤异常来做错误处理,⽽⾮错误码9. 在finally块中不要使⽤return、break或continue使finally块⾮正常结束10. 不要直接捕获受检异常的基类Exception11. ⼀个⽅法不应抛出太多类型的异常12. 充分利⽤断⾔⽇志:1. ⽇志信息准确、繁简得当,满⾜快速定位的需要2. ⽇志的记录,不要使⽤ System.out 与 System.err 进⾏控制台打印,应该使⽤专⽤的⽇志⼯具(⽐如:slf4j+logback)进⾏处理3. ⽇志⼯具对象logger应声明为private static final4. ⽇志应分等级5. ⽇志中不要记录敏感信息多线程并发:1. 多线程访问同⼀个可变变量,需增加同步机制2. 禁⽌不加控制地创建新线程3. 创建新线程时需指定线程名4. 使⽤Thread对象的setUncaughtExceptionHandler⽅法注册Runtime异常的处理者(v1.5+)5. 不要使⽤Thread.stop⽅法,因为该⽅法本质是不安全的,使⽤它可能会导致数据遭到破坏6. 不要依赖线程调度器、线程优先级和yield()⽅法7. 采⽤Java1.5提供新并发⼯具代替wait和notify(v1.5+)8. 使⽤线程安全集合在多线程间共享可变数据9. 多线程操作同⼀个字符串相加,应采⽤StringBuffer10. 针对线程安全性,需要进⾏⽂档(javadoc)说明运算和表达式:1. 不要写复杂的表达式2. 运算时应避免产⽣溢出3. 采⽤括号明确运算的优先级控制语句:1. 采⽤for-each代替传统的for循环(v1.5+)2. 在switch语句的每⼀个case、和default中都放置⼀条break语句序列化:1. 尽量不要实现Serializable接⼝2. 序列化对象中的HashMap、HashSet或HashTable等集合不能包含对象⾃⾝的引⽤3. 实现Serializable接⼝的可序列化类应该显式声明 serialVersionUID泛型:1. 在集合中使⽤泛型(v1.5+)2. 类的设计可优先考虑泛型(v1.5+)3. ⽅法的设计可优先考虑泛型(v1.5+)4. 优先使⽤泛型集合,⽽不是数组(v1.5+)其他语⾔特性:1. 新代码不要使⽤已标注为@deprecated的⽅法2. 使⽤JDK⾃带的API或⼴泛使⽤的开源库,不要⾃⼰写类似的功能。
Java中级开发工程师需要掌握Java编程基础,熟悉常用的Java技术框架,了解软件开发的常用流程和方法论,同时具备一定的项目开发经验和解决问题的能力。
以下是Java中级开发工程师的一些标准:
1. Java SE编程基础:熟悉Java SE开发相关的语法、数据类型、控制语句、面向对象编程等基础知识,了解Java虚拟机的运行原理和内存管理机制,具备基本的面向对象设计和分析能力。
2. Java EE技术应用:熟悉Java EE开发技术,掌握常用的servlet、jsp、jdbc等技术,熟练运用常用的web开发框架,如Spring、Struts、Hibernate等。
3. 数据库技术:了解常用的关系型数据库(MySQL、Oracle等)和非关系型数据库(MongoDB、Redis等),理解数据库的设计和管理,熟悉SQL语言和数据库连接技术。
4. 前端技术:了解HTML、CSS、JavaScript等前端开发技术,并熟练运用相关框架和工具进行前端开发。
5. 项目管理和团队协作:具备项目管理和团队协作经验,了解敏捷开发、测试驱动开发等开发方法、熟练掌握版本控制工具(如Git、SVN)和持续集成工具(如Jenkins)等,能够独立或协作完成项目开发任务。
6. 学习和解决问题的能力:具备良好的学习和解决问题的能力,能够阅读和理解技术文档、API文档、源码、博客等相关资料,能够快速解决常见问题和处理应急事故。
总之,作为Java中级开发工程师,需要具备扎实的基础知识、项目经验和学习能力,能够熟练运用各种技术和工具进行Java应用程序开发和项目管理。
java中级试题及答案1. 以下哪个选项是Java语言的特性?A) 面向对象B) 面向过程C) 面向函数D) 面向数组答案:A2. Java中,哪个关键字用于定义一个类?A) classB) interfaceC) structD) def答案:A3. 以下哪个选项是Java中创建对象的正确方式?A) new Object();B) new object();C) new ObjectD) object.new()答案:A4. Java中,哪个关键字用于捕获异常?A) tryB) catchD) all of the above答案:D5. 在Java中,哪个关键字用于定义一个接口?A) classB) interfaceC) abstractD) package答案:B6. 下列哪个选项是Java中实现多态的方式?A) 继承B) 封装C) 多线程D) 泛型答案:A7. 在Java中,下列哪个数据类型是基本数据类型?A) StringB) intC) ArrayListD) HashMap答案:B8. Java中,哪个关键字用于定义一个方法?A) functionC) defD) void答案:D9. 在Java中,哪个关键字用于声明一个变量?A) varB) letC) constD) val答案:A10. Java中,哪个关键字用于实现内部类?A) innerB) nestedC) inner classD) class答案:C11. 下列哪个选项是Java集合框架中的接口?A) ListB) MapC) SetD) All of the above答案:D12. 在Java中,哪个关键字用于实现单例模式?A) synchronizedB) volatileC) transientD) final答案:D13. Java中,哪个关键字用于定义一个枚举类型?A) enumB) constC) finalD) static答案:A14. 在Java中,哪个关键字用于强制类型转换?A) castB) typeC) convertD) as答案:A15. Java中,哪个关键字用于定义一个泛型类?A) genericB) templateC) typeD) class答案:D。
java 编程规范Java编程规范是为了促进Java代码的可读性、可维护性和可扩展性而制定的标准。
以下是一些常见的Java编程规范:一、命名规范1. 类名、接口名、枚举名首字母大写,采用驼峰命名法。
2. 变量名、方法名首字母小写,采用驼峰命名法。
3. 常量名全部大写,使用下划线分割单词。
4. 包名全部小写,使用点号分割单词。
二、代码格式1. 使用4个空格缩进。
2. 每行代码长度不超过80个字符。
3. 在二元运算符(如赋值、算术运算、逻辑运算)两侧添加空格。
4. 在逗号、冒号、分号之后添加空格。
5. 在左花括号之后和右花括号之前添加空格。
6. 在注释之前添加空格。
三、代码结构1. 类的成员按照作用域排列,先是静态成员,然后是实例成员。
2. 类的方法按照功能排列,先是构造方法,然后是其他方法。
3. 每个类只负责一个功能,遵循单一职责原则。
4. 使用适当的访问修饰符控制成员变量和方法的访问级别。
四、异常处理1. 不要捕获异常而不做任何处理,应该记录日志或者抛出更高级别的异常。
2. 不要将整个方法体放在try-catch块中,应该只捕获需要处理的异常。
3. 不要使用异常控制程序的流程,应该使用条件语句或者循环结构。
五、注释规范1. 使用Javadoc注释对类、方法、参数、返回值进行说明。
2. 在每个类的头部使用Javadoc注释描述该类的功能。
3. 使用内联注释对代码进行解释、补充和说明。
4. 注释应该清楚、简明、不冗余,遵循自然语言的习惯。
六、其他规范1. 避免使用魔法数值,应该使用常量或者枚举来表示。
2. 使用块注释对重要的代码块进行标注,方便阅读和查找。
3. 使用业界公认的缩写和术语,避免拼写错误和歧义。
4. 使用合适的数据结构和算法来解决问题,避免低效的代码。
以上仅是Java编程规范的一部分,具体的规范还需要根据具体的项目和团队来制定。
遵循编程规范可以提高代码质量和可维护性,提升团队的协作效率。
JavaEE的⼗三个技术规范Java 是⼀种⾮常棒的语⾔,健壮,跨平台运⾏,屏蔽了具体的平台环境的要求,也就是说只要⽀持java 虚拟机,就可以运⾏java程序。
下⾯,我们⼀起学习⼀下J2EE的⼗三种技术规范。
⼀、JDBC:Java Data Base Connectivity,数据库连接 ⼤家对微软的ODBC数据库访问的接⼝⽐较熟悉,⽽在java中创建数据库连接使⽤的是JDBC,学习过程中,JDBC和ODBC很相似,甚⾄JDBC⽐ODBC更好⽤,这是因为JDBC是在ODBC的基础上开发的,集成的ODBC的很多优点,同时他也是独⽴平台的。
⼆、JNDI:Java Naming and Directory Interfaces,Java的命名和⽬录接⼝ JNDI是⼀个Java应⽤程序设计接⼝,它为我们提供了查找和访问各种命名和⽬录服务的通⽤、统⼀⽅式。
JNDI避免了程序与数据库之间的紧耦合,使应⽤更加易于配置,便于部署。
有了JNDI,我们就不要关⼼“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL 格式是什么?访问数据库的⽤户名和密码是什么?”这些问题了。
我们编写的程序不⽤关⼼对JDBC驱动的引⽤。
我们只需要在J2EE容器中定义⼀个数据源,然后通过这个数据源访问后台数据库。
参考:/zhaosg198312/article/details/3979435三、EJB:Enterprise Java Beans,企业级Java Beans、EJB是实现分布式业务逻辑的Java组件。
它以⼀个标准⾃动处理了如数据持久化、事务集成、安全对策等问题,为后台业务提供了⼀个标准⽅式。
EJB规范讨论了四中对象类型:⽆状态会话bean、有状态会话bean、实体bean、消息驱动bean。
Stateless Session Beans是⼀类不包含状态信息的分布式对象,允许来⾃多个客户端的并发访问。
⽆状态回话Bean没有资源集约性,访问的实例变量内容页不会被保存。
java代码规范Java代码规范是一套约定俗成的编程规范,旨在提高代码的可读性、可维护性和可重用性。
以下是一些常见的Java代码规范:命名规范:1. 类名使用大驼峰命名法,例如MyClass。
2. 方法名和变量名使用小驼峰命名法,例如myMethod。
3. 常量名使用全大写字母和下划线,例如MAX_VALUE。
4. 包名使用全小写字母,例如com.example.mypackage。
代码格式规范:1. 使用四个空格缩进,避免使用制表符。
2. 每行代码不超过80个字符,超出则换行。
3. 使用空格将运算符、逗号和分号与操作数分开,例如"int a =b + c;"。
4. 在左括号前后加一个空格,例如"if (condition) {"。
5. 在方法的左花括号前加空格,例如"public void myMethod() {"。
6. 使用大括号括起的代码块独占一行。
7. 在逻辑上相关的代码块之间使用空行分隔。
注释规范:1. 在类、方法和成员变量定义之前使用Javadoc注释说明其作用、参数和返回值。
2. 在方法内部使用注释解释代码的逻辑。
3. 避免使用不必要的注释,代码应尽可能自解释。
代码质量规范:1. 遵循SOLID原则,尽量将代码设计为松耦合、高内聚的模块。
2. 避免使用魔术数字,使用常量代替。
3. 使用异常处理机制来处理可预料的异常情况,不要捕获所有异常。
4. 避免使用全局变量,尽量将变量的作用范围限制在最小范围内。
5. 避免代码冗余和重复,尽量使用工具类和设计模式来重用代码。
测试规范:1. 使用单元测试框架(例如JUnit)编写测试用例,并确保每个方法都有相应的测试用例。
2. 使用断言来验证预期结果和实际结果是否一致。
3. 测试方法的命名应描述被测试方法的功能和预期结果。
版本管理规范:1. 使用版本管理工具(例如Git)来管理代码的版本和变更历史。
java代码规则标准Java代码规则标准可以参考以下内容:- 类命名:- 抽象类:适用的设计模式为模板模式。
抽象是自下往上的设计。
由具体实现推断出抽象方法。
建议以`Abstract`开头。
- 枚举类:枚举是由JVM来保证的单例。
可以用来做单例类。
枚举类常用来做值判断,不建议每次进行循环判断得到实例。
建议由内部维护一个`map`类型,当做`cache`。
此方法建议放在`static`静态代码块中实现。
- 工具类:工具类常为无状态对象,无状态对象都是线程安全对象,建议使用`final`修饰。
工具类中避免出现业务属性,如果出现业务属性,抽象出领域层。
- 异常类:建议保持异常链。
- 接口实现类:众所周知。
- 设计模式相关类:- 处理特定功能的:其主要的目的是代码可重复使用。
- 测试类:- 领域模型载体:- 方法命名:- 布尔判断方法:- 检查的方法:- 按需求才执行的方法:- 异步相关方法:- 回调方法:- 操作对象生命周期的方法:- 与集合操作相关的方法:- 数据增删改查相关的方法:- 成对出现的动词:- 获取必须的参数:- 获取数据并对数据进行某种处理:- 方法编程建议:- 方法复杂度:凡事逻辑判断语句均为复杂度。
当一个方法中出现了大于等于10个复杂度,建议根据方法实现进行业务抽离。
在编写Java代码时,需要遵循一定的规则和标准,以提高代码的可读性、可维护性和可扩展性。
你可以根据项目的具体需求和团队的约定来选择合适的规范。
java 代码规范Java代码规范是指在Java程序设计中遵循的一些规则和约定,旨在提高代码的可读性、可维护性和可移植性。
遵守代码规范可以帮助团队成员更好地理解和协作开发,提高代码的质量和可靠性。
本文将围绕Java代码规范展开讨论,包括命名规范、代码风格、注释规范、异常处理等方面的内容。
一、命名规范1.包名规范包名应该全小写,连接符可以使用小写字母和下划线,不推荐使用数字。
包名应该能够清晰地表达包所包含的内容,不要使用太长或者太短的包名。
2.类名规范类名应该采用驼峰命名法,首字母大写,类名应该能够清晰地表达类的用途,不要使用太长或者太短的类名。
如果类名由多个单词组成,应该遵循每个单词首字母大写的命名规范。
3.接口名规范接口名应该采用驼峰命名法,首字母大写,接口名应该能够清晰地表达接口的用途,不要使用太长或者太短的接口名。
如果接口名由多个单词组成,应该遵循每个单词首字母大写的命名规范。
4.变量名规范变量名应该采用驼峰命名法,首字母小写,变量名应该能够清晰地表达变量的用途,不要使用太长或者太短的变量名。
如果变量名由多个单词组成,应该遵循每个单词首字母小写的命名规范。
5.常量名规范常量名应该全大写,单词之间使用下划线分隔,常量名应该能够清晰地表达常量的用途,不要使用太长或者太短的常量名。
6.方法名规范方法名应该采用驼峰命名法,首字母小写,方法名应该能够清晰地表达方法的用途,不要使用太长或者太短的方法名。
如果方法名由多个单词组成,应该遵循每个单词首字母小写的命名规范。
二、代码风格1.缩进和空格缩进使用4个空格,不使用tab键。
在操作符前后使用空格,增强代码的可读性。
2.大括号的使用在类定义、方法定义、控制结构等的语句块后面使用大括号,增强代码的可读性。
3.代码行长度每行代码的长度不要超过80个字符,超过80个字符的代码应该使用换行符进行分割。
4.引号的使用字符串常量应该使用双引号,字符常量应该使用单引号。
java 编码规范《Java编码规范》1. 代码风格- 代码缩进:使用4个空格进行缩进,不使用制表符。
- 行长限制:每行代码不超过80个字符,超出则进行换行。
- 行尾空格:行尾不留空格。
- 行尾注释:行尾注释与代码之间至少保留2个空格的距离。
- 命名规范:使用驼峰命名法,类名首字母大写,变量和方法名首字母小写。
- 常量命名:常量使用全大写字母,并用下划线分隔单词。
- 空行:类与方法之间保留一个空行,方法内逻辑块之间保留一个空行。
2. 注释规范- 文件注释:每个源文件的头部必须包含文件注释,说明该文件的作者、日期等信息。
- 类注释:每个类的头部必须包含类注释,描述该类的作用、用法等。
- 方法注释:每个方法必须包含方法注释,描述该方法的功能、参数、返回值等。
- 代码注释:在代码中需要加入注释说明的地方,添加合理的注释来增加代码可读性。
3. 包和导入规范- 包名规范:包名全部小写,多个包名之间用英文句点"."分隔,采用反域名形式命名。
- 导入规范:不要使用通配符"*"导入整个包,应明确导入所需的类。
4. 类和接口规范- 类结构顺序:依次按照成员变量、构造方法、普通方法的顺序来编写类的结构。
- 成员变量声明:先声明公有的静态常量,再声明私有的静态变量,接着声明私有的实例变量。
- 构造方法:在类的开头部分声明构造方法,按照方法名和参数顺序进行编写。
- 方法和变量:局部变量应放在使用的最近位置上,避免声明太早或太迟,增加代码的可读性。
5. 异常处理规范- 异常的捕获和处理:在可能发生异常的地方进行捕获和处理,而不是简单地将异常抛出给上层调用者。
- 不要捕获并忽略异常:捕获异常后应该进行适当的处理,而不是简单地将异常信息打印出来或者忽略它们。
6. 标准化代码结构- 采用分层结构:将代码按照功能、模块进行划分,每个模块或类负责一部分功能。
- 逻辑清晰:保持代码逻辑清晰,避免重复、冗余的代码,使用合适的设计模式来优化代码结构。
Java中级程序员任职要求一、工作经验要求1、2年以上Java开发经验:Java中级程序员需要具备2年以上Java实际项目开发经验,能够熟练掌握Java基础知识和常用框架,能够独立完成开发任务。
2、1年以上互联网工作经验:互联网行业是Java应用的主要领域之一,因此,Java中级程序员需要具备1年以上互联网工作经验,熟悉互联网产品的开发流程和规范,能够应对互联网产品的复杂性和高并发性。
二、技术要求1、熟练掌握Java基础:Java中级程序员需要熟练掌握Java基础,包括IO、多线程、集合等基础知识,能够熟练使用Java语言进行编程。
2、熟悉常用框架:Java中级程序员需要熟悉Spring、SpringMVC、MyBatis、Hibernate等常用框架,能够使用这些框架进行快速开发。
3、熟悉数据库和缓存:Java中级程序员需要熟悉Oracle或MySQL等主流数据库,能够熟练使用SQL语句,编写存储过程等。
同时,需要熟悉Redis、Memcached等缓存框架,提高系统性能。
4、熟悉系统设计和设计模式:Java中级程序员需要熟悉系统设计,熟练使用常见设计模式,有模块化开发意识,有一定的系统架构能力。
三、能力和素质要求1、良好的沟通表达能力:Java中级程序员需要具备良好的沟通表达能力,能够完整准确理解沟通内容,并且能够清晰准确地表达自己的想法和意见。
2、团队合作精神:Java中级程序员需要具备良好的团队合作精神,能够与团队成员紧密合作,共同完成项目任务。
3、工作规范意识:Java中级程序员需要具备工作规范意识,能够遵守公司的工作规范和流程,保证工作质量和效率。
4、学习能力:Java技术不断发展,Java中级程序员需要具备学习能力,不断学习和掌握新的技术和工具,保持技术领先。
四、其他要求1、有移动端接口开发经验者优先:随着移动互联网的快速发展,移动端接口开发成为Java中级程序员的重要技能之一。
因此,有移动端接口开发经验者优先。
开发编程规范J2ee项目一般是大型项目,大型项目都需要团队协作开发。
团队协作开发的成功需要一致的开发规范。
对软件进行后续的维护成本远远要大于它最初的开发成本,保证开发的系统是可持续工作易于维护就至关重要了。
可靠的OO设计原理实践及一个良好的JAVA编程规范在整个J2EE项目生命周期中变得十分重要。
在团队开发中,应该保持所有的代码上都乎合- 1 -一个相同的标准,并且代码在风格上应该保持一致。
JAVA编程标准为什么会显得这么重要呢?我们经常会发生这样的情况:太注重于j2ee 的某方面的技术细节,而乎略了良好的程序设计和编程习惯。
太多的J2EE项目的失败就是因为在项目中含有太多草率的代码,使得整个系统变得脆弱、不可维护,最终只得放弃整个项目。
关于编程规范,它是一个巨大的领域。
在这里不作详细的阐述。
这里只列出了在实际J2EE开发中十分重要的问题进行讨论,同时对这些问题有不同的见解和解决方法。
一切都应该以实践为主。
一、不要去发明自己的标准几乎每一门编程语言都有自己的一套编程标准,但是千万不要去发明自己的编程标准。
Java是一门简单的语言,我们应该以sun的java编程标准作为准则。
在它的基础上进行扩充。
比如C++语言使用的匈牙利命名法,并不适合用于在JAVA。
也千万不要在一种开发语言中使用另外一种开发语言的编程标准。
二、java类中代码的组织结构1.按照方法的功能,而不是按照方法的可访问性来组织方法。
比如:不是把所有的public方法放在private方法的前面,而是把一个private方法放成使用它的那些public方法的附近。
2.类的组织约定静态变量和方法。
成员变量。
构造函数。
接口的实现方法,连同支持它们的私用方法该类独有的公有方法(不包括已实现接口的公用方法)。
抽像保护方法提供给子类使用的保护方法与前面任何一组都无关的实现方法。
三、按职责进行分类,做你该做的事情!每一个类应该具有一个明确的职责,不要把它相干和不相干的代码都填进来。
那些不相干的代码应该重构为另一个单独的类或者是助手类。
如果一个不同概念级别上的代码对相同的对象重复调用,那么它可能需提升为一个父类。
而其它对象通过继承这个父类。
通过把相干的重复代码提取到父类和把不相干的代码重构为一个助手类是解决代码重复的常用方法。
这样可以阻止一个类的爆炸式增长,变成一个臃肿的类。
一个类,包括Javadoc和内部注释,如果超过了500行代码,它都是需要重构的候选者。
因为它可能已经承担了太多的职责。
可以运用策略模式来用一个接口把原类与助手类分开,实现助手类在不同的情况可以有不同的实现。
来提高系统的灵活性。
每一个方法都应该具有一个单一而清晰明确的职责。
否则这个方法应该进行重构。
同时这也可以防止方法变得很长。
public String addCounter(CounterDTO counter) throws BusinessException {String buffer = "00000000";// 读取seqenceString sequenceStr = (String) this.getSqlMapClientTemplate().queryForObject(SqlID.GET_COUNTER_PK, null);int seqLength;seqLength = sequenceStr.length();String counterNo = "";String regionCode = counter.getRegionCode();if (regionCode.length() > 2) {regionCode = regionCode.substring(0, 2);}counterNo = regionCode+ buffer.substring(0, buffer.length() - seqLength)+ sequenceStr;counter.setCounterNo(counterNo);// 设置主键sqlMap.insert(SqlID.ADD_COUNTER, counter);// 插入柜面数据return pk;}上面的方法是新增一个柜面信息,它有三个步聚:1. 读取指定的sequence,获得一个唯一柜面流水号2. 根据柜面的机构代码和流水号产生一个唯一8位的柜面号,柜面号由两位的机构代码+6位的流水号组成。
流水号不足6位,在前面以0补充。
3. 设置柜面信息的柜面号为新产生的柜面号,并插入数据库,成功则返回新的柜面号。
重构后的代码:// 读取sequence,获得流水号private String getCounterSequenceNo() throws BusinessException {return (String) this.getSqlMapClientTemplate().queryForObject(SqlID.GET_COUNTER_PK, null);}// 根据机构代码来生成柜面号private String generateCounterNo(String regionCode)throws BusinessException {String buffer = "00000000";String sequenceStr = this.getCounterSequenceNo();int seqLength;seqLength = sequenceStr.length();String counterNo = "";if (regionCode.length() > 2) {regionCode = regionCode.substring(0, 2);}counterNo = regionCode+ buffer.substring(0, buffer.length() - seqLength)+ sequenceStr;return counterNo;}// 新增柜面public String addCounter(CounterDTO counter) throws BusinessException {String pk = null;pk = this.generateCounterNo(counter.getRegionCode());// 产生主键counter.setCounterNo(pk);// 设置主键sqlMap.insert(SqlID.ADD_COUNTER, counter);// 插入柜面数据return pk;}重构后的代码大大的便于阅读和维护。
使方法具有明确的责任。
注意在重构的时候,通过我们把那些相对独立的任务变成一个私有的方法。
关于一个方法应该限制为多长,没有明确的规定。
它应该以人的舒服度为主。
一个方法包括注释(不含javadoc)的实现代码能够在一屏中可以进行阅读。
否则它就应该需要进行重构。
一般来说,一个方法的代码控制在30-40行是最佳的。
四、避免重复的代码在一个类中,可能在各个方法中产生了相同的代码块。
这就是重复的代码。
重复的代码是难以维护和难以理解的。
有一个类其中有两个方法如下:// 发送一个包裹public String deliveryWarePack(WarePackDTO warePack)throws BusinessException {CommonDAOFactory factory = (CommonDAOFactory) this.context.getBean(MON_DAO_FACTORY_BEAN_NAME);WarePackDAO warePackDAO = (WarePackDAO) factory.getDAOByRegionCode(this.WARE_PACK_DAO_NAME, "00");// …………}// 根据包号得到包信息public WarePackDTO getWarePackByPackNum(String packNum)throws BusinessException {CommonDAOFactory factory = (CommonDAOFactory) this.context.getBean(MON_DAO_FACTORY_BEAN_NAME);WarePackDAO warePackDAO = (WarePackDAO) factory.getDAOByRegionCode(this.WARE_PACK_DAO_NAME, "00");// ………}这似乎没有任何问题,但是这样的代码重复可能会导致严重的问题。
1. 太多的代码:如果重构后只用两行就可以了2. 令阅读者迷惑不解,阅读者可能会对开发人员产生怀疑,认为这两处是两个不相同的代码,从而去进行比较,花费更多的时间和精力。
3. 造成修改的不一致,经常可能发现对一个方法进行了修改,而忘记也应该对另一个方法也进行相同的修改。
增加代码的维护量。
修改后的代码:private WarePackDAO warePackDAO= getWarePackDAO();private CommonDAOFactory getFactory() {CommonDAOFactory factory = (CommonDAOFactory) this.context.getBean(MON_DAO_FACTORY_BEAN_NAME);return factory;}private WarePackDAO getWarePackDAO(){WarePackDAO dao = (WarePackDAO)this. getFactory(). getDAOByRegionCode(this.WARE_DAO_NAME, "00");return dao;}// 发送一个包裹public String deliveryWarePack(WarePackDTO warePack)throws BusinessException {String packNumber = this.warePackDAO.insertWarePack(warePack);}// 根据包号得到包信息public WarePackDTO getWarePackByPackNum(String packNum)throws BusinessException {WarePackDTO warePack = this.warePackDAO.getWarePack(packNum);// ………………..}五、最小的作用范围和权利成员变量和方法通常应该拥有尽可能小的可见度(包括private ,protected,public和缺省的变量和方法)。