平时写代码的一些不好的习惯,和要注意的点
- 代码中的命名,绝不可以,以下划线或$开始/结束
- 类名使用UpperCamelCase ,但是如果遇到(DO/BO/DTO/VO/AO/PO/UID等例外,直接大写)
- 方法名,参数名,成员变量,局部变量统一使用小驼峰式.
- 常量Constant 命名全部大写,单词间用下划线隔开,不要嫌长
- 注意:POJO 中布尔类型的变量,都不要家IS 前缀,否则部分框架解析,会出现序列化问题
- 接口类中方法和属性,不加任何修饰符,public也不加,尽量不在接口中定义变量
- Service/Dao层方法的命名规约:
1)获取单个对象的方法用get做前缀 2)获取多个对象的方法用list做前缀 listHotels() 3)获取统计值的方法用count做前缀
- 类共享常量:直接在类内部private static final 定义
- 只有相同的参数类型,相同的业务含义,才可以使用Java的可变参数,且必须放在参数 列表的最后
- 不能使用已经过时的类或者方法
- 所有相同类型的包装类对象之间值的比较,全部使用equals方法(对于Integer 类型适甩)
- 关于基本数据类型和包装数据类型的使用标注:
1)所有的POJO 类属性必须使用包装数据类型 2)RPC方法返回的返回值和参数必须使用包装数据类型 3)所有的局部变量使用基本数据类型
- 谨慎使用对象的clone() 方法,因为默认是潜克隆
- 关于hashCode()和equals() 方法的规则
1) 只要重写equals()就必须重写hashCode() 2) Set 存储的是不重复的对象,(主要就是一句hashCode和equals进行判断的) 所以Set存储的对象必须重写这两个方法 3) 如果自定的对象作为Map的键,必须重写这两个方法
- Arraylist 的subLIst 结果不可以强转为ArrayList; subLIst是ArrayLIst的内部类, 是ArrayList的一个视图
- 使用集合转数组的方法,必须使用集合的toArray( T [] array) 在这之前 new T [ list.size() ];
- 关于泛型的通配符
1) 频繁往外读取内容的,适合用<? extends T> 2)频繁往内插入内容的,适合用<? super T>
- 不要在forEach,增强for循环里面对元素进行remove/add 操作,需要使用Iterator 迭代器 ,如果涉及到并发操作,需要对iterator 对象加锁
- 集合初始化时,指定集合的大小,initialCapacity=(需要存储的元素的个数/负载因子)+1 注意:负载因子(loaderFactor 默认值为0.75 ) 如果暂时无法确认集合的大小,优先设置成16 (即默认值)
- 注意各种Map类集合 K/V不能存储NULL值的情况表
- 关于集合有序性和稳定性:
有序性指:遍历的结果按照比较规则依次排列, 稳定性指:集合每次遍历的元素的次序是一定的 ArrayList:稳定/无序, hashMap: 不稳定/无序 TreeSet:稳定/有序 Set中元素的唯一性
- SimpleDateFomat 是线程不安全的类,一般不要定义为static静态变量,如果static必须加锁
- Math.random() 方法返回的是double 类型,取值范围:0<=x<1 ;能够取到0 值,如果要得到整数类型的随机数,应该直接使用Random对象的nextInt() 和nextLong() 方法
- 获取当前时间的毫秒数: System.currentTimeMills()l; 而不是new Date().getTime()
- 任何数据结构的构造或者初始化,都应该指定大小,避免数据结构的无限增长,吃光内存
- 关于MySQL数据库
1) 表达是与否的概念的字段,必须使用is_xxx的方式命名,数据的类型是unsigned tinyint 0:否 1:是 但是POJO类中的任何布尔类型的变量,都不要加 is 前缀,需要在resultMap 汇总设置从is_xxx 到 Xxx的 关系映射 2)任何字段如果要求是非负数,则类型为unsigned 3)不要使用count(列名)或count(常量) 来代替count(*), 因为 count(*)是Sql92 定义的标准的统计行数的 语法,跟数据库无关,跟null或非null 无关; count(*) 会统计值为NULL的行,而count(列名)不会统计NULL 值的行 4)使用ISNULL()来判断是否为NULL值,任何值与NULL进行比较都为NULL 5)当某一列的值全部为null值时,count(col) 的值是0,但是sum(col)的值是null,因此会出现空指针异常,可以 使用ISNULL()解决: select if(ISNULL(sum(col)) , 0, sum(col)) 6)在写分页查询逻辑的时候,若count为0 ,应该直接返回,不在执行后面的分页语句
- 不允许直接拿hashMap 与hashTable 作为查询结果集的输出
未完待续…