java开发规范(个人理解)

java开发规范(个人理解)

今天看到一句话,非常有感触,大概的意思就是:代码不仅仅是给机器运行的,同样是给工程师去阅读的,请对每一行代码负责。后来想想自己写代码是否对每一行代码都负责,并且相当当接手别人的可读性非常差的代码心里的感受,所以决定写一篇博客来总结自己在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中生成的,在这个范围内比较用==没问题,但是当超过这个范围的话,就是在比较内存地址了,这个时候就不一定相等了。

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • clion永久激活码(在线激活)

    clion永久激活码(在线激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 关于华为任正非裁员事件

    关于华为任正非裁员事件最近,关于“华为大力清洗34岁+的老员工”的新闻一直在发酵。消息是从华为的心声论坛传出,具体内容是华为职工反映,中国区开始集中清理34岁以上的的交付工程维护人员。而研发开始集中清退40岁以上的老员工,主要针对程序员。一时间,“华为无情”批评四起。  无风不起浪  华为公关对消息予以否定。但这件事明显已经掀起了不小的波澜。  创始人任正非近期在一份讲话中侧面回应了

  • cmos出现问题_sensor和cmos

    cmos出现问题_sensor和cmos在某些场景下,使用者可以看到相机画面出现一条一条的滚动暗条纹,如下图片所示,这样的现象,通常是CMOSsensor曝光时间方面的因素引起的。

    2022年10月13日
  • ie8是什么时候出的_ie8.0是什么意思

    ie8是什么时候出的_ie8.0是什么意思IE8beta2来了,这次的beta2比起beta1有了长足的进步。功能已经不比firefox差,还有不少胜出的地方。在这两个地方有一些评测,从中可以看出其特色:http://bbs.maxthon.cn/viewthread.php?tid=102092http://publish.it168.com/2008/0828/20080828031601.shtml号称完全支持…

    2022年10月30日
  • 最小二乘法正规方程推导过程

    最小二乘法正规方程推导过程最小二乘法正规方程推导过程线性回归岭回归:添加L2L_2L2​正则项输入样本X∈Rm×n\textbf{X}\in\mathbb{R}^{m\timesn}X∈Rm×n,输出y∈Rm×1\textbf{y}\in\mathbb{R}^{m\times1}y∈Rm×1,需要学习的参数w∈Rn×1\textbf{w}\in\mathbb{R}^{n\times1}w∈Rn×1。其中,mmm为样本个数,nnn为单个样本维度。线性回归最小化目标函数J(w)=12∥y−Xw∥22J(\

  • (二)【Matlab】Matlab矩阵处理

    (二)【Matlab】Matlab矩阵处理【Matlab】

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号