思考
在《调香术》这本书里面有这样一句话,<font color= “#660066" >“人所共知,调香是科学技术和艺术的结合,在调配高级香水、空气清新剂、化妆品香精时。“艺术”二字占有更大的分量,同艺术家、画家一样,调香师的艺术修养决定了他的作品到达的境界。”
如果对这句话引深一下,我觉得编程也是如此,<font color= “#660066" >开发人员对编码理解和领悟的水平高低,决定了其编码艺术水平到达的境界,越是优雅、简洁的代码,其艺术水平就越高,更容易让人产生心理共鸣,进而学习和模仿。
在工作和学习中,经常会接触到同事或者网友写的代码,在梳理业务逻辑和模块时,总能发现十分让人心生欢喜的代码,其优雅、简洁的写法和构思,让人心生敬意,不自觉的收藏,以便后续研读和学习。
本着学习无止境的态度,加之本人水平一般,将自己看到和总结的<font color= “#660066" >具有艺术级别的代码罗列如下,与诸君共读。
研读
1. 尽量使用基本数据类型,避免自动装箱和拆箱
正例
int i = 10;
反例
Integer i = 10;
直接赋值避免了对象的新建,变量可以直接指向值的引用,简洁且高效。
2. 如果变量的初值会被覆盖,就没有必要给变量赋初值
正例
List<UserDO> userList;
if (isAll) {
userList = userDAO.queryAll();
} else {
userList = userDAO.queryActive();
}
反例
List<UserDO> userList = new ArrayList<>();
if (isAll) {
userList = userDAO.queryAll();
} else {
userList = userDAO.queryActive();
}
userList
确定会被赋值,就无须初始化,这样可以少创建引用或者new
对象。
3. 尽量使用函数内的基本类型临时变量
正例
public final class Accumulator {
private double result = 0.0D;
public void addAll(@NonNull double[] values) {
double sum = 0.0D;
for(double value : values) {
sum += value;
}
result += sum;
}
...
}
反例
public final class Accumulator {
private double result = 0.0D;
double sum = 0.0D;
public void addAll(@NonNull double[] values) {
for(double value : values) {
sum += value;
}
result += sum;
}
...
}
缩小变量的作用域,可以避免频繁的GC,减轻JVM的GC压力。
4. 直接赋值常量值,禁止声明新对象
正例
String s = "mua~";
反例
String s = new String("mua~");
直接赋值常量值,创建了一个对象引用,这个对象引用指向常量值。如果是声明新对象的话,则会在虚拟机内存中new一个对象,占用内存会更大。
5. 如果确定值无需修改,则定义为静态常量
正例
private static final long TIMEOUT = 5L;
反例
private final long TIMEOUT = 5L;
在《Java编程思想》对static的描述为:
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
其实
static
关键字的主要作用是为了节省内存。
6. 变量尽量定义在循环体内
正例