Java代码格式

简介: Java代码格式

东汉大臣陈蕃有一则这样的故事,“一屋不扫何以扫天下”,寓意来表明一个大丈夫,如果连自己的居室都不能打扫干净,怎么胸怀天下。《代码整洁之道》就是来劝诫我们程序员写出更优秀的代码,而“格式”一章也恰巧给我们举出了很多原则,以供我们写出更加规整的代码。


格式的目的


好的代码格式,让人赏心悦目,并且随着版本的更迭,让你能够随心所欲的进行变更,而不是每次都痛苦不堪。


垂直格式


类文件的行不应该成千上万行,应尽量保持短小,当然这点很难做到,我们习惯于在一个类中完成多种多样的功能,以至于我们很难将类进行模块化。

image.png



使用空行进行分割


人的眼睛对段落有着很强烈的直观意识,如果一篇文章从上倒下一直没有分割,那你就会立刻离开。

public static BaseBiz getBaseBizBeansByName(String bizName) {
  return factory.getBean(bizName, BaseBiz.class);
 }
 /**
 * @Description: 根据银行类型获取对应的预签约业务类
 */
 public static BasePerSign getBasePerSignByName(String bankType) {
  return factory.getBean(bankType + "PerSign", BasePerSign.class);
 }
 /**
 * @Description: 根据银行类型获取对应的出金业务类
 */
 public static BaseBiz getMoneyOutByBeanName(String bankType) {
  return factory.getBean(bankType + "MoneyOut", BaseBiz.class);
 }


保持好方法之间的空白行会让代码整体看起来很舒服,空白行帮我们识别出来不同的概念。


垂直方向上的靠近


private static Map<String, String> configs = new HashMap<String, String>();
 private static final String CONFIG_FILE = "conf/hxbconfig.properties";
 private static String path = HXBConfig.class.getClass().getResource("/").getPath() + CONFIG_FILE;
 private static Properties prop = new Properties();


以上是一串相关的代码,彼此之间紧密相连,如果你把这四行代码放置在不同的位置,那就非常糟糕了。


垂直距离


在读一个类文件时,往往需要上下跳动,那么这个时候,如果本来紧密相连的内容跳跃的幅度特别大,此时就容易让人觉得沮丧,因为你要不停的浪费记忆来保持对这些跳转有所意识。


变量声明要尽量出现在其使用的地方,本地变量应该在函数的顶部出现。


for (int i = 0; i < bankDailyPreSettlements.size(); i++) {public static Message startPerSignBiz(Message msg) throws IOException {
  StringBuilder msgs = new StringBuilder();
  // 对银行进行归类
  for (String bank : getList()) {
   if (bankmemList.size() > 0) {
    BasePerSign biz = SpringUtils.getBasePerSignByName(bank);
    logger.info(biz + "开始启动");
    // 进行数据操作
    msgs.append(biz.dealMembers(bankmemList));
   }
  }


实体变量应在类的顶部声明,因为在设计非常好的类中,实体变量会被很多方法共用。

下面是来自百度的一段解释:


实例(体)变量是和类变量相对应的

类变量也叫静态变量,也就是在变量前加了static 的变量;

实例(体)变量也叫对象变量,即没加static 的变量;

那么他们的区别究竟是什么呢?

类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象

public class HXBMoneyIn extends BaseBiz {
 private static Logger logger = Logger.getLogger(HXBMoneyIn.class);
 @Autowired
 private MoneyTransferService moneyTransferService;
 @Override
 public Message dealMsg(Message msgParam) {
  logger.info("华夏银行接收到入金请求...");


moneyTransferService其实就是一个实体变量,所以放在类的顶部。当然对于logger这种静态变量,也是要放在类顶部。


相关函数


若某个函数调用了另外一个函数,则两者应该放在一起,另外调用函数应该放在被调用函数的上方。

public void callAuctionMatch() {
  excuteAuctionMatch();
 }
 private void excuteAuctionMatch() {
  logger.info("启动白盘商品撮合...");
 }


概念相关的代码应该在一起。


public static BaseBiz getMoneyOutByBeanName(String bankType) {
  return factory.getBean(bankType + "MoneyOut", BaseBiz.class);
 }
public static BaseBiz getMoneyInByBeanName(String bankType) {
  return factory.getBean(bankType + "MoneyIn", BaseBiz.class);
 }

横向格式


反正Robert的观点和我刚好吻合,因为现如今显示屏已经变宽,所以行宽保持在120个字符最佳。


水平方向上的格式,我现在基本上使用eclipse的默认格式。


对于水平方向上的区隔与靠近、水平对齐、缩进、空范围,我觉得eclipse做的还不错,我只改进了两点:

1. 120个字符

2. switch格式


image.png


团队规则


这一点非常重要,我要求我的团队成员遵守我的编码格式,这样两人的代码在SVN库中就不会发生格式的冲突。


我也来提供一小段我自己的代码格式,我认为还不错

public class StartFrontprocessorServer {
 private static Logger logger = Logger.getLogger(StartFrontprocessorServer.class);
 public static void main(String[] args) {
  Constants.init();
  if (ExcheUtil.canRunForExchange(ExchangeUtil.PRIVILEGE_RESULT_TYPE)) {
   Spriils.getSpringContext();
   logger.info("前置机监听交易端请求业务服务器开始启动");
   Frontener listener = new FrontToBHListener(new CloseHandler() {
    @Override
    public void Close() {
    }
   });
   listener.start();
   // 根据当前交易所配置的银行结算类型进行监听器加载
   SettleBanager.startThread("Listener");
   logger.info("前置机V1.0.0.1.20140521");
  } else {
   logger.info("系统已经被禁用,无法使用!");
  }
 }
}
相关文章
|
13天前
|
Java 测试技术 应用服务中间件
常见 Java 代码缺陷及规避方式(下)
常见 Java 代码缺陷及规避方式(下)
39 0
|
15天前
|
Java
Java中ReentrantLock释放锁代码解析
Java中ReentrantLock释放锁代码解析
25 8
|
18天前
|
前端开发 小程序 Java
uniapp上传图片 前端以及java后端代码实现
uniapp上传图片 前端以及java后端代码实现
32 0
|
19天前
|
设计模式 存储 Java
23种设计模式,享元模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享技术有效地支持大量细粒度对象的重用。这个模式在处理大量对象时非常有用,特别是当这些对象中的许多实例实际上可以共享相同的状态时,从而可以减少内存占用,提高程序效率
35 4
|
13天前
|
Java
代码的魔法师:Java反射工厂模式详解
代码的魔法师:Java反射工厂模式详解
26 0
|
13天前
|
监控 安全 Java
常见 Java 代码缺陷及规避方式(中)
常见 Java 代码缺陷及规避方式(中)
27 1
|
15天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
15 0
|
16天前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
29 4
|
16天前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出&quot;验证成功&quot;,否则输出&quot;验证失败&quot;。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。
|
18天前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
21 1