提升编码质量可以从编码规范和代码优化两个方面入手:
为什么要编码规范:
1. 为了提高代码的可阅读性,可维护性,我们需要有对应的编码规范
2. 为来自不同的项目组或个人提供标准的代码格式。
一.编码规范:
1.1 注释规范
Java程序有两类注释:实现注释(implementation comments)和文档注释(document
comments)。实现注释是那些在C++中见过的,使用/.../和//界定的注释。文档注释(被称为"doc
comments")是Java独有的,并由/*.../界定。文档注释可以通过javadoc工具转换成HTML文件。
实现注释用以注释代码或者实现细节。文档注释从实现自由(implementation-free)的角度描述代码的规范。它可以被那些手头没有源码的开发人员读懂。
程序可以有4种实现注释的风格:块(block)、单行(single-line)、尾部(trailing)和行末(end-of-line)。
1.1.1 文档注释
1) 文档注释(Documentation
Comments)描述Java的类、接口、构造函数,方法,以及成员变量(field)。每个文档注释都会被置于注释定界符/*.../之中,一个注释对应一个类、接口或成员。该注释应位于声明之前:
/**
* The Example class provides ...
*/
public class Example { ...
2)
若你想给出有关类、接口、变量或方法的信息,而这些信息又不适合写在文档中,则可使用实现块注释或紧跟在声明后面的单行注释。例如,有关一个类实现的细节,应放入紧跟在类声明后面的实现块注释中,而不是放在文档注释中。
3)
文档注释不能放在一个方法或构造器的定义块中,因为Java会将位于文档注释之后的第一个声明与其相关联。
文件开始注释内容包括:公司名称、版权、作者、时间等。
例如
/**
* Description: 功能描述
* @Author XXX 创建者姓名
* @Date YYYY-MM-DD
*/
1.1.2 块注释
块注释用来为文件、方法、数据结构和算法进行描述或是用来划分文件的模块。块注释一般放在每个文件的开始或是每个模块、方法的前面,也可能放在方法之内。当块注释用在方法之内时,应该和它所注释的代码进行两样的缩进。
模块注释包括:功能、作者,如果有变更,注明变更的说明。
在块注释前应该有一个空行,以便同其他代码进行分割。例如:
/*
* 这里是一个块注释
*/
1.4.3 单行注释
简短的注释可以只用一行来说明,并与后面的代码进行相同的缩进。如果一行写不下,就采用前面说的块注释的形式。单行注释前面应该有一空行。尽量使用单行注释。
下面是一个例子:
if (condition) {
/* 对condition的处理 */
//对condition的处理
...
}
2.1
命名原则
Java的包、类、方法、属性、变量,常量等的命名须严格遵守SUN的JAVA命名规范!
1
包命名
采用完整的英文描述,且名称全部由小写字母组成,并按照com.alibaba.china.projectName的结构,从而达到最小长度最多信息。
2
类名和接口名
类和接口名称第一个字母必须大写,不能包含特殊字符。
3
变量名
变量名首字母小写,采用驼峰结构,变量名不应以下划线或美元符号开头。
成员属性名称和类名不能重名,尽量控制在3-20字符内,且语意明确。
尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。
4
常量名
常量名中所有字母都大写,以"_"划分,且要求表达清楚其含义及值,并有相应注释。
2.2
命名要求细节
2.2.1
Service命名
1) service层接口 {模块名}/service/XxxService
2) service层实现
{模块名}/service/impl/XxxServiceImpl
2.2.2
DAO命名
1) DAO层接口 dao/interfaces/XxxDao.java
2) DAO层实现
dao/ibatis|hibernate|viewcache|search/XxxDaoImpl.java
3) ibatis配置文件名字
表名.xml
2.2.3
DAO方法命名
1) 动作+对象+"By"+条件参数 findBizExpress3ByMemberId
2) 获得多个对象的方法用list做前缀
3)
获得单个对象的方法用find做前缀
4) 获得某些属性的方法用get做前缀
5) 获得统计值的方法用count做前缀
6)
创建对象(数据插入)的方法总是用save(推荐)或insert或add做前缀
7) 删除对象(数据删除)的方法总是用delete做前缀
8)
修改对象(数据修改)的方法总是用update做前缀
9) 移动对象(数据移动)的方法总是用move做前缀
二.代码优化的几点注意:
1. 尽量不要使用+号来连接字符串,至少不要在隔行中使用+来连接字符串。因为有的java虚拟机可能对字符串连接+做了性能优化,在都同行的+字符串连接,转化为StringBuilder的append()方法来连接,所以在同行使用+和使用StringBuilder的append 来做连接性能上差不多。
2. 在设计类时应尽可能地避免在类的默认构造函数中创建,初始化大量的对象。
3.合理的申请数组空间,如果数组中所保存的元素占用内存空间较大或数组本身长度较长的情况,我们釆用可以釆用软引用的技术来引用数组,以“提醒”JVM及时的回收垃圾内存,维护系统的稳定性。
String[] memberIds = null;
List <String> memberIdList = new ArrayList<String>();
memberIdList.add(“1”);
//声明数组空间长度
memberIds = memberIdList.toArray(new String[memberIdList.size()]);
4.StringBuffer的构造器会创建一个默认大小(通常是16)的字符数组。在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创建StringBuffer的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。说明:java源码在AbstractStringBuilder中是这么实现的
/**
* Constructs a string builder with no characters in it and an
* initial capacity of 16 characters.
*/
public StringBuilder() {
super(16);
}
// Appends the specified string builder to this sequence.
private StringBuilder append(StringBuilder sb) {
if (sb == null)
return append("null");
int len = sb.length();
int newcount = count + len;
if (newcount > value.length)
expandCapacity(newcount);
sb.getChars(0, len, value, count);
count = newcount;
return this;
}
/**扩张字符串增长,按照两倍的形式扩张,不指定大小的话会造成空间浪费
* This implements the expansion semantics of ensureCapacity with no
* size check or synchronization.
*/
void expandCapacity(int minimumCapacity) {
int newCapacity = (value.length + 1) * 2;
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
newCapacity = minimumCapacity;
}
value = Arrays.copyOf(value, newCapacity);
}
5.在接口参数中,需要传递常量变量时,可以考虑使用枚举定义,而不需要在每个service中写不同的常量参数,例如:
public enum ExperienceStatus {
/**
* 已发送
*/
HAS_SEND("0"),
/**
* 激活
*/
ACTIVATE("1"),
/**
* 已体验
*/
HAS_EXPERIENCE("2"),
/**
* 过期
*/
OUTOFDATE("3"),
/**
* 失败
*/
FAILED("4");
//状态
private final String status;
ExperienceStatus(String status) {
this.status = status;
};
public String getExperienceStatus() {
return this.status;
}
}
具体调用的形式就是:private static final String ACTIVATE = XXXDO.ExperienceStatus.ACTIVATE.getExperienceStatus();
分享到:
相关推荐
《代码大全——提高编码质量》是一本面向所有程序员的经典著作,它超越了特定编程语言的界限,提供了广泛适用的编程原则和实践。这本书的核心目标是帮助开发者提升代码的质量,从而编写出更健壮、可读性更强、易于...
本文基于一份来自2007年的PPT材料,深入探讨了代码优化的三个主要层面:算法优化、流程优化以及编码技巧优化。通过这些层面的优化,可以有效地解决开发过程中的瓶颈问题。 #### 二、代码优化的背景 随着嵌入式系统...
【高质量代码提升】是软件开发中的重要议题,旨在提高代码的可读性、可维护性和性能,从而降低软件的维护成本,提升团队协作效率。以下是对高质量代码的一些关键点的详细说明: 1. **代码规范**:代码规范是编写高...
用户可以通过修改此文件来指定要编码的视频源,并调整编码参数以优化质量或压缩比。 运动估计和补偿是MPEG-2编码中的重要环节,通过比较连续两帧之间的像素差异来预测运动,减少数据量。DCT(离散余弦变换)则将...
- 使用不同的编码策略,如动态帧大小选择、自适应量化参数调整等,以优化编码质量和带宽使用。 - 可能`method1`是基础实现,而`method2`是优化或者增强版本,例如使用更高效的编码算法或增加了错误恢复机制。 5. ...
在Java编程中,优化是提升程序性能和代码质量的关键步骤。优化不仅能减少资源消耗,提高应用响应速度,还能增强系统的可维护性和扩展性。本文将深入探讨Java优化的多个方面,帮助开发者掌握优化技巧,提升代码质量。...
- **并行计算**:如果硬件支持,可以利用多核处理器进行并行编码或解码,提升性能。 - **资源限制**:考虑到嵌入式系统的内存和CPU限制,优化算法和数据结构,降低资源需求。 5. **调试与测试**: - **单元测试*...
这些参数影响编码质量和带宽占用。在源代码中,开发者可以找到如何设置这些参数的例子,以便在性能和质量之间找到平衡。 4. **编码过程控制**:编码过程包括I帧、P帧和B帧的生成,以及熵编码等步骤。源代码会展示...
本资料集重点聚焦于"Java 代码重构优化 Java 代码优化 java设计优化",适合具有3年以上工作经验的Java工程师深入学习。 一、代码重构 1. **提取方法**:当一段代码块在多个地方重复出现时,可以将其提取为独立的...
在本文中,我们将深入探讨mpeg2的编码与解码原理,并基于提供的源代码进行分析。 一、mpeg2编码过程 1. **帧类型选择**:MPEG-2支持三种帧类型——I帧(关键帧)、P帧(前向预测帧)和B帧(双向预测帧)。I帧不...
编码不仅限于编写新软件,也包括调试现有代码、优化性能、解决bug以及维护软件系统。一个熟练的编码者需要理解数据结构、算法、设计模式,以及如何编写可读性强、易于维护的代码。 接着,我们来谈谈“源代码”。源...
2. **编码与解码**:对问题的解决方案进行编码,例如使用二进制或实数编码,解码则是将编码的解决方案转化为实际问题的解。 3. **种群初始化**:创建初始种群,这是一组随机生成的解。 4. **适应度函数**:计算每个...
JPEG(Joint Photographic Experts Group)是一种广泛用于数字图像和照片的有损压缩标准,它能够有效地减小文件的大小,从而节省存储空间...同时,通过分析和修改源代码,还可以实现自定义的压缩质量设置或者优化性能。
AMR-NB编码的核心在于它的自适应多速率(Adaptive Multi-Rate)算法,该算法可以根据通信信道的质量动态调整编码速率,从而在不同的环境条件下优化语音质量。编码过程主要包括预处理、量化、编码和比特流处理四个...
【Matlab多层编码遗传算法车间调度代码】是利用MATLAB编程环境,结合遗传算法解决实际问题的一个实例,尤其在优化领域中常见的车间调度问题。遗传算法是一种模拟自然选择和遗传机制的全局优化方法,它通过模拟生物...
总之,"5G标准下LDPC编码C代码"是一个实现5G通信中LDPC编码核心功能的软件工具,其支持多种校验矩阵和码率兼容性,对于提升5G网络的数据传输质量和效率有着重要作用。开发者可以利用这套代码进行5G通信系统的设计、...
YUV色彩空间则是数字视频和图像处理中常用的一种颜色模型,它将图像分解为亮度(Y)和两个色差分量(U和V),以减少数据量并优化编码效率。本主题涉及的是如何使用C语言实现YUV图像的JPEG编码。 1. **YUV色彩空间**...
2. **率失真优化**(RDO):RDO是一种权衡编码质量和码率的优化方法,通过比较不同编码模式下的码率和失真,选择最优解。优化RDO可能包括更快的量化参数选择算法,以及更有效的失真度量。 3. **熵编码优化**:熵...