美文网首页java代码和性能优化
码神是如何炼成的?——记十个java代码优化之道

码神是如何炼成的?——记十个java代码优化之道

作者: a847c1ac3b3f | 来源:发表于2018-12-11 11:08 被阅读29次

    大部分程序员技术平平,只能称之为码农

    还有一小部分程序员,代码敲得一流,称之为大神,也叫码神

    你想成为码神吗!认真往下看吧!

    (1)对资源的close()建议分开操作

    意思是,比如我有这么一段代码:

    try{

    XXX.close();

    YYY.close();

    }catch (Exception e)

    {

    }建议修改为:

    try{

    XXX.close();

    }catch (Exception e)

    {

    }try{

    YYY.close();

    }catch (Exception e)

    {

    }

    虽然有些麻烦,却能避免资源泄露。我们想,如果没有修改过的代码,万一XXX.close()抛异常了,那么就进入了catch块中了,YYY.close()不会执行,YYY这块资源就不会回收了,一直占用着,这样的代码一多,是可能引起资源句柄泄露的。而改为下面的写法之后,就保证了无论如何XXX和YYY都会被close掉

    (2)字符串变量和字符串常量equals的时候将字符串常量写在前面

    这是一个比较常见的小技巧了,如果有以下代码:

    String str = “123”;if (str.equals(“123”)){ …} 建议修改为:

    String str = “123”;if (“123”.equals(str)){ …} 这么做主要是可以避免空指针异常

    (3)使用带缓冲的输入输出流进行IO操作

    带缓冲的输入输出流,即BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,这可以极大地提升IO效率

    (4)循环内不要不断创建对象引用

    例如:

    for (int i = 1; i <= count; i++){ Object obj = new Object(); }

    这种做法会导致内存中有count份Object对象引用存在,count

    很大的话,就耗费内存了,建议为改为:

    Object obj = null;for (int i = 0; i <= count; i++)

    {

    obj = new Object();

    }

    这样的话,内存中只有一份Object对象引用,每次new Object()的时候,Object对象引用指向不同的Object罢了,但是内存中只有一份,这样就大大节省了内存空间了。

    (5)所有重写的方法必须保留@Override注解

    这么做有三个原因:

    1.清楚地可以知道这个方法由父类继承而来

    2.getObject()和get0bject()方法,前者第四个字母是"O",后者第四个子母是"0",加了@Override注解可以马上判断是否重写成功

    3.在抽象类中对方法签名进行修改,实现类会马上报出编译错误

    (6)顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList

    这个,理解ArrayList和LinkedList的原理就知道了

    (7)long或者Long初始赋值时,使用大写的L而不是小写的l,因为字母l极易与数字1混淆,这个点非常细节,值得注意

    (8)不要让public方法中有太多的形参

    public方法即对外提供的方法,如果给这些方法太多形参的话主要有两点坏处:

    违反了面向对象的编程思想,Java讲求一切都是对象,太多的形参,和面向对象的编程思想并不契合

    参数太多势必导致方法调用的出错概率增加

    至于这个"太多"指的是多少个,3、4个吧。比如我们用JDBC写一个insertStudentInfo方法,有10个学生信息字段要插如Student表中,可以把这10个参数封装在一个实体类中,作为insert方法的形参

    (9)不捕获Java类库中定义的继承自RuntimeException的运行时异常类

    异常处理效率低,RuntimeException的运行时异常类,其中绝大多数完全可以由程序员来规避,比如:

    ArithmeticException可以通过判断除数是否为空来规避

    NullPointerException可以通过判断对象是否为空来规避

    IndexOutOfBoundsException可以通过判断数组/字符串长度来规避

    ClassCastException可以通过instanceof关键字来规避

    ConcurrentModificationException可以使用迭代器来规避

    (10)将常量声明为static final,并以大写命名

    这样在编译期间就可以把这些内容放入常量池中,避免运行期间计算生成常量的值。另外,将常量的名字以大写命名也可以方便区分出常量与变量

    声明:本文内容来源于网络,如有侵权请联系删除

    胖胖爱学习爱分享,每日更新,期待你的关注,期待与你一起进步!

    相关文章

      网友评论

        本文标题:码神是如何炼成的?——记十个java代码优化之道

        本文链接:https://www.haomeiwen.com/subject/hwjshqtx.html