阿里巴巴Java开发手册:编程规约.OOP

阿里巴巴Java开发手册编程规约 Java 编码规范 阅读详情

2.【强制】所有的覆写方法,必须加@Override注解。

说明:getObject()与get0bject()的问题。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功,避免外形太像导致覆写失败。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。

重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写。返回值类型、方法名、参数列表必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类,即要满足里氏替换原则。

如果父类方法访问修饰符为 private/final/static 则子类就不能重写该方法,但是被static修饰的方法能够被再次声明。

构造方法无法被重写。

3.【强制】相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。

正例:

public List<User> listUsers(String type, Long... ids) {...}

说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程)

java 可变参数是1.5版本的新特性,也就是说用户若是想定义一个方法,但是在此之前并不知道以后要用的时候想传几个参数进去,可以在方法的参数列表中写参数类型或者数组名,然后在方法内部直接用操作数组的方式操作。适用于参数个数不确定,类型确定的情况。

可参考文章:https://blog.youkuaiyun.com/w605283073/article/details/91902705

4.【强制】外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated注解,并清晰地说明采用的新接口或者新服务是什么。

说明:方法签名是方法名+参数类型,比如以下这个方法

public double calculateAnswer(double wingSpan, int numberOfEngines,
                              double length, double grossTons) {
    //do the calculation here
}

方法签名就是calculateAnswer(double, int, double, double),如果修改了,调用方处的代码必然会报错。

@Deprecated注解,若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说不推荐使用,因为还有更好的方法可以调用。不将原来的方法直接删除是因为可能在很多地方需要调用他,删除带来的工作量太大,只能使用该注解说明过时,让之后的开发者使用新的方法。

6.【强制】Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。

正例:“test”.equals(object);
反例:object.equals(“test”);
说明:推荐使用java.util.Objects#equals(JDK7引入的工具类)
方法内部是这样

// 1. Objects.equals(Object a, Object b)
public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

// 2. Object.equals(Object obj)
public boolean equals(Object obj) {
  return (this == obj);
}

首先是对象的引用判断,其次就是调用对象自身的equals方法来比较,如果对象类型没有重写equals的话,就会调用Object的equals方法(仍然是对象的引用比较),并且还考虑了null的问题。

该工具类中还有hashCode()和toString()方法,也很简单易用

8.关于基本数据类型与包装数据类型的使用标准如下:

1) 【强制】所有的POJO类属性必须使用包装数据类型。

2) 【强制】RPC方法的返回值和参数必须使用包装数据类型。

3) 【推荐】所有的局部变量使用基本数据类型。

正例:数据库的查询结果可能是null,因为自动拆箱,用基本数据类型接收有NPE风险。

反例:比如显示成交总额涨跌情况,即正负x%,x为基本数据类型,调用的RPC服务,调用不成功时,返回的是默认值,页面显示为0%,这是不合理的,应该显示成中划线。所以包装数据类型的null值,能够表示额外的信息,如:远程调用失败,异常退出。

说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE(NullPointException)问题,或者入库检查,都由使用者来保证。这点我们需要自己注意,在平常的开发中很少使用包装数据类型,大部分是基本数据类型,需要改正。

10.【强制】序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改serialVersionUID值。

说明:注意serialVersionUID不一致会抛出序列化运行时异常。

serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException。

serialVersionUID有两种显示的生成方式:

一是默认的1L,比如:

private static final long serialVersionUID = 1L; 

二是根据包名,类名,继承关系,非私有的方法和属性,以及参数,返回值等诸多因子计算得出的一个64位的哈希字段。基本上计算出来的这个值是唯一的。比如:

private static final long  serialVersionUID = xxxxL; 

这种情况下,如果Class文件(类名,方法名等)没有发生变化(增加空格,换行,增加注释等等),就算再编译多次,serialVersionUID也不会变化的,此种方式是不兼容的。

18.【推荐】循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展。

反例:

String str = "start";
for (int i = 0; i < 100; i++) {
    str = str + "hello";
}

说明:上例中,反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,造成内存资源浪费。

String是不可变的,因为使用final关键字修饰字符数组来保存字符串,StringBuilder与StringBuffer 都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串char[]value,但是没有用final关键字修饰,所以这两种对象都是可变的。jvm会将string的连接优化成stringbuilder的append,但是会消耗资源,在循环中每次都产生一个stringbuilder。

可见:
https://www.cnblogs.com/rjhlovelife/archive/2018/06/09/9159953.html

20.【推荐】慎用Object的clone方法来拷贝对象。 说明:对象的clone方法默认是浅拷贝,若想实现深拷贝需要重写clone方法实现域对象的深度遍历式拷贝。

说明:针对引用类型,浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存,修改新对象会导致原对象也改变。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
深拷贝可以通过序列化和递归重写clone方法实现。

阿里巴巴Java开发编程规约(整理详细版) 对软件来说,适当的 规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一 方式一起做事,提升协作效率,降低沟通成本。代码的字里行间流淌的是软件系统的血液,代码质 量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。 阅读详情

相关推荐

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 443

Java基础汇总(十九)——Java集合细节

JAVA基础汇总 sublist aslist compare equals

weixin_45864705的博客 1090

避坑指南:Spring3集成OpenAPI时泛型响应失效的3种解决方案

本文深入探讨了Spring3集成OpenAPI时泛型响应失效的问题,提供了三种实用解决方案:移除@Schema注解、使用@ArraySchema包装泛型以及自定义Schema处理器。针对不同项目规模,详细分析了各方案的适用场景、优缺点及性能影响,帮助开发者高效生成准确的接口文档,提升前后端协作效率。

weixin_30839881的博客 100

【强制】所有的覆写方法,必须加@Override 注解

阿里的Java开发手册中将加@Override 注解规定为强制,其相应说明如下:getObject()与 get0bject()的问题。一个是字母的 O,一个是数字的 0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错 子类与父类有符合覆写规定的方法时,不加@Override 注解,也是能够覆写的,但是在实际使用时可...

日常打卡每日一Bug的博客 7142

DeepBSA实战指南:从安装到基因组分析的全流程解析

本文详细解析了DeepBSA工具从安装到基因组分析的全流程,特别介绍了其简化生物信息学分析的'一键式'操作和独家深度学习算法。通过实战案例展示了DeepBSA在信噪比处理和QTL定位上的优势,并提供了Linux和Windows系统的安装避坑指南、数据预处理技巧以及算法选择建议,帮助用户高效完成基因组分析。

weixin_28732953的博客 436

Sentinel2 哨兵2数据下载方法(USGS)-史上最全讲解

本文讲述了从USGS官网下载Sentinel2的方法。主要包括USGS官网的注册和下载流程,以及选定研究区中所出现的问题、解决办法。

xiatiandexia123的博客 6万+

java 数组get(0)_java.lang.reflect.Array.get()方法

java.lang.reflect.Array.get(Object array,int index)方法返回指定数组对象中的索引组件的值。 如果该对象具有原始类型,则该值将自动包装在对象中。声明以下是java.lang.reflect.Array.get(Object array,int index)方法的声明。public static Object get(Object array, int...

weixin_42129113的博客 2147

实战演练 | ABAQUS显式动力学分析在金属切削仿真中的应用

本文详细介绍了如何利用ABAQUS显式动力学分析进行金属切削过程的二维仿真。通过从零开始的完整流程,包括几何建模、材料本构与失效定义、网格划分、接触设置、边界条件施加,到结果后处理与切削力提取,为工程师和研究人员提供了实用的仿真方法,以优化刀具设计和加工工艺。

purple的博客 928

java中.get(0)_Java中list.get(index)报错

1、list.get(index)中的index为负值异常严重:Exception occurred during processing request:-1java.lang.ArrayIndexOutOfBoundsException:-1原因:if(null != list.get(list.size()-1) && null != list.get(list.size()-...

weixin_36440677的博客 6083

Altium Designer(AD)仿真实验操作指南

1:运行仿真2:设置仿真3:放置电源模块4:放置器件模块5:探针。

XU157303764的博客 8888

华为OD机试 - 末世分配资源包 - 二分查找 + 贪心(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。末世时代,政府为各地方配资源,现有资源分配表 nums[n],要求按如下规则分配给 k 个营地:在最优平均分配情况下,得到最大团队所获得的资源数4,3,6,9,7 216最佳划分之一:[4,3,6] -> 13 [9,7] -> 16最大

学Java,找哪吒 223

list.get(i)用法和list.get(0)用法

List list = new ArrayList(); for(int i = 0;i<list.size();i++){ People people = list.get(i); } //当i=0时,取得是list集合中第一个元素, //当i=1时,取得是list集合中第二个元素, … //当i=i时,取得是list集合中第i+1个元素。 ...

Java&Develop的博客 3757

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

Java开发规范详解:从命名风格到工程实践

代码规范是软件开发中的基础设施,如同交通规则保障城市运行。在Java领域,良好的编码规范能显著提升代码可读性、维护性和团队协作效率。从基础命名规范(如UpperCamelCase类名)、代码格式(4空格缩进)到OOP原则(优先组合而非继承),规范贯穿开发全生命周期。异常日志处理需要遵循特定模式(如避免空catch块),而工程结构规范(如Maven标准目录)则影响项目可维护性。阿里巴巴Java开发手册将这些实践系统化,分为强制、推荐、参考三个级别。通过静态代码分析工具(如SonarQube)和持续集成,规范可

weixin_34128237的博客 353

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Java】阿里巴巴Java开发手册

提示:仅供学习参考使用阿里巴巴Java开发手册,在Java开发中尽可能的遵循开发规则,会对编码有很大的帮助哦~本文章内容为阿里巴巴集团技术部的技术分享,版权归阿里巴巴集团所有,仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!

qq_42666609的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

阿里巴巴Java开发手册(一)——编程规约

阿里巴巴Java开发手册(一)——编程规约编程规约命名规约常量定义格式规约OOP规约集合处理并发处理控制语句注释规约其他 编程规约 命名规约 1、【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例: _name / __name / $Object / name_ / name$ / Object$ 2、【强制】代码中的命名严禁使用拼音与英文混...

分享技术,传播知识! 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

阿里巴巴Java开发手册(详尽版)-个人未注意到的知识点

阿里巴巴Java开发手册(详尽版)-个人未注意到的知识点 阿里巴巴Java开发手册(详尽版)1 一、编程规约 (一) 命名风格 【强制】代码中的命名只可用英文方式 【强制】类名使用UpperCamelCase风格,但以下例外: 分层领域模型规约2: DO( Data Object):数据对象,与数据库表结构一一对应,通过DAO层向上传输数据源对象。 DTO( DataTransfer Obje...

复利人生的博客 1万+

阿里巴巴Java开发手册(纪念版 1.3.1)记录

文章目录阿里巴巴Java开发手册(纪念版 1.3.1)一、OOP规约二、命名风格三、常量定义四、集合处理五、控制语句六、注释规约七、日志规约八、其它 阿里巴巴Java开发手册(纪念版 1.3.1) 一、OOP规约 1.【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 2.【强制】不能使用过时的类或方法。 ​ 说明: java.net.URLDecoder中的方法 decode(String encodeStr) 这个方法已经过时,应该使用双

Java小皮孩 1872

阿里巴巴Java开发手册(最新最全)

阿里巴巴Java开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断的完善,系统化地整理成册,回馈给广大开发者。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞代码易被黑客攻击等等。

AffectionGF的博客 4917

瑞_Java开发手册_(一)编程规约

本文章为瑞_系列专栏之《Java开发手册》的编程规约篇,本篇章主要介绍命名风格、常量定义、代码格式、OOP规约、日期时间、集合处理、并发处理、控制语句、注释规约以及其它常见的编程规约,主要参考阿里巴巴的《Java开发手册》,分享博主的经验和见解

阿瑞——从事Java后端,喜欢研读源码、自研框架、分享经验 4227

阿里巴巴 Java 开发手册

【强制】不允许任何魔法值(即未经定义的常量)直接出现在代码中。【强制】long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。写的是数字的 21,还是 Long 型的 2?【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如:缓存相关的常量放在类:CacheConsts 下;系统配置相关的常量放在类:ConfigConsts 下。大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解和维护。

qq_43342391的博客 1887

阿里开发手册 嵩山版-编程规约 (四)OOP规约-Java程序员必看知识点!!!

《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册,当前的版本是嵩山版。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:五花八门的错误码人为地增加排查问题的难度;数据库的表结构和索引设计缺陷带来的系统架构缺陷或性能风险;工程结构混乱导致后续项目维护艰难;没有鉴权的漏洞代码易被黑客攻击等等。所以

我亦无他,唯手熟尔 1340

阿里巴巴Java开发手册(终极版)

前言 《阿里巴巴Java开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断的完善,系统化地整理成册,反馈给广大开发者。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞...

m0_38045882的博客 3399

自学 阿里巴巴Java开发手册最新版(嵩山版)

一、编程规约 (一) 命名风格 (二) 常量定义 (三) 代码格式 (四) OOP 规约 (五) 日期时间 (六) 集合处理 (七) 并发处理 (八) 控制语句 (九) 注释规约 (十) 前后端规范 二、异常日志 (一) 错误码 (二) 异常处理 (三) 日志规约 三、单元测试 四、安全规约 五、MySQL 数据库 (一) 建表规约 (二) 索引规约 (三) SQL 语句 (四) ORM 映射 六、工程结构 (一) 应用分层 (二) 二方库依赖 (三) 服务器 七、设计规约

这里有一只小马吖 6333

学习《阿里巴巴JAVA开发手册》之(一)编程规约

最近读了《阿里巴巴JAVA开发手册》,对java开发规范有了进一步的认识。选取了部分个人认为非常重要且易被忽略的规约共享~

good good study, day day up ~ 1007
上一篇: 阿里巴巴Java开发手册:编程规约.命名风格
下一篇: 阿里巴巴Java开发手册:编程规约.集合处理
不晓得X
博客等级 码龄10年 114粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值