• 《Effective Java》 读书笔记(六)避免创建不必要的对象


    java 有很多修饰类的属性的关键字:常用的static,final

    说说final和static吧,平时在编程的时候,这两个关键字很多时候都觉得可有可无,最多的时候就是他们俩同时出现----定义常量的时候,其他时候:1.感觉没有对程序正常运行有任何影响 2.不使用这两个关键字看起来也没什么毛病.

    这就是程序员和工程师的区别吧,迈出这一步,写出精品代码:

    1.定义一个类的属性的时候,认真考虑这个属性是可变的还是所有对象通用的。将所有对象通用的属性添加static关键字。

    下面来看一个实例:

    判断一个字符串是否为一个有效的罗马数字:

    static boolean isRomanNumeral(String s) {
        return s.matches("^(?=.)M*(C[MD]|D?C{0,3})"
                + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
    }

    程序看起来很简洁,但是每次调用这个方法都会创建一个新的Pattern实例,并且只使用一次。

    修改为以下版本:

    public class RomanNumerals {
        private Pattern roman= Pattern.compile(
                "^(?=.)M*(C[MD]|D?C{0,3})"
                + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
    
        static boolean isRomanNumeral(String s) {
            return roman.matcher(s).matches();
        }
    }

    Effective Java 中提到,在作者电脑上,最开始的方案 输入一个8个字符的字符串需要1.1微妙,但是给roman属性加上static final字段后,输入8个字符字需要0.17微秒,速度提高了6.5倍。

    2.优先使用基本类型而不是装箱的基本的类型,装箱的基本的类型是一个对象,每次使用可能都会新建一个对象。

    总之,当程序能够重用一个现有的对象的时候,不要创建一个新的对象,但是, 不能过分的追求不创建新的对象,因为创建一个对象和独享的垃圾回收是非常廉价的,相反,如果自己维护自己的对象池,将会使得程序非常麻烦。

    考虑一个度:就好Effective Java 中提到:当你应该重用一个现有的对象的时候,不要创建一个对象,当你应该创建一个新的对象的时候,不要重复使用现有的对象。

  • 相关阅读:
    java RSA 加签验签【转】
    json遍历 分别使用【原】
    oracle 递归和connect by【转】
    css before after基本用法【转】
    Java Web基础——Action+Service +Dao三层的功能划分
    JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
    UUID
    在ssh框架中service-action-jsp-formbeam-dao的调用顺序
    Singleton模式(单例模式)
    真正理解、区分Action,Service和Dao功能
  • 原文地址:https://www.cnblogs.com/dengchengchao/p/9042557.html
Copyright © 2020-2023  润新知