[Java 基础]Java 语言的规范
代码格式
缩进:代码的层次感
怎么做: 统一使用 4 个空格进行缩进。不要用 Tab 键,因为不同的编辑器对 Tab 的显示宽度可能不一致,容易造成混乱。
大括号:清晰的代码块边界
风格: 推荐使用 K&R 风格(Kernighan & Ritchie):
左大括号 { 放在语句块的开始处,不另起一行,与前一个关键字或方法名在同一行,中间有一个空格。
右大括号 } 另起一行,与对应的左大括号对齐。
例外: 对于空的代码块,可以直接写成 {}。
if (condition) {// 代码块
} else {// 代码块
}public void doSomething() {// 方法体
}
行的长度:保持适中
建议: 每行代码的长度尽量不要超过 120 个字符。
过长怎么办: 如果一行代码过长,应该进行换行。换行时要保持适当的缩进,使代码逻辑清晰。通常在运算符、逗号后面或方法调用的点号 .处进行换行。
// 过长的代码行
String veryLongString = "This is a very long string that exceeds the recommended line length and needs to be broken down for better readability.";// 换行后的代码
String veryLongString = "This is a very long string that exceeds the recommended line length "+ "and needs to be broken down for better readability.";someObject.longMethodName(parameter1, parameter2,parameter3, parameter4);
注释
好的注释是代码的无声文档,能够帮助自己和他人理解代码的意图和实现方式。
Java 中的注释分为如下几类:
- 单行注释 //: 用于解释单行代码或简单的说明。
- 多行注释 /* … */: 用于解释一段代码或提供更详细的说明。
- 文档注释 /** … */: 用于为类、接口、方法、字段等生成 API 文档(Javadoc)。
写的注释要遵循如下的原则:
- 准确性: 注释的内容要与代码实际的功能和逻辑保持一致。
- 简洁性: 注释应该简洁明了,避免冗余和废话。
- 必要性: 注释应该解释代码的意图、实现思路、特殊情况或不容易理解的部分。对于显而易见的代码,可以省略注释。
- 及时性: 当代码被修改时,相应的注释也应该及时更新。
如下这些情况请添加注释:
- 类和接口的声明: 使用文档注释说明类或接口的作用、设计思路、作者、版本等信息。
- 重要的方法: 使用文档注释说明方法的功能、参数、返回值、异常情况、使用示例等。
- 复杂的逻辑: 对于实现复杂业务逻辑的代码块,添加注释解释其实现思路和关键步骤。
- 重要的变量: 对于重要的成员变量或局部变量,添加注释说明其含义和用途。
- 特殊情况或技巧: 对于一些特殊的处理逻辑、边界条件或使用的技巧,添加注释进行说明。
- TODO、FIXME 等标记: 使用 // TODO: 标记待完成的任务,// FIXME: 标记需要修复的 Bug,// NOTE: 添加一些需要注意的事项。
/*** 表示一个简单的用户类。* 包含用户的姓名和年龄信息。** @author Your Name* @version 1.0*/
public class User {private String name; // 用户的姓名private int age; // 用户的年龄/*** 构造一个新的 User 对象。** @param name 用户的姓名,不能为空。* @param age 用户的年龄,必须为正数。* @throws IllegalArgumentException 如果姓名为空或年龄为负数。*/public User(String name, int age) {if (name == null || name.isEmpty()) {throw new IllegalArgumentException("姓名不能为空");}if (age <= 0) {throw new IllegalArgumentException("年龄必须为正数");}this.name = name;this.age = age;}/*** 获取用户的姓名。** @return 用户的姓名。*/public String getName() {return name;}/*** 设置用户的姓名。** @param name 要设置的姓名,不能为空。*/public void setName(String name) {if (name == null || name.isEmpty()) {throw new IllegalArgumentException("姓名不能为空");}this.name = name;}// TODO: 添加获取年龄的方法public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
代码美观
美观的代码不仅让人看着舒服,也能提高代码的可读性和维护性,从而提升开发效率。
- 命名规范:见名知意
类名和接口名: 使用名词或名词短语,采用 PascalCase 命名法(每个单词的首字母大写,其余字母小写)。例如:UserService、ProductRepository。
方法名: 使用动词或动词短语,采用 camelCase 命名法(第一个单词的首字母小写,后续单词的首字母大写)。例如:getUserById()、calculateTotalPrice()。
变量名: 使用名词或名词短语,采用 camelCase 命名法。尽量使用具有描述性的名称。例如:userName、orderCount。
常量名: 使用大写字母,单词之间用下划线分隔。例如:MAX_VALUE、DEFAULT_TIMEOUT。
包名: 使用小写字母,单词之间用点号分隔。通常采用公司或组织的域名倒置作为前缀。例如:com.example.myapp。
- 文件组织:清晰的目录结构
按照功能或模块将相关的类组织在不同的包中。
保持项目结构的清晰和一致性。
- 减少魔法数字和字符串
尽量使用常量来代替代码中直接出现的数字或字符串,提高代码的可读性和可维护性。
相关文章:
[Java 基础]Java 语言的规范
代码格式 缩进:代码的层次感 怎么做: 统一使用 4 个空格进行缩进。不要用 Tab 键,因为不同的编辑器对 Tab 的显示宽度可能不一致,容易造成混乱。 大括号:清晰的代码块边界 风格: 推荐使用 K&R 风格…...
SpringBoot插件化架构的4种实现方案
在复杂业务场景下,传统的单体应用架构往往面临着功能扩展困难、代码耦合严重、迭代效率低下等问题。 插件化架构作为一种模块化设计思想的延伸,能够使系统具备更好的扩展性和灵活性,实现"热插拔"式的功能扩展。 本文将介绍Spring…...

设计模式——状态设计模式(行为型)
摘要 状态设计模式是一种行为型设计模式,核心在于允许对象在内部状态改变时改变行为。它通过状态对象封装不同行为,使状态切换灵活清晰。该模式包含环境类、抽象状态类和具体状态类等角色,具有避免大量分支判断、符合单一职责和开闭原则等特…...
CppCon 2014 学习:Lightning Talk: Writing a Python Interpreter for Fun and Profit
Lightning Talk: Writing a Python Interpreter for Fun and Profit 这段内容在讲的是 Python 的执行模型,尤其是 CPython 的工作流程。下面是逐步解析: Python 是动态类型语言(Dynamically typed) 变量类型在运行时决定。x 4…...

CTFHub-RCE 命令注入-过滤运算符
观察源代码 代码里面可以发现过滤了运算符,我们可以尝试分号; 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1;ls 打开flag文件 cat这个php文件 127.0.0.1;cat flag_257413168915334.php 可是发现 文本内容显示…...

【音视频】H265 NALU分析
1 H265 概述 H264 与 H265 的区别 传输码率:H264 由于算法优化,可以低于 2Mbps 的速度实现标清数字图像传送;H.265 High Profile 可实现低于 1.5Mbps 的传输带宽下,实现 1080p 全高清视频传输。 编码架构:H.265/HEVC…...

运维 vm 虚拟机ip设置
虚拟网络设置 nat 模式 网卡 主机设置网卡地址 虚拟机绑定网卡...

飞牛fnNAS存储模式RAID 5数据恢复
目录 一、添加硬盘 二、创建RAID 5 存储空间 三、上传测试文件 四、拆除硬盘 五、更换硬盘 六、修复RAID 5 七、验证其内文件 八、NAS系统崩溃后的数据盘 前文《飞牛fnNAS存储空间模式详解》 中介绍了fnNAS存储空间的几个模式,细心的网友应该能感受到,我是非常推崇R…...

论文笔记:DreamDiffusion
【初中生也能看得懂的讲解】 想象一下,我们能不能直接用“脑子想”来画画?比如你想到一只猫,电脑就能画出一只猫。这听起来是不是很酷?科学家们一直在努力实现这个“意念画画”的梦想。 以前,科学家们可能会用一种叫…...
户外摄像头监控如何兼顾安全实时监控
一、技术手段提升隐私安全性 硬件与功能设计 采用支持隐私保护技术的设备,例如带电子开关的摄像头(可远程控制摄像头启闭)3,或搭载本地AI算法的设备,仅识别人形、车辆等目标,减少无关信息采集。 使用安全…...
Neo4j 备份与恢复:原理、技术与最佳实践
在数据驱动的应用中,图数据库Neo4j承载着至关重要的关联数据。确保其数据安全与业务连续性依赖于强大的备份与恢复策略。本文将深入探讨Neo4j备份恢复的核心原理、关键技术、实用技巧及行业最佳实践,内容基于官方最新文档。 构建健壮的 Neo4j 备份恢复体…...

简单实现Ajax基础应用
Ajax不是一种技术,而是一个编程概念。HTML 和 CSS 可以组合使用来标记和设置信息样式。JavaScript 可以修改网页以动态显示,并允许用户与新信息进行交互。内置的 XMLHttpRequest 对象用于在网页上执行 Ajax,允许网站将内容加载到屏幕上而无需…...
关于 java:3. Java 常用类库与数据结构
一、String 1.1 String 是什么? public final class String implements java.io.Serializable, Comparable<String>, CharSequence特点: 是 不可变对象(immutable) 是 final 类,不能被继承 内部使用 字符数组…...

数据挖掘顶刊《IEEE Transactions on Knowledge and Data Engineering》2025年5月研究热点都有些什么?
本推文对2025年5月出版的数据挖掘领域国际顶级期刊《IEEE Transactions on Knowledge and Data Engineering》进行了分析,对收录的62篇论文的关键词与研究主题进行了汇总,并对其中的研究热点进行了深入分析,希望能为相关领域的研究人员提供有…...

LabVIEW双光子显微镜开发
基于LabVIEW 开发高性能双光子显微镜系统,聚焦于生物样本深层成像与纳米材料三维表征。实现了超快激光控制、多维数据采集与实时图像重建。系统采用飞秒激光光源与高精度振镜扫描模块,结合 LabVIEW 的 FPGA 实时控制能力,可对活体组织、荧光纳…...

WordPress 6.5版本带来的新功能
WordPress 6.5正式上线了!WordPress团队再一次为我们带来了许多新的改进。在全球开发者的共同努力下,WordPress推出了许多新的功能,本文将对其进行详细总结。 Hostease的虚拟主机现已支持一键安装最新版本的WordPress。对于想要体验WordPres…...
将材质球中的纹理属性对应的贴图保存至本地
通过Texture2D的EncodeToPNG方法将纹理转为图片形式 material.GetTexture方法通过属性名获取纹理贴图 material.SetTexture方法通过属性名设置纹理贴图 属性名可在shader代码中查看 using UnityEngine; using System.IO;public class TextureSaver : MonoBehaviour {public…...
Linux应用开发之网络套接字编程
套接字(Socket)是计算机网络数据通信的基本概念和编程接口,允许不同主机上的进程(运行中的程序)通过网络进行数据交换。它为应用层软件提供了发送和接收数据的能力,使得开发者可以在不用深入了解底层网络细…...

实现RabbitMQ多节点集群搭建
目录 引言 一、环境准备 二、利用虚拟机搭建 三、镜像集群配置 四、HAProxy实现负载均衡(主用虚拟机操作) 五、测试RabbitMQ集群搭建情况 引言 在现代分布式系统中,消息队列(Message Queue)扮演着至关重要的角色,而 RabbitMQ 作为…...

GLIDE论文阅读笔记与DDPM(Diffusion model)的原理推导
Abstract 扩散模型(Diffusion model)最近被证明可以生成高质量的合成图像,尤其是当它们与某种引导技术结合使用时,可以在生成结果的多样性与保真度之间进行权衡。本文探讨了在文本条件图像生成任务中使用扩散模型,并比…...

机器学习——放回抽样
为了构建树集成模型,需要一种叫做有放回采样的技术。 以4个标记为演示,分别是红色、黄色、绿色和蓝色,用一个黑色的袋子把这四个标记的例子放进去,然后从这个袋子里有放回地抽取四次,抽出一个标记,结果是绿…...
前端内存泄漏:原理、检测与防范实践
一、什么是内存泄漏 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因未能被释放或无法被释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 在前端开发中,虽然现代浏览器具备垃…...

Go的隐式接口机制
正确使用Interface 不要照使用C/Java等OOP语言中接口的方式去使用interface。 Go的Interface的抽象不仅可以用于dynamic-dispatch 在工程上、它最大的作用是:隔离实现和抽象、实现完全的dependency inversion 以及interface segregation(SOLID principle中的I和D)。…...
UE音频中间件wwise插件
虚幻引擎用wwise插件有什么用? 没有这个插件不是也能播放声音吗? 为什么要用他? 在Unreal Engine(UE)中使用 Wwise 插件,不是因为 UE 不能做声音,而是因为 Wwise 更强、更专业,适合复杂的音频需求。 🎧 …...
C++.cstring string
C.cstring string 1. C 中的字符串概述1.1 C 中字符串的两种表示方式C 中的 cstring示例代码 C 中的 string示例代码 1.2 C 中字符串的使用场景使用 cstring 的场景使用 string 的场景示例对比使用 cstring 的示例使用 string 的示例 2. C 中的 cstring2.1 cstring 的定义与基本…...
Spring AOP 和 AspectJ 有什么区别
1. 织入方式 Spring AOP: 运行时织入:Spring AOP 使用动态代理技术(如 JDK 动态代理或 CGLIB 代理)在运行时创建代理对象。 依赖 Spring 容器:仅支持 Spring 管理的 Bean。 AspectJ: 编译时织入…...

报表/报告组件(二)-实例与实现解释
上篇《报表/报告组件(一)-指标/属性组件设计》介绍了组件核心指标/属性设计,本文以实例介绍各个特性的实现和效果,实例是多个报告融合,显示所有的特性。 设计 指标/属性组件是报告/报表关键部分,上篇已介绍过,本节回顾…...
linux的实时性
Linux 的实时性取决于其内核配置和使用场景。标准 Linux 内核(非实时内核)在设计上更注重吞吐量和公平调度,而非严格的实时性。但通过以下方式可以显著提升其实时性能: 1. 标准 Linux 内核的实时性 优点: 适用于大多数…...
Opencv4 c++ 自用笔记 04 图像滤波与边缘检测
图像滤波与边缘检测 直接采集到的图像可能带有噪声的干扰,因此去除噪声是图像预处理中十分重要的一步。图像滤波是图像噪声去除的重要方式。 图像卷积 卷积操作广泛应用于信号处理领域,而图像本质上可以视为一种二维信号数据。 卷积过程可以理解为一…...

流媒体基础解析:音视频封装格式与传输协议
在视频处理与传输的完整流程中,音视频封装格式和传输协议扮演着至关重要的角色。它们不仅决定了视频文件的存储方式,还影响着视频在网络上的传输效率和播放体验。今天,我们将深入探讨音视频封装格式和传输协议的相关知识。 音视频封装格式 什…...