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中生成的,在这个范围内比较用==没问题,但是当超过这个范围的话,就是在比较内存地址了,这个时候就不一定相等了。

 

 

 

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

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

(0)
上一篇 2021年8月2日 下午10:00
下一篇 2021年8月3日 上午8:00


相关推荐

  • Intellij IDEA 查找接口实现类的快捷键「建议收藏」

    Intellij IDEA 查找接口实现类的快捷键「建议收藏」查找接口的实现类:IDEA风格ctrl+alt+B在按F2查看详细文档注解查看类或接口的继承关系:ctrl+h1、IDEA_查找接口的实现的快捷键 个人分类管理http://blog.csdn.net/u010003835/article/details/790366662、intellijidea8.1.2中找到实现一个类或者接口子类的快捷键 https://zhidao.ba…

    2022年8月15日
    18
  • Python pytest测试框架详解

    Python pytest测试框架详解pytest介绍:pytest是一个非常成熟的全功能的Python测试框架:1.简单灵活,容易上手2.支持参数化3.测试用例的skip和xfail,自动失败重试等处理4.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+request)5.pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-allure(完美html测试报告生成)、pytest-xdist(多CPU分发)等6.可以很好的和

    2025年5月22日
    3
  • 面试又给我问到MySQL索引【索引的实现原理】

    面试又给我问到MySQL索引【索引的实现原理】

    2022年2月15日
    54
  • 清除微信浏览器缓存

    清除微信浏览器缓存在做微信移动页面开发时 若需要清除缓存 对于 Android 和 iOS 平台的清除方法如下 iOSiOS 的微信浏览器中自带刷新按钮 点击微信右上角的菜单 刷新 即可刷新页面实现清除缓存 Android 不得不说 Android 平台比较坑 没有刷新按钮 关掉应用再开启也

    2026年3月26日
    2
  • JS与或运算「建议收藏」

    JS与或运算「建议收藏」说来惭愧,JS基本的与或运算都没掌握完全,下面说一下与或运算的结果1.与运算(&&)与运算有可能返回五种结果,true、false、null、NaN、undefined运算规则如下1.与运算所有项为true情况下,返回最后一个值,注意是值,并不是trueleta=11;letb=’www’;letc=false;letd=true…

    2022年8月31日
    4
  • centos7安装php环境_docker搭建php开发环境

    centos7安装php环境_docker搭建php开发环境centos7php环境手动搭建:1.先安装apache:yum安装yuminstallhttpd进入配置文件vi/etc/httpd/conf/httpd.conf(/etc/httpd/conf/httpd.conf为配置文件位置)apache默认就是使用80端口防火墙开启80端口(一般例如在阿里云网站控制台直接开启即可)服务器常用指令:linux常用服务的启动、停止、重启操作服务/操作 启动 停止 重启apache systemctlstarthttpd开启

    2026年2月16日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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