当前位置: 首页 > news >正文

阿里Java开发手册~OOP 规约

1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成
本,直接用 类名 来访问即可。
2. 【强制】所有的覆写方法,必须加@ Override 注解。
说明: getObject() get 0 bject() 的问题。一个是字母的 O ,一个是数字的 0 ,加@ Override
可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编
译报错。
3. 【强制】相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object
说明: 可变参数必须放置在参数列表的最后。 提倡同学们尽量不用可变参数编程
正例: public User getUsers(String type, Integer... ids) {...}
4. 【强制】外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生
影响。接口过时必须加@ Deprecated 注解,并清晰地说明采用的新接口或者新服务是什么。
5. 【强制】不能使用过时的类或方法。
说明: java . net . URLDecoder 中的方法 decode(String encodeStr) 这个方法已经过时,应
该使用双参数 decode(String source, String encode) 。接口提供方既然明确是过时接口,
那么有义务同时提供新的接口 作为调用方来说,有义务去考证过时方法的新实现是什么。
6. 【强制】 Object equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用
equals
正例: " test " .equals(object);
反例: object.equals( " test " );
说明: 推荐使用 java . util . Objects # equals JDK 7 引入的工具类
7. 【强制】所有的相同类型的包装类对象之间 值的比较 ,全部使用 equals 方法比较。
说明: 对于 Integer var = ? -128 127 范围内的赋值, Integer 对象是在
IntegerCache . cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用 == 进行
判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,
推荐使用 equals 方法进行判断。
8. 关于基本数据类型与包装数据类型的使用标准如下:
1 【强制】所有的 POJO 类属性必须使用包装数据类型。
2 【强制】 RPC 方法的返回值和参数必须使用包装数据类型。
3 【推荐】所有的局部变量使用基本数据类型。
说明: POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何
NPE 问题,或者入库检查,都由使用者来保证。
正例: 数据库的查询结果可能是 null ,因为自动拆箱,用基本数据类型接收有 NPE 风险。
反例: 比如显示成交总额涨跌情况,即正负 x % x 为基本数据类型,调用的 RPC 服务,调用
不成功时,返回的是默认值,页面显示: 0% ,这是不合理的,应该显示成中划线 - 。所以包装
数据类型的 null 值,能够表示额外的信息,如:远程调用失败,异常退出。
9. 【强制】定义 DO / DTO / VO POJO 类时,不要设定任何属性 默认值
反例: POJO 类的 gmtCreate 默认值为 new Date(); 但是这个属性在数据提取时并没有置入具
体值,在更新其它字段时又附带更新了此字段,导致创建时间被修改成当前时间。
10. 【强制】序列化类新增属性时,请不要修改 serialVersionUID 字段,避免反序列失败
果完全不兼容升级,避免反序列化混乱,那么请修改 serialVersionUID 值。
说明: 注意 serialVersionUID 不一致会抛出序列化运行时异常。
11. 【强制】构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中。
12. 【强制】 POJO 类必须写 toString 方法。使用 IDE 的中工具: source > generate toString
时,如果继承了另一个 POJO 类,注意在前面加一下 super . toString
说明: 在方法执行抛出异常时,可以直接调用 POJO toString() 方法打印其属性值,便于排
查问题。
13. 【推荐】使用索引访问用 String split 方法得到的数组时,需做最后一个分隔符后有无
内容的检查,否则会有抛 IndexOutOfBoundsException 的风险。
说明:
String str = "a,b,c,,";
String[] ary = str.split(",");
// 预期大于 3 ,结果是 3
System.out.println(ary.length);
14. 【推荐】当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,
便于阅读。
15. 【推荐】 类内方法定义顺序依次是:公有方法或保护方法 > 私有方法 > getter / setter
方法。
说明: 公有方法是类的调用者和维护者最关心的方法,首屏展示最好 保护方法虽然只是子类
关心,也可能是 模板设计模式 下的核心方法 而私有方法外部一般不需要特别关心,是一个
黑盒实现 因为方法信息价值较低,所有 Service DAO getter / setter 方法放在类体最
后。
16. 【推荐】 setter 方法中,参数名称与类成员变量名称一致, this . 成员名 = 参数名。在
getter / setter 方法中,不要增加业务逻辑,增加排查问题的难度。
反例:
public Integer getData() {if (true) {return this.data + 100;} else {return this.data - 100;}
}
17. 【推荐】循环体内,字符串的连接方式,使用 StringBuilder append 方法进行扩展。
说明: 反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行
append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。
反例:
String str = "start";
for (int i = 0; i < 100; i++) {str = str + "hello";
}

18. 【推荐】final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字:

1 ) 不允许被继承的类,如: String 类。
2 ) 不允许修改引用的域对象,如: POJO 类的域变量。
3 ) 不允许被重写的方法,如: POJO 类的 setter 方法。
4 ) 不允许运行过程中重新赋值的局部变量。
5 ) 避免上下文重复使用一个变量,使用 final 描述可以强制重新定义一个变量,方便更好
地进行重构。
19. 【推荐】慎用 Object clone 方法来拷贝对象。
说明: 对象的 clone 方法默认是浅拷贝,若想实现深拷贝需要重写 clone 方法实现属性对象
的拷贝。
20. 【推荐】类成员与方法访问控制从严:
1 如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private
2 工具类不允许有 public default 构造方法。
3 类非 static 成员变量并且与子类共享,必须是 protected
4 类非 static 成员变量并且仅在本类使用,必须是 private
5 static 成员变量如果仅在本类使用,必须是 private
6 若是 static 成员变量,必须考虑是否为 final
7 类成员方法只供类内部调用,必须是 private
8 类成员方法只对继承类公开,那么限制为 protected
说明: 任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。
思考:如果是一个 private 的方法,想删除就删除,可是一个 public service 方法,或者
一个 public 的成员变量,删除一下,不得手心冒点汗吗?变量像自己的小孩,尽量在自己的
视线内,变量作用域太大,如果无限制的到处跑,那么你会担心的。

相关文章:

阿里Java开发手册~OOP 规约

1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法&#xff0c;无谓增加编译器解析成 本&#xff0c;直接用 类名 来访问即可。 2. 【强制】所有的覆写方法&#xff0c;必须加 Override 注解。 说明&#xff1a; getObject() 与 get 0 bject() 的问题。…...

【Mysql数据库面试01】内连接 左连接 右连接 全连接

【Mysql数据库】内连接 左连接 右连接 全连接 0.准备1.内连接1.1 SQL(不带where)1.2 SQL&#xff08;带where&#xff09;1.3总结 2.左连接2.1SQL&#xff08;不带where&#xff09;2.2SQL&#xff08;带where&#xff09;2.3总结 3.右连接3.1 SQL&#xff08;不带where&#x…...

事务隔离:为什么你改了我还看不见

前提概要 你肯定不陌生&#xff0c;和数据库打交道的时候&#xff0c;我们总是会用到事务。最经典的例子就 是转账&#xff0c;你要给朋友小王转 100 块钱&#xff0c;而此时你的银行卡只有 100 块钱。 转账过程具体到程序里会有一系列的操作&#xff0c;比如查询余额、做加减法…...

吴恩达ChatGPT《LangChain Chat with Your Data》笔记

文章目录 1. Introduction2. Document Loading2.1 Retrieval Augmented Generation&#xff08;RAG&#xff09;2.2 Load PDFs2.3 Load YouTube2.4 Load URLs2.5 Load Notion 3. Document Splitting3.1 Splitter Flow3.2 Character Splitter3.3 Token Splitter3.4 Markdown Spl…...

https和http有什么区别

https和http有什么区别 简要 区别如下&#xff1a; ​ https的端口是443.而http的端口是80&#xff0c;且二者连接方式不同&#xff1b;http传输时明文&#xff0c;而https是用ssl进行加密的&#xff0c;https的安全性更高&#xff1b;https是需要申请证书的&#xff0c;而h…...

振弦采集仪及在线监测系统完整链条的岩土工程隧道安全监测

振弦采集仪及在线监测系统完整链条的岩土工程隧道安全监测 近年来&#xff0c;随着城市化的不断推进和基础设施建设的不断发展&#xff0c;隧道建设也日益成为城市交通发展的必需品。然而&#xff0c;隧道建设中存在着一定的安全隐患&#xff0c;如地质灾害、地下水涌流等&…...

linux基础学习

1.day1 2.day2 1、VIM配置&#xff1b; 2、安装SSH&#xff0c;调用putty接入终端&#xff1b; 3、shell命令&#xff1b; *&#xff1a;匹配任意长度的字符 &#xff1f;&#xff1a;匹配一个长度的字符 [...]&#xff1a;匹配其中指定的一个字符 [-]&#xff1a;匹配指定…...

android 前端常用布局文件升级总结(二)

问题一&#xff1a; android:name“android.support.v4.content.FileProvider” 报红 问题解决方案&#xff1a; 把xml布局文件里面: android.support.v4.content.FileProvider 更换成 androidx.core.content.FileProvider 问题二&#xff1a; android.support.design.wid…...

Linux复习——基础知识

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 1. 有关早期linux系统中 sysvin的init的7个级别描述正确的是( )[选择1项] A. init 1 关机状态 B. init 2 字符界面多用户模式 …...

【数据结构】实验三:链表

实验三链表 一、实验目的与要求 1&#xff09;熟悉链表的类型定义&#xff1b; 2&#xff09;熟悉链表的基本操作&#xff1b; 3&#xff09;灵活应用链表解决具体应用问题。 二、实验内容 1&#xff09;请设计一个单链表的存储结构&#xff0c;并实现单链表中基本运算算…...

第4集丨webpack 江湖 —— loader的安装和使用

目录 一、loader简介1.1 使用 loader1.1.1 配置文件方式1.1.2 内联方式 1.2 loader 特性1.3 解析 loader1.4 命名规范 二、css loader的安装和使用2.1 安装2.2 配置2.3 测试 三、 less-loader 的安装和使用3.1 安装3.2 配置3.3 测试3.4 附件3.4.1 webpack.config.js3.4.2 index…...

【Lua学习笔记】Lua进阶——协程

文章目录 协程协程的定义和调度StatusRunning 协程 协程是一种并发操作&#xff0c;相比于线程&#xff0c;线程在执行时往往是并行的&#xff0c;并且线程在创建销毁执行时极其消耗资源&#xff0c;并且过长的执行时间会造成主进程阻塞。而协程可以以并发时轮值时间片来执行&…...

亚马逊云科技纽约峰会,充分释放数据价值和生成式AI的潜力

生成式AI将深刻改变每个公司的运营方式&#xff0c;标志着人工智能技术发展的新转折点。亚马逊云科技昨日在纽约峰会上宣布&#xff0c;推出七项生成式AI新功能&#xff0c;进一步降低了生成式AI的使用门槛&#xff0c;让无论是业务用户还是开发者都能从中受益。借助这些新功能…...

什么是 web3?

在百度搜索引擎输入 “Web3”、“大厂”。跳出来基本都是这样的标题. 以及如今的互联网行业 “哀鸿遍野”&#xff0c;不仅内卷&#xff0c;还裁员。然后掀起一阵风&#xff0c;猛吹 Web3 的好&#xff0c;数据回归用户……最后再 “威逼利诱” 一下&#xff0c;Web3 就是 20 年…...

[驱动开发]字符设备驱动应用——点灯

点亮开发板stm32mp157的三盏灯 //头文件 #ifndef __LED_H__ #define __LED_H__//封装GPIO寄存器 typedef struct { volatile unsigned int MODER; // 0x00volatile unsigned int OTYPER; // 0x04volatile unsign…...

前端学习——Vue (Day5)

自定义指令 <template><div><h1>自定义指令</h1><input v-focus ref"inp" type"text" /></div> </template><script> export default {// mounted(){// this.$ref.inp.focus()// }// 2. 局部注册指令di…...

Ceph版本

每个Ceph的版本都有一个英文的名称和一个数字形式的版本编号 第一个 Ceph 版本编号是 0.1&#xff0c;发布于2008 年 1月。之后是0.2,0.3....多年来&#xff0c;版本号方案一直没变。 2015年 4月0.94.1 (Hammer 的第一个修正版) 发布后&#xff0c;为了避免 0.99 (以及 0.100…...

cspm是什么?考了有用吗?

CSPM是项目管理专业人员能力评价等级证书&#xff0c;相当于 PMP 的本土化&#xff0c;CSPM 相关问题大家都很关心&#xff0c;今天就给大家全面解答一下 CSPM到底是何方神圣&#xff1f; 文章主要是解答下面几个常见问题&#xff0c;其他问题可以留言或者私信咨询我哦~ 一、什…...

Java阶段五Day14

Java阶段五Day14 文章目录 Java阶段五Day14分布式事务整合demo案例中架构&#xff0c;代码关系发送半消息本地事务完成检查补偿购物车消费 鲁班周边环境调整前端启动介绍启动前端 直接启动的项目gateway&#xff08;网关&#xff09;login&#xff08;登录注册&#xff09;atta…...

【计算机网络】应用层协议 -- 安全的HTTPS协议

文章目录 1. 认识HTTPS2. 使用HTTPS加密的必要性3. 常见的加密方式3.1 对称加密3.2 非对称加密3.3 非对称加密对称加密 4. 引入CA证书4.1 CA认证4.2 数据签名4.3 非对称机密对称加密证书认证4.4 常见问题 5. 总结 1. 认识HTTPS HTTPS全称为 Hyper Text Tranfer Protocol over …...

3D重建效率革命:从单张图片到高质量模型的全流程指南

3D重建效率革命&#xff1a;从单张图片到高质量模型的全流程指南 【免费下载链接】TripoSR 项目地址: https://gitcode.com/GitHub_Trending/tr/TripoSR 在数字内容创作领域&#xff0c;3D建模长期面临两大核心痛点&#xff1a;一方面&#xff0c;传统3D建模软件如Blen…...

【SLAM实战解析】卡方检验在ORB-SLAM2外点剔除中的关键作用

1. 卡方检验在SLAM中的核心价值 第一次在ORB-SLAM2的代码里看到卡方检验时&#xff0c;我盯着那行chi2测试代码愣了半天。这个在统计学课本里见过的概念&#xff0c;怎么突然出现在视觉SLAM系统中&#xff1f;后来才发现&#xff0c;这简直是SLAM开发者处理异常值的"瑞士军…...

记一次攻防演练复盘(蓝队)

事件&#xff1a;某省大数据局主导的一次攻防演练中午时段遭受大量攻击。 告警信息&#xff08;TOP 5&#xff09;&#xff1a;[疑似目录穿越攻击URI] [漏洞攻击: Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)] [web路径遍历漏洞攻击-Linux环境] [XSS跨站脚本攻击U…...

ZYNQ双核通信必看:共享内存的Cache一致性处理实战

ZYNQ双核通信中的Cache一致性实战指南 在嵌入式系统开发中&#xff0c;多核处理器间的数据共享一直是开发者面临的挑战之一。Xilinx ZYNQ系列SoC凭借其ARM双核Cortex-A9架构与可编程逻辑的完美结合&#xff0c;为高性能嵌入式应用提供了强大支持。然而&#xff0c;当两个核心需…...

实时手机检测-通用效果对比:YOLOv5s/v8n/DAMOYOLO-S三模型同图评测

实时手机检测-通用效果对比&#xff1a;YOLOv5s/v8n/DAMOYOLO-S三模型同图评测 1. 引言&#xff1a;为什么需要更好的手机检测模型&#xff1f; 想象一下&#xff0c;你正在开发一个智能会议室管理系统&#xff0c;需要自动检测参会者是否在会议期间违规使用手机。或者&#…...

COMSOL激光烧蚀激光融覆选区激光融化 激光直接沉积过程中,快速熔化凝固和多组分粉末的加入导...

COMSOL激光烧蚀激光融覆选区激光融化 激光直接沉积过程中&#xff0c;快速熔化凝固和多组分粉末的加入导致了熔池中复杂的输运现象。 热行为对凝固组织和性能有显著影响。 通过三维数值模型来模拟在316L上直接激光沉积过程中的传热、流体流动、凝固过程。 通过瞬态热分布可以获…...

Origin绘图进阶:如何在现有图形上叠加散点图与等高线(附完整操作步骤)

Origin高级绘图技巧&#xff1a;散点图与等高线的完美叠加实战指南 科研数据可视化中&#xff0c;单一图表往往难以全面展示复杂数据关系。当您需要在同一坐标系中同时呈现离散数据点与连续趋势时&#xff0c;散点图与等高线的组合堪称黄金搭档。这种混合图表特别适合展现发动机…...

Harness Engineering 又是什么新 AI 玩具?

今天我们聊了业内最新提出的 Harness Engineering。可以看到&#xff0c;在 AI 智能体优先的世界里&#xff0c;软件工程的鲁棒性开始转移到了支撑智能体上。最近 AI 编程可以说是卷上天了&#xff0c;不得不说时代的大车轱辘已经碾过来了。GLM 一个月内狂发新模型。我们今天来…...

解决MicroBlaze程序启动难题:Vivado中bit与elf文件合并的完整流程

解决MicroBlaze程序启动难题&#xff1a;Vivado中bit与elf文件合并的完整流程 在FPGA开发中&#xff0c;MicroBlaze软核处理器的应用越来越广泛&#xff0c;但许多开发者都会遇到一个共同的痛点&#xff1a;每次下载程序都需要分别加载bit文件和elf文件&#xff0c;这不仅增加了…...

嵌入式设备参数存储方案设计与优化

嵌入式设备参数存储方案设计与实现1. 项目概述在嵌入式系统开发中&#xff0c;参数存储是一个基础但至关重要的功能模块。合理的参数存储方案直接影响产品的可靠性、可维护性和升级扩展能力。本文将深入分析嵌入式设备中常见的参数存储方案&#xff0c;重点解决结构体存储方式存…...