java编程规范

ahu_neverl 贡献于2017-01-11

作者 lenovo  创建于2014-10-29 12:08:00   修改者lenovo  修改于2017-01-09 14:43:47字数3122

文档摘要:
关键词:

Java编程规范 Java编程规范 1 原则 1 代码风格 1 变量和类型 3 方法 4 包、类、接口 5 异常和日志 7 多线程并发 9 语言特性 10 原则 1. 清晰第一,只有清晰的代码才有利于以后代码重构 2. 简洁,就是易读易实现 3. 团队代码风格统一 代码风格 命名 原则 1. 命名要清晰 2. 避免造成误导 3. 使用驼峰命名方法 4. 区分意思,product,productInfo,productObject表示的都是同一个意思,变量/类名不要以info、data、object无意义的词结尾 5. 不少活少用英文缩写,一般小于15字母的不缩写 规则 规则1 禁用魔鬼数字 规则2 常量定义为:static final String APP_NAME = “123” 规则3 包名:字母全小写 类/接口名:首字母大写,驼峰命名法 方法:首字母小写,驼峰命名法 注释 原则 尽量用代码来解释自己 错误用例 If(null!=model&&mode.dataList.size()>0){ } 正确用例 If(model.isNotEmpty()){ } 规则 规则4 解释代码意图,而非描述代码怎么做的 规则5 保证注释与代码一致,避免误导 排版 原则 团队一致的排版风格 规则 规则6 排版风格固化在IDE配置文件中,团队使用同一文件 规则7 使用空行符区分不同概念(类中方法与方法之间,方法内部代码模块之间) 规则8 一行不超过120字符 规则9 文件长度不超过500行 变量和类型 原则 谨慎使用静态成员变量 规则 规则10 精确计算,不用使用float,double 规则11 浮点数不能作为循环变量 规则12 浮点数判断相等不能使用== 规则13 避免同一局部变量前后表达不同含义 规则14 使用基本类型优先包装类型,包装类型判断相等应使用equals方法 new Integer(40)== new Integer(40) 返回FALSE 方法 原则 1. 方法设计第一原则短小,第二原则短小,不超过50行 2. 遵循单一职责原则(SRP) 3. 遵循单一抽象原则(SLAP) 错误用例 void cook(){ getRice() if(){ 洗米...... } cookRice() } 正确用例 void cook(){ getRice() waterRice() cookRice() } 4. 命令与查询职责分离原则(CQRS),将数据查询与命令操作分开,不要写在同一个方法里 If(isExist(obj)){ setAttr(obj) } 规则 规则15 不要把方法入参直接使用,除非需要修改该入参的值,否则参数前加final 规则16 使用类名调用静态方法 规则17 方法参数个数不宜超过7个 规则18 谨慎使用可变数量参数方法 建议1 应明确规定对接口方法参数的合法性检查是由调用者负责还是接口方法本身负责,避免导致重复校验,影响程序性能 包、类、接口 原则 1. 类,接口的设计应遵循面向对象的SOLID设计原则 l 单一职责原则(SRP) l 开放封闭原则(Open close Principle),即新增功能时可以不修改原有代码,对扩展开放,对修改关闭 l 里氏替换原则(LSP),子类应能替换任何其超类的实例 l 接口分离原则(ISP),使用多个专门的接口要优于使用单一的总接口 l 依赖倒置原则(DIP),高层应用调用抽象的接口,底层应实现这个接口 2. 类的设计应遵循迪米特法则,也叫最小知识原则,是为了降低类之间的耦合,类C的方法f只能调用以下对象的方法 l 类C本身(this对象) l 类C实体持有的对象 l 在方法f中创建的对象 l 作为参数传递给f的对象 正确案例 Class C{ Private A a; Int func(); Public void f(B b){ this.func(); a. setvalue(); b. Insert(); D d = new D(); d.doSth(); } } 错误案例 String name = ctx.getOption().getDir().getPathName(); 3. 类的设计应遵循“tell,don’t ask”原则 正确案例 If(person.liveIn(“china”)) 错误案例 If(person.getAddr().getCounttry().equal(“china”)) 规则19 类设计时优先选择组合而不是继承 规则20 除提供给外部使用的全局变量外,应尽量避免类成员变量被外部直接访问 规则21 避免无关变量或方法重用名称,造成覆盖,重载,隐藏(属性,静态方法或内部类不会被覆盖) 规则22 不要在父类构造方法中调用可能被子类覆盖的方法(子类初始化时,会调用父类构造方法,当调用被子类覆盖的方法时,往往子类尚未初始化,导致空指针一次) 规则23 覆盖equals方法时,应同时重写hashCode方法 规则24 子类重写方法时,应加上@override注解 规则25 接口中去除多余修饰词(接口方法时默认为public abstrator,接口属性默认为public static final) 建议2 设计类时候考虑类可变性最小化 异常和日志 异常 原则 只针对真正异常的情况才使用excption机制 规则26 抛出异常的细节信息中,应包含能捕获失败的信息 规则27 对可恢复的情况使用受检异常(checked exception),对编程错误使用运行时异常(runtime exception) 共有3种异常 受检异常:向外传播或在catch中处理 运行异常:不可恢复错误,如调用服务未遵守API规定 错误:不使用,jvm内存不足 规则28 不要忽略异常,如添加空catch 规则29 方法抛出的异常应与本身的抽象层次相对应 规则30 使用异常来做错误处理,而非错误码 规则31 Finally中不要使用return break 或continue 规则32 不要直接捕获受检异常的基类Exception,否则无法恢复 规则33 一个方法不应抛出太多类型的异常 日志 原则 日志信息应当准备、简洁、满足快速定位需要 规则34 日志记录,不使用system,应使用日志工具,如(slf4j+logback) 规则35 对象logger应声明为private static final 规则36 日志要分等级 l Debug:与具体实现有关 l Info:一般业务处理的日志 l Warn:不影响业务的错误 l Error/fatal:记录异常 规则37 不要记录敏感信息 多线程并发 规则39 多线程访问同一可变变量,需加同步机制 规则40 禁止不加控制的创建新线程,使用ThreadPoolExecutor 规则41 创建线程时须指定线程名 规则42 使用Thread对象的setUncaughtExceptionHandler方法注册Runtime异常的处理者,java多线程程序中,所有线程都不允许抛出未捕获的checked exception。建议使用Thread.setUncaughtExceptionHandler为所有线程设置默认异常捕获方法。 规则43 不要使用thread.stop方法 规则44 不要依赖线程调度器、线程优先级、yield方法 规则45 使用并发工具代替wait、notify 规则46 使用线程安全集合在多线程间共享可变数据 规则47 多线程操作同一字符串相加,采用stringBuffer 语言特性 运算与表达式 规则48 不要写复杂的表达式 规则49 运算时应避免产生溢出 规则50 采用括号明确运算优先级 控制语句 规则51 使用for-each代替for循环 规则52 Switch语句中每个case,default都必须放置break语句 序列化 规则53 尽量不要实现serializable接口 规则54 序列化对象中hashmap、hashset、hashtable等集合不能包含对象自身的引用 泛型 规则55 在集合中使用泛型 规则56 类的设计可优先考虑泛型 规则57 方法的设计可优先考虑泛型 规则58 优先使用泛型集合,而不是数组

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档