1 前言
很多时候,开发人员都不太注意自己的编程风格,他们把主要精力都放到了功能的实现上。这本来就是无可厚非的,但是不得不提醒的是好的编程设计风格同样也至关重要。
一个杂乱无序的程序代码让人看后有一种心烦意乱的感觉,因此抱怨、怀疑开发人员的素质和技术水平。如果这个系统想持续移交下去的可能性就几乎没有了,即便是原来人马长此以往也会茫然无措。这也是造成软件公司的人员流动频繁的一个因素。如果软件因无法继续开发、维护而半途夭折,这给企业带来的损失是不言而喻的。
因此,从近期利益来看是应该着眼于功能的实现,虽能解一时之渴,而不思长远之计,将会损失惨重!很多优秀公司,宁愿培养没有实际开发经验的员工,也不愿和养成不良设计风格的开发人员共事。因为,优秀的软件企业都有自己一套健全、成熟的程序设计风格规范文档,用以规范开发人员编写代码的风格。
下面就详细介绍Java编程设计时应该注意的书写格式,应用好这些格式也能写出大师级别的代码。
2 源文件
Java文件分为Java源文件和Java字节码文件两种类型。
文件类型 | 文件后缀 |
Java源文件 | .java |
Java 字节码文件 | .class |
Java 源文件 由开发人员创建,Java 字节码 文件是通过Java虚拟机编译Java源文件生成的。我们所说的编程设计风格是对Java源文件而言。在Java源文件中应该包含一个单一的类或接口。它由被空行分割而成的段落以及标识每个段落的可选注释共同组成。通常来讲,一个Java源文件不应该超过2000行。
Java 源文件还遵循以下规则:
- 开头文件注释
- 包名和引入声明
- 类或接口声明
2.1 文件注释
所有的Java源文件都应该在开头有一段注释,其中包括类名、日期、功能和版权等。这些注释信息是为了生成 Java API 标准文档做准备的。
/*
* @ClassName: 类名
* @Description: 功能说明
* author: 作者
* @date: 日期
* Copyright (c): 版权
*/
2.2 包和引入
我们在做Java开发时经常会 引入 (import)Java核心类或第三方软件厂商的类。一般情况下,这些类都是封装在一个 包 (package)里面。包的出现使类有了空间上的划分。如下代码所示:
package com.fs.core.util;
import java.util.Collection;
在Java语言中包的命名规则如下所示:
- 包名必须独一无二不可重复
- 包名应该是小写的ASCII字母
- 包名一般由域名后缀+公司域名+功能模块+其它组成
例如:
- com. baidu .util;
- java.lang
- org.springframework.boot.SpringApplication
2.3 缩进排版
Java源文件一般是以四个空格键为单位作为缩进排版的一个单位。当然这并没有权威的文献作为参考,只是目前普遍认为比较清晰合理的格式。
2.4 行长度和换行
一般来说Java的代码行长度应该小于80个字符,这是因为目前很多终端和工具不能很好的处理。建议在70个字符左右。
当完整的一行代码不能在一行很好的排版时,我们可以根据下面的规则进行拆行编排:
- 在逗号后换行
- 在运算符前换行
- 换行的代码应该与同级别的代码行左对齐
- 如果换行出现差距较大且混乱时,我们可以适当采用Tab键(8个空格)处理
2.5 命名规则
- 类或接口
类或接口的的命名,第一个字母大写,在多个单词混合的情况下,第一个单词后的所有单词的第一个字母大写,其余字母小写,代码示例:
//类
public class SysUser{
}
//接口
public interface SysUserDao {
}
- 方法
方法的命名,第一个字母小写,在多个单词混合的情况下,第一个单词后的所有单词的第一个字母大写,其余字母小写,代码示例:
boolean addUser(SysUser sysUser);
List<SysUser> getList();
如果该方法在软件产品的不断升级中已经不建议使用了,可以在方法声明注释部分下添加注解@deprecated。
- 变量
变量命名规则 是,除常规变量外,第一个字母小写,在多个单词混合的情况下,第一个单词后的所有单词的第一个字母大写,其余字母小写。
private String userName;
常量命名规则是,一般采用大写字母,单词之间用下划线“_”分割,
private static final int DEFAULT_POOL_SIZE=10
2.6 语句编写规则
在Java编程设计中,语句按其自身特点可以分为:简单语句与复合语句。
- 简单语句
简单语句一般包括单行计算语句、赋值语句和返回语句。它们共同的特点是仅占用一个代码行完成相关操作。一行出现多个简单语句是不可取的。
- 复合语句
复合语句可以分为:分支语句、循环语句和异常语句。
if else 语句为了代码更加安全和清晰,建议代码块为单行的语句也通过{}将其闭合。
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}
for 语句的初始化或更新子句中使用逗号时,避免因使用三个以上变量,而导致复杂度提高。
for ( initialization ; condition; update) {
statements;
}
2.7 空行应用规则
空行将逻辑相关的代码段分隔开,以提高可读性。
- 使用两个空行隔开
在同一个源文件中类声明和接口声明之间
- 使用一个空行隔开
两个方法之间;方法内部的局部变量和方法的第一条语句之间;块注释和行注释前;在一个方法的两个逻辑段之间;
3 码农 来洞见
下面的例子是一个用户管理的业务类,展示了如何合理布局一个包含单一公共类的Java 源程序 。(编辑器代码排版可能会出现错乱,仅供参考)
/*
*
* Copyright (c) 2021 fullset
* @ClassName SysUserService
* @author 码农洞见
* @date 2021/6/5 10:52
* @Description 用户管理
*/package com.fs.base.service;
import com.fs.orm.entity.SysUser;
import com.fs.orm.vo.form.SysUserForm;
import com.github.pagehelper.PageInfo;
import java.util.List;
import java.util.Map;
public class SysRoleServiceImpl implements SysRoleService {
/**
* 获取全部用户
* @return
*/ List<SysUser> getAll(){
QueryWrapper qWrapper = new QueryWrapper();
//过滤条件
qWrapper.eq("is_deleted", 0);
return sysUserDao.getList(qWrapper);
}
/**
* 添加用户
* @return
*/ SysUserForm addUser(SysUserForm sysUserForm) {
SysUser sysUser = new SysUser();
BeanUtil.copyAttribute(sysUserForm, sysUser);
boolean result;
try {
result = sysUserDao.addUser(sysUser);
}catch (Exception e){
throw new Exception("sql语法错误!");
}
if(!result){
throw new BizException(BizExceptionEnum.SYS_USER_ADD_ERROR);
}
return sysUserForm;
}
/**
* 编辑用户表单
* @return
*/ SysUserForm editForm(Long id){
SysUser sysUser = new SysUser();
BeanUtil.copyAttribute(sysUserForm, sysUser);
try {
sysUser = sysUserDao.editUser(sysUser);
}catch (Exception e){
// throw new Exception("sql语法错误!");
}
return sysUserForm;
}
/**
* 逻辑删除用户
* @param id 用户id
* @return
*/ boolean logicalDeleteById(String id){
return sysUserDao.logicalDeleteById(id);
}
}
以上就是今天分享的内容,Java编程设计就好比书法,只要按规范坚持下去,你也能成就大师的风范。 我是码农洞见,为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。欢迎大家关注交流!