如何写出健壮的 Java 代码

/ Java / 没有评论 / 1437浏览

如何写出健壮的 Java 代码!

如何写出健壮的 Java 代码?我相信这是很多人都有的疑惑或者想要的答案。今天我们抽个时间一起探讨一下!

说实话,看到这个问题我也不知道如何回答为好!所以我也需要答案!

于是我就去百度,谷歌。各种搜索,寻找各种编程技巧和学习方法。搜索之后,发现网上的很多结论都不太理想,于是就需要我自己去思考,去探索如何让自己写的代码更健壮!

没有答案之后,我就换了一种想法。Spring 框架大家都在使用吧,Spring 框架肯定也都和健壮吧,于是我就是 Spring 框架中寻找答案!

当然,绝不仅仅是 Spring 框架,还包括其他一些框架的源码。多去看它们的源码,去寻找答案。

下面我总结一些关于代码健壮的相关建议。

第一个,我发现 Spring 框架源码中存在各种各样的断言。Assert.isNull()、Assert.notNull()、Assert.state()、Assert.isTrue()、Assert.notEmpty() 等。

他们把非常多的 if 判断是否为空,参数是否合法等都给封装起来了,代码显的非常简洁。

尽管 Spring Assert 与其他框架的名称类似,如 JUnit 或其他框架,但其实没有任何共同之处。Spring Assert 不是为了测试,也不是为了调试,而是为了方便校验一些参数。

int speed = 0;
Assert.isTrue(speed > 0, "speed must be positive");
String state = "";
Assert.state(state.equals("stop"), "car must be stopped");
Assert.notNull(state, "state mustn't be null");
Assert.isNull(state, "to replace battery the charge must be null");
Assert.isInstanceOf(String.class, state,"www.xttblog.com");
Assert.isAssignable(String.class, Object.class,"www.xttblog.com");
String key = "";
Assert.hasLength(key, "key must not be null and must not the empty");
Assert.hasText(
    key,
    "key must not be null and must contain " +
        "at least one non-whitespace character");
Assert.doesNotContain(key, "123", "key mustn't contain 123");

除了上面这些,Spring 框架中的很多工具类,你会发现里面有很多的静态方法。这个类要么是 final 类型的,然后构造函数私有化。要么就是一个抽象类 abstract。你以后的写的类中全是静态方法的话,就可以这样做。

另外还有一些 PO、VO、DO 等类要分清楚它们各自的用途。不然会扯出不少的水平权限漏洞和垂直权限漏洞。

不能把自己程序的健壮性建立在别人代码正确的基础上,这种依赖如果成了习惯,会麻痹自己的警觉性。要做到即使是别人错了,我们的程序依然能正常运行。使用别人的参数,必须要自己在校验一遍。最常见的就是前端做了校验,后端不做校验。

对于调用的方法中如果有异常抛出,尽量要自己 try–catch 语句块,以防发生非预期的结果。

给每个 if(condition){} 都加上大括号,即使里面只有一句话。阿里巴巴 Java 开发规范手册中明确强调的。

常量类中,尽量写一些内部类,把常量进行区分。很多常量类中的常量高达上百个,没有一点归类。

千万别自己随意的重复造轮子,多用一些框架中自带的工具类。