例如:
内部类编译之后a$b
dbcp2中的变量全部都是_开头
抽象类: Abstract 或者 Base 开头
异常类:以Exception结尾
测试类:以Test 结尾
demo code :
abstract class BaseAttachment extends NewBasePO
POJO类中布尔变量,都不要加is. 否则部分框架会引起序列化错误
案例:
SpringMVC 如果model类里定义了boolean 属性,会导致前后台传值不一致
定义基本数据类型 Boolean isDeleted, RPC框架在反向解析时以为对应的属性名是deleted.
包名统一使用小写。类有复数含义时可以定义为复数形式
如果模块、接口、类、方法使用了设计模式,在命名时要体现具体模式
如: OrderFactory. LoginProxy
尽量不要在接口中定义变量,如果一定要定义接口变量,则一定要与接口方法相关,且是整个应用的基础变量.接口中的方法和属性不要加任何修饰符,否则编译报错,在idea中如果添加修饰符会提示错误。
参考 各层命名规约:
获取单个对象用get做前缀
获取多个对象用list做前缀
获取统计值的方法用count做前缀
插入的方法用save/insert做前缀
删除的方法用remove/delete做前缀
修改的方法用update做前缀
领域模型命名规约:
数据对象 xxxDO xxx 指代表名
数据传输对象 xxxDTO xxx与业务相关的名字
展示对象 xxxVO xxx网页名称
POJO时DO/DTO/BO(业务对象)/VO的统称。禁止命名为xxxPOJO
常量定义:
不允许有任何未经定义的常量出现在代码中
long或者Long赋值时,要用大写的L
不要使用一个巨大的常量类来维护所有的常量,按业务分开维护
如果常量值尽在一个范围内变化,且带有名称之外的延申属性,定义为枚举类。
OOP规约:
不要用一个类的实例调用静态方法或属性,这样会增加编译器的解析成本
扩展:JVM类的加载顺序扩展:JVM类的加载顺序
1、装载:查找和导入Class文件
2、链接:其中解析步骤是可以选择的
(a)检查:检查载入的class文件数据的正确性
(b)准备:给类的静态变量分配存储空间
(c)解析:将符号引用转成直接引用
3、初始化:对静态变量,静态代码块执行初始化工作
所有的覆写方法必须加@Override注解
避免:getObject get0bject的问题出现
尽量不用可变参数。
在重视性能的情况下,使用可变参数机制要特别小心。可变参数方法的每次调用都会导致进行一次数组分配和初始化。另外如果客户端调用带有可变参数的方法时,没有传递参数进去,就会在运行时而不是编译时失败。
所有的相同类型的包装类对象之间的比较全部使用equals方法
关于基本数据类型与包装数据类型的使用标准如下
所有的POJO类属性必须使用包装数据类型
RPC方法的返回值和参数必须使用包装类型
所有的局部变量使用基本数类型
定义DO/DTO/VO等POJO类时,不要设定任何属性默认值。
构造方法里禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法里
POJO类必须强制写toString方法。便于排查问题
split方法得到数组时,需做最后一个分隔符后有无内容的检查
在setter和getter方法中尽量不要有业务逻辑
集合:
Set 必须重写hashCode 和 equals方法
如果自定义对象作为HashMap的键则必须重写hasnCode 和 equals 方法
ArrayList 的 subList 不可强转成ArrayList
ArrayList的subList方法 返回的是一个SubList对象。
SubList是ArrayList的一个内部类,所以我们并不能写如下代码:
ArrayList originalList = new ArrayList(10);
ArrayList subList = originalList.subList(2, 5);
在subList使用时一定要注意,对原集合的修改,会导致ConcurrentModificationException.
因为在每个subList的调用方法中都会做集合修改的判断 checkForComodification
For example:
public static void main(String[] args) {ArrayList all = new ArrayList();all.add(1);all.add(2);all.add(3);all.add(4);all.add(5);List sub = all.subList(1, 4);for(Object item : sub) {ve(item);}
}```
集合转数组时要使用 T[] toArray(T[] array), 不要直接使用Array()
例子:
ArrayList<String> list = new ArrayList<>();list.add(1);list.add(2);String[] strArray = new String[list.size()];strArray = Array(strArray);
思考为什么不使用toArray?
使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,add/remove/clear.否则会抛出UnsupportedOperationException。
Arrays.asList() 放回的时Arrays的内部类ArrayList,其并未实现上述方法。
不要在foreach循环里进行元素的remove/add操作。remove元素时请使用Iterator, 如果并发操作需要对Iterator对象加锁
反例:
List<String> list = new ArrayList<String>();list.add("1");
list.add("2");
list.add("3");
for(String item : list) {if("1".equals(item)) {ve(item);}
}
分析 1. add方法 modCount++, 初始化后和size相等2. remove 方法会修改 modCount++3. 在初始化迭代器时 会 将modCount 赋值给 expectedModCount4. 调用next方法时则会检查 modCount !== expectedModCount ==> exception throw
HashMap初始化时指定集合初始化大小
遍历map时使用entitySet而不是keySet.减少遍历次数,提高性能
ArrayList order/unsort HashMap unorder/unsort TreeSet order/sort
java 1.7之后,实现Comparator需要考虑三个条件:
1) x,y 的比较结果和 y,x 的比较结果相反。
2) x>y,y>z,则 x>z。
3) x=y,则 x,z 比较结果和 y,z 比较结果相同
public int compare(String t1, String t2) {if (v1 < v2) {return -1;} else if (v1 > v2) {return 1;} else {return 0;}}
本文发布于:2024-01-29 04:48:17,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170647490012803.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |