本页目录

个人经验

Controller层:全部使用包装类型!

Service层:全部使用包装类型!

Mapper层:返回值必须使用包装类型!

Pojo层:字段必须使用包装类型!

为什么使用包装类型,因为用户传参,可能会为null,数据库select的结果可能是null,即便数据库select的结果不是null,Pojo实际接收的字段,你无法保证是否为null!

如果需要参数校验,String类型必须使用StringUtils.isNotBlank(XXXX) 处理!

命名规范

  • 包名:

    • 全部小写
  • 类名、接口名:
    • 大驼峰AaaAaa
  • 方法名、局部变量:
    • 小驼峰 aaaAAA
  • 成员变量:
    • 小驼峰 aaaAAA
  • 枚举
    • 全部大写

其他场景

Abc的测试类命名为:AbcTest

包名在有且仅有一个正常语义单词的情况下,包名单数,类名复数含义可以使用复数

com.zanglikun.testDemo.util
其包下的类名建议用复数
StringUtils

不推荐使用尚未明确定义的值

String magicValue = "pilipala_" + account;不推荐的理由:比如账号是789pilipala_789 容易被写成pilipala789

long类型不允许使用小写l 必须使用大写L

Long timeStamp = 1L;反例:Long timeStamp = 1l; 这样定义容易被别人理解成11

注释规范

注释类型

  • 单行注释 // 必须用于方法体上一行
  • 多行注释 /* */ 常用于类名、方法名、类属性、接口 必须使用Javadoc规范,除了基本介绍参数、返回值信息,最好声明:方法是干什么的
  • @see 用法
  • todo 用法
/**
* @see  #b()
* 请参考其他方法b Ctrl+ 鼠标左键点击即可
*/public void a(){}public void b(){// todo 这里需要做XXX逻辑}

单行注释:注释符与注释正文之间:有且只能有一个空格!

// 我是注释
反例://我是注释

接口、抽象类必须使用Javadoc文档规范,不得使用//

数组命名

推荐:int[] userList;
而不是 int userList[];

强转类型:右括号强制与转换至中间无空格

int account = 1234;
String magicValue = (String)abc;

IDEA设置:

  • text file encoding 设置成UTF-8
  • 文件换行符:设定为Unix,不要使用Windows

POJO类不要加is前缀:这里有些框架会引起序列化错误

// 定义一个变量,命名为:isDeletedprivate boolean isDeleted;// 然后 Alt + Insert 然后getter/setter一下public boolean isDeleted(){return isDeleted;}public void setDeleted(boolean deleted){this.isDeleted = deleted;}=================================================================// 再次定义一个变量,命名为:Deletedprivate boolean Deleted;// 然后 Alt + Insert 然后get set一下public boolean isDeleted(){return isDeleted;}public void setDeleted(boolean deleted){this.isDeleted = deleted;}对比发现,isXXX与XXX在定义成基本类型的时候,默认的属性名是:Deleted。
如果是包装类型 Boolean 则是正常getIsDeleted,与getDeleted

如果数据库表中有is_XXX,建议在mybatis <resultmap> 标签中进行配置。

OOP规约

避免通过类的对象去访问类的静态变量或者静态方法,直接使用类名. 即可

对象在堆中,类信息在方法区。
如果通过对象去访问静态变量:就需要获取对象的方法区,找到类信息,再去找到静态变量的值。
类名. 本身就在方法区,减少编译器的解析成本!

方法重写务必追加@Override,用于检测方法重写:不然无法准确是否是方法重写

方法参数尽量避免使用Object,作为参数类型:可以减少出现类型转换异常,

不建议开发者使用可变参数…编程

@Deprecated 过时 过期方法需要加入此注解

方法过期了,不推荐使用了,请使用@Deprecated注解,并详细建议的使用新方法XXX

同理,不建议使用过期的方法

equals:避免引用类型调用equals,避免出现 空指针异常

String iPhone = null;"abc".equals(iPhone); // 不会有问题iPhone.equals("abc"); // 会有空指针异常风险引入面试题
Integer a = 1;
Integer b = 1;
(a==b) // trueInteger a = 128;
Integer b = 128;
(a==b) // false
Idea Ctrl + 鼠标左键,Ctrl + F 搜索cache 找到
-128到127的单位内,使用的Integer是缓存的数据,此范围之外,才是new一个对象

货币类型:务必以最小的单位整形命名。 23章节

浮点型的等值比较:基本数据类型不能使用 == 包装数据类型不能使用equals()来判断,如下一条有说明

BigDecimal 等值强制使用compareTo()方法,而不是equals()方法,equals 方法会比较精度 ((1.0).equals(1.00) 就会报错

禁止使用构造方法 BigDecimal(duble)的方式将double转为BigDecimal对象,会有精度损失,而建议使用

BigDecimal g = new BigDecimal(string);
如:BigDecimal g = new BigDecimal("0.1");
因为BigDecimal的valueOf()是执行了Double的toString方法,所以valueOf也是能用的
BigDecimal g = BigDecimal.valueOf(0.1d);

定义数据类型DO 也就是与数据库对应的类型,属性类型,与字段类型要匹配

如果数据库字段money是bigint类型,创建Java类型字段不能使用
Integer money; // Integer范围大约是正负21亿,随着业务增长,java的Integer类型无法满足范围了
Long money; // 范围则会更一些。

所有POJO的数据类型务必使用包装类型,且使用时,务必保证NPE 也就是空指针异常的处理

所有的PRC方法的返回值必须使用包装类型

定义DO/DTO/VO/POJO不能设置默认值

比如日期字段:数据库查出来时空,你初始化了默认值,容易起业务争议

序列化类新增属性的时候,不要修改seriaVersionUID字段,避免反序列化失败。

构造方法,禁止写业务逻辑,如果有初始化逻辑,请自定义init()方法中

日期的正常格式 yyyy-MM-dd HH:mm:ss

M是月份
m是分钟
H是24小时进制
h是12小时进制

获取毫秒,务必使用System.currentTimeMillis(),而不是new Date.time()。创建对象,总归要慢一些。

程序不仅要写死一年时365天,避免公历闰年时出现日期转换错误

正确请使用:
// 获取今年的天数
int dayOfThisYear = LocalDate.now().lengthOfYear();// 获取某年的天数
LocalDate.of(2011,1,1).lengthOfYear();

集合

https://www.zanglikun.com/2301.html#face

判断集合是否时空,使用isEmpty(),而不是获取size再去判断==0的情况;

List集合转Map的方式,必须使用 下面方法,尚未补全P39

List

已跳过集合知识

线程

线程资源必须通过线程池提供,不允许应用自行显示创建线程。原因:创建大量线程导致OOM或内存切换导致性能下降。

创建线程,必须使用new ThreadPoolExecutor(…) 可以快速了解线程池的配置信息,需要复习本站的线程池知识

高并发时,能锁方法块,就不要锁完整方法体

加锁,加在try之外,释放锁必须在finally里面

控制语句

switch 务必追加 defult!

高并发情况下:使用 == 容易造成等于击穿的情况:比如奖品数量==0,然后返回。一旦==的判断值为复数,则后续的值,就跳过了奖品数量为0的判断了,建议使用>=0 或者<=0

前后端规范

后端接口必须使用Https

后端返回信息必须包含:1:Http状态码、2:错误码、3:错误信息、4:用户提示信息

后端返回给前端数字类型一律:String类型

Http请求:需要限制请求体Body大小。

前后端分页:要动态处理:规范分页参数有效

错误码

错误码:A0001与错误日志需要清晰明了

正确错误码:00000,必须传递

错误码由字母 + 4位编号组成。A代表用户错误、B服务端错误,C代表第三方错误。

错误码与错误信息不得反馈给用户!

异常日志

异常能提前避免,就提前避免:比如随便加些判断,避免空指针等情况

异常是为了处理,不是为了抛出去,必须有方法兜底去处理,不得被用户看到

事务控制中,如果自行catch了异常,请手动回滚事务

try 里面的return不会立即返回,必须finally走完,如果finally有return,则会抛弃try里面的

在调用RPC相关方法时,catch必须使用Throwable类来拦截

日志规约

使用日志框架,不要直接使用日志系统。推荐使用slf4j日志框架

日志文件建议保存15天。如:周一报错,其他时间不报错,就需要以周进行拦截与查看了。

对于网络运行状态、网络安全事件、个人敏感操作不少于6个月。国家规定

强烈推荐{} 占位符,因为字符串拼接使用append有性能损耗,占位符只是替换,性能更优

避免日志重复打印,务必在日志配置文件中设置additivity=false

生产环境禁止使用System.out或者 System.err 输出日志。

日志输出参数的时候,禁止使用JSON工具,因为JSON工具获取对象属性是get,如果get报错,那就麻烦了。推荐对象toString()

安全规约

用户敏感数据,必须要脱敏

防止SQL注入

防止XSS注入

用户传入任何参数都需要校验!

JAVA CSRF安全验证

对短信、右键等进行数量、疲劳、验证码校验。避免资源被滥刷

MySQL数据库

是否概念必须使用is_xxx命名unsigned tinyint 1表示是,0表示否。unsigned表示非负数

POJO类中任何与布尔类型的变量不得使用is前缀,使用mybatis中resultmap标签进行映射

主键命名pk_字段名,唯一索引名 uk_字段名,普通索引名idx_字段名

表必备按字段id,create_time,update_time

唯一索引是一定的约束

超过三张表禁止join,需要join字段数据类型绝对保持一直(避免索引失效),关联字段必须有索引

varchar建立索引必须指定长度,但不建议全部程度。这里建议百度一下!

不得使用左模糊、全模糊,如果有业务使用,使用搜索引擎

count(*) 与 count(1) 区别是 *会扫描null,但是1则查询非空的数量

不得使用外键

禁止使用存储过程

数据修改,一定要查一下,看一下是否是自己的要修改的

多表查询,必须使用别名

ORM映射

不得使用 * 作为查询的字段列表,容易引起与resultmap不一致。同时也会造成不必要的网络资源浪费,比如用不到的text的内容等等

任何返回必须定义一个ResultMap,不得直接返回Class

更新表记录时,必须更新对应的update_tiem字段为敌当前时间

不得使用HashMap或HashTable作为结果集返回。容易出现字段类型范围不匹配的问题

特殊说明: 以上文章,均是我实际操作,写出来的笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!
收_心

永久会员

打赏 收藏 海报 链接

Java 阿里命名以及注释规范相关推荐

  1. Java开发项目的命名规范+命名方法+注释规范

    一.命名规范 变量Variable 变量名通常以小写字母 a-z 开头.如果变量名由多个单词构成,从第二个单词开始首字母需要大写 A-Z (小驼峰命名法).变量名中不建议使用下划线 _ 作为前缀或者单 ...

  2. java javadoc要求_javadoc注释规范

    java中的注释,大家应该已经很熟悉了. 文档注释可以用于对类.属性.方法等进行说明.写文档注释时除了需要使用 /** .... */ 限定之外,还需要注意注释内部的一些细节问题. 1文档和文档注释的 ...

  3. Java 语法规定之外的命名注释规范

    Java 语法规定之外的命名注释规范 命名规范 1. 项目名 2. 包名 3. 类名 4. 常量名 5. 变量名 6. 方法名 8. 其它命名技巧 9. 应当避免的行为 10. 经典的命名法 11. ...

  4. java里什么是注释,全面解析Java中的注解与注释

    注解 一.什么是 Annotation? (注解 or 注释) Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一 ...

  5. 关于java变量命名,介绍阿里JAVA命名规范及IDEA实时检测插件的使用以及CODELF取名神器

    JAVA开发中,我们经常会为如何来命名烦心. 有大神曾说计算机科学的两件难事:缓存失效和命名 的确,程序员最头疼的事:命名 但其实,有规范可以遵循.还有工具帮我们取名,更有插件帮我们实时检查是否违反规 ...

  6. 【Java】命名规范

    一.Java总体命名规范 类一般采用大驼峰命名,方法和局部变量使用小驼峰命名,而大写下划线命名通常是常量和枚举中使用. 创建一个项目之后,子类中的东西命名规范如下: 项目名全部小写,多个单词中间用-连 ...

  7. Java项目命名规范

    2019独角兽企业重金招聘Python工程师标准>>> 一.命名规范 1. 项目名全部小写 2. 包名全部小写 3. 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写 ...

  8. 一文带你了解Java的命名规范!

    在编程的世界里,每种语言都有自己的一些规范.下面,小千带你了解Java命名规范.对于程序员来说,如果想学好一门语言,如果想要自己写出来的代码能被他人轻易地读懂,深入的学习命名规范是非常必要的一件事情. ...

  9. java变量命名规则_浅谈JAVA开发规范与开发细节(上)

    开发团队在开发过程中,由于每个人的开发习惯,以及对于技术的理解深浅程度不一,往往一个项目在开发过程中,代码的质量,代码的风格都不尽相似,所以有一份适合团队的代码规范是非常有必要的,而一个团队的代码规范 ...

最新文章

  1. python3 语言翻译相关库
  2. 公共闪存接口CFI在Flash Memory程序设计中的应用
  3. 计算机视觉与深度学习 | 基于多源传感器数据融合的动态场景SLAM研究
  4. Ubuntu 20.04 LTS/RTX30XX显卡 快速配置深度学习环境(一行命令)
  5. hadoop的HA高可用配置(没有搞完)
  6. 深度学习 相机标定_基于深度学习的多传感器标定
  7. 在成长中遇到的挫折事件对你的影响_多种语言环境中成长的宝宝,会影响说话早晚?其实没有想象的复杂...
  8. BZOJ 1646: [Usaco2007 Open]Catch That Cow
  9. Windows XP减肥法
  10. Servlet 开发【07】Servlet两种跳转
  11. [bzoj3527][Zjoi2014]力
  12. 本地数据库_干货|本地数据库调用的实现案例
  13. WLAN射频、信道与帧分类
  14. php cookbook怎么样,《PHP Cookbook》学习笔记(三)
  15. 虚拟机安装MySQL教程
  16. Bluetooth LE for iOS demo. LightBlue like demo.
  17. java编译找不到符号_java编译时找不到符号,怎么处理
  18. SoftEther 介绍
  19. android 来电播放铃声,android 播放来电铃声
  20. 原来这才是睿至大数据的业务拼图

热门文章

  1. 搞定制作好看icon
  2. RN + Flutter
  3. 阿里云助力中小企业建站 在线免费自助建站成新用户首选
  4. krpano中视角js动态指向
  5. 后端好书阅读与推荐(续四)
  6. 苹果8的爆料这么多?为什么...
  7. 【科研】浅学Cross-attention?
  8. 上海有哪些牛逼的互联网公司?
  9. 10杯水只有一滴有毒,用四只老鼠测试,二进制的方法快速找出哪瓶有毒;
  10. 有什么好用的测量仪器尺子?手机也能其妙满足