前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java开发规范(个人理解)

java开发规范(个人理解)

作者头像
全栈程序员站长
发布2022-07-04 14:36:05
5040
发布2022-07-04 14:36:05
举报
文章被收录于专栏:全栈程序员必看

今天看到一句话,非常有感触,大概的意思就是:代码不仅仅是给机器运行的,同样是给工程师去阅读的,请对每一行代码负责。后来想想自己写代码是否对每一行代码都负责,并且相当当接手别人的可读性非常差的代码心里的感受,所以决定写一篇博客来总结自己在java开发中学习到的规范以及技巧,该博客长期更新。

一,命名的风格

1,类名使用驼峰的形式命名,且第一个字母大写,如:UserServie,UserDao,类的命名同时也要使人便于理解,如使用了设计模式,应当在名字中体现,如:BeanFactory

2,方法名必须也是驼峰的形式,但是第一个字母小写 ,如:deletePersonById()

3,代码中的常量(1、0)等考虑是否定义final类型的常量定义方便理解,如使用常量定义,则必须全部大写、且用下划线连接,如:UPLOAD_SUCCESS_STATE = 0,UPLOAD_FAIL_STATE = -1;

二、技巧

1,使用equals方法时,可以使用确定的值调用equals,可以防止空指针异常。例如:“test”.equals(obj)来代替obj.equals(“test”)

2,if嵌套的层数应当尽量减少,在方法中,可以思考如下的方式

public void test(){

if(false) return;

if(false) return;

}

代替如下的写法,减少嵌套层数

public void test(){

if(true){

if(true){

if(true){

}

}

}

}

3,循环内,如果有字符串连接,应当使用StringBuilder和StringBuffer代替str+=“test”防止内存的浪费。

4,能够使用局部变量的应当使用布局变量,而不是使用大量的全部变量

5,只要重写equals方法,必须重写hasecode,因为HashSet集合中判断不重复,是根据hashCode和equals判断的,所以set存储的对象必须同时重写hashCode和equals两个方法。HashMp的键值也是同样的。

6,不能在foreach循环中对元素进行add和remove操作,应当使用Iterator,否则会抛异常ConcurrentModificationException,这个我以前在前面的博客(https://blog.csdn.net/hongtaolong/article/details/83216973)中详细解释过,如果是多线程,需要对Iterator进行加锁

7,集合初始化中,因尽量初始化集合的大小,比如;Map map = new HashMap(10);可以一定程度提高性能,因为随着元素的增加,容器被迫扩大,导致重新新建hash表,影响性能。

8,使用entrySet编辑Map集合key和value,而不是使用keySet或者valueSet,因为keySet其实遍历了两次,第一次是转为Iterator对象,第二次是从hashmap中取出key对应的value。但是entrySet一次就能将key和value都放到entry中。

9,如果if(。。。)中的条件判断比较复杂,尽量将它里面的内容提取出来一个boolean类型的变量,提高程序的可读性。如if((a==b&& !list.isEmpty())|| c.isExist()) 可以变成如下方式boolean isExist = (a==b&& !list.isEmpty())|| c.isExist();

10,当打印日志时需要获取时间差等,获取时间的毫秒数可以使用System.currentTimeMillis()代替new Date().getTime();

11,当返回值为int类型的方法时,切勿在方法中返回Integer,因为这样当返回为null是,自动拆箱时会报NPE,这个问题我在写mybatis的mapper接口中的返回值遇到过。

12,这一条接上面一条,pojo的基本类型属性必须使用其包装类,比如id为int类型,应当定义为Integer id和不是int id 为什么会这样,请看11条,因为数据库操作可能返回null,拆箱是报NPE。

13,在使用long类型的变量时初始化时应当使用L而不是l,因为l和1容易混淆,导致程序出现问题,而且不容易找出。

14,能使用类名直接调用静态方法,如果使用对象的话,会存在一些解析的成本,当出现大量的这种情况时,也是一笔不小的开销。

15,相同的基本类型的包装类,尽量使用equals比较而不是使用==,这个地方很容易埋下大坑,比如Integer a 和Integer b比较时,如果Integer的值在-128—127之间是从IntegerCache.cache中生成的,在这个范围内比较用==没问题,但是当超过这个范围的话,就是在比较内存地址了,这个时候就不一定相等了。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111236.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年8月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档