当前位置: 首页 > 后端技术 > Java

Java开发规范

时间:2023-04-01 15:25:50 Java

1。显示和声明UID所有可序列化类都显示和声明serialVersionUID值。如果不显示声明,系统会默认生成一个UID。这样,在对象序列化和反序列化的时候,如果Java训练像增加一个属性或者删除一个属性,那么默认的UID也会改变,同样会导致反序列化发生:java.io.InvalidClassException案例分析创建一个Person类,定义两个属性name,age。通过redis缓存对象序列化后的byte[]。然后修改Person类的属性,增加或删除一个属性,比如增加一个地址属性。反序列化前存放在redis缓存中的byte[]。会出现反序列化失败(ps:这只是演示效果)publicclassUIDTest{publicstaticvoidmain(String[]args){try{//第一步存储序列化对象Personperson=newPerson(“杰克2”,21);RedisUtils.stringSetBit("jack2",serializeObj(person));//第二步添加修改Person类的属性,用于反序列化Personp1=(Person)deserialize(RedisUtils.byteGet("jack2"));System.out.println(p1);}catch(Exceptionex){ex.printStackTrace();}}publicstaticbyte[]serializeObj(Objectobj){try(ByteArrayOutputStreamos=newByteArrayOutputStream();ObjectOutputStreamot=newObjectOutputStream(os)){ot.writeObject(obj);返回os.toByteArray();}catch(IOExceptionex){ex.printStackTrace();}returnnull;}publicstaticObjectdeserialize(byte[]bytes){try(ByteArrayInputStreaminputStream=newByteArrayInputStream(bytes);ObjectInputStreamobjectInputStream=newObjectInputStream(inputStream)){returnobjectInputStream.readObject();}catch(Exceptionex){ex.printStackTrace();}returnnull;}}Idea创建设置,启用缺少UID提示2.检查包装类型是否为nullJava引入包装类型解决了基本类型无法实例化的问题,方便一个基本类型参??与面向对象的编程世界。由于wrapper类型的默认值为null,为了防止邪恶的java.lang.NullPointerException错误,在使用wrapper类型时,需要检查包装类型是否为null提示?【强制】所有POJO类属性必须使用封装数据类型?【强制】RPC方法的返回值和参数必须使用封装数据类型?【推荐】所有局部变量使用基本数据类型3.使用BigDecimal表示数量java.math.BigDecimal是专门为弥补浮点类型精确计算的不足而设计的类,同时也提供了常用的加减乘除数学算法。特别是,它映射到数据库中Decimal类型的字段。而如果是财务操作,则应该使用BigDecimal类型来表示金额。并尝试使用String类型的构造函数。4、POJO类重写toString()重写POJO类的toString(),因为Java默认提供的toString方法不友好,打印时无法读取。特别是在实际开发过程中,当方法抛出异常时,调用POJO的toString()方法打印出属性值。易于排除故障。推荐使用:apache的commonstoolkit5中的ToStringBuilder类。该工具类不能实例化。在实际项目中,难免要写一些Utils类。但是在写这些工具类的时候,要让工具类不可实例化。因为这些工具类只提供了一些通用的非业务领域的公共方法,没有额外的属性,所以我们只调用定义好的方法。所以没有必要实例化它。?优秀代码欣赏6.频繁的字符串操作(如拼接、替换、删除等)优先使用StringBuilder,如SQL语句的拼装、Json的封装等,优先使用StringBuilder。7.指定集合的??初始化大小。我们在使用ArrayList、HashMap等集合时,通常会直接:ArrayListstrs=newArrayList<>();然后执行添加和删除等操作,因为它的特点是动态管理长度。所以我们不用担心超过长度。但是为了编写高效的代码,必须明确指示集合初始化大小。?源代码查看8.及时回收资源对象和流对象。数据库资源、文件操作、流操作都需要及时关闭。Java7及以上,可以使用语法:try-with-resources来自动关闭资源对象。9、用ThreadPoolExecutor创建线程池在实际开发中,在多任务的情况下,通常认为为了节省处理时间,需要使用多线程技术来缩短时间。那么在编写高质量的Java代码时,就需要使用ThreadPoolExecutor来显示和创建线程池。10.使注解正确、清晰、简洁?1.类、属性、方法的注释必须使用Javadoc规范,使用/*xxx/格式?2.所有抽象方法(包括接口方法)都需要返回值、参数,和异常需要指出方法是干什么的,实现了什么功能?3.所有类必须加上创建者和创建日期?4.方法中的注释必须在注释语句之上,不能跟在注释语句之后?5.所有枚举引用类型必须有注释解释每个数据项的用途