前言:
最近要重整旗鼓,开始祸害人间了,呸~开始新一轮博客了,不过也不一定,废不多话,直接从建议9开始
正文:
9、少用静态导入
1、不使用*通配符,除非导入静态常量类(只含常量的类或接口)
2、方法名是明确、清晰表象意义的工具类
10、不在类中覆盖静态导入的变量和方法:原始类中重构
11、显示声明UID:SerialVersionUID流标识符、类版本定义
private static final long SerialVersionVersionUID=xxxxL;
JVM反序列化时,比较UID,异 抛错 :一致性
12、避免用序列化类在构造函数中为不变量赋值:序列化类中不适用构造函数为final变量赋值
反序列化时不执行构造函数、final在构造函数中不会重新赋值
13、避免为final变量 复杂赋值(通过返回值赋值):反序列化时不会被重新赋值
final修饰的属性不是基本类型时 反序列化 也不会被重新赋值
保持到磁盘:
类描述信息:包路径 继承关系 访问权限 变量描述访问权限 方法签名返回值 变量关联类信息
不记录方法、构造函数、static变量等具体实现
能去能回,反序列化健壮性
非瞬态transient、非静态static的实力变量值
14、使用序列化类的私有方法巧妙解决部分属性持久化问题:职工工资对外、绩效工资密(同一个类)
不被序列化:transient关键字:分布式部署不可能了
新增类、请求端过滤(no)、变更传输契约(改用xml传输、重建web service no)
序列化回调:ObjectOutputStream将对象转成流数据时,反射检查类是否要私有 无返回值writeObject方法,有?委托方法序列:默认规则;同样、流中实例化对象……,同样失去分布式部署能力(分布式部署意义不大-so just accept)
15、break不可忘,谁的break,case的,记得领回家:严谨
16、易变业务使用脚本语言编写 Java6
灵活:动态类型、不声明类型直接用,运行期改变
便捷:解释型语言,依靠解释器解释
17、慎用动态编译
实现javaFileObject接口,重写getCharContent、openInputStream、openOutputStream或实现SimpleJavaFileObject、forwardingJavaFileObject
注意:1 框架中慎用 费事费力 2要求高性能的项目勿用 3安全检查 4记录动态编译过程
18、避免instanceof非预期结果:左右两个操作数要继承or实现关系 编译通过、只能用于对象判断,左null反false
19、断言不是鸡肋:默认不开启、错继承自Error
不可使用:对外公开方法中、执行逻辑代码(生产 不启用断言 不执行)
https://blog.csdn.net/xiaoxufox/article/details/53747870#commentBox 发现网上类似的内容,还是自己读吧、不写了