关注对象的new

简介:

对象创建得不好,会引发OOM,和常见的代码难维护问题。

优先通过静态方法替换构造器

通过静态方法而不是构造器的优势

Maps.newHashMap();
public static <K, V> HashMap<K, V> newHashMap() {
    return new HashMap<K, V>();
  }

1:有方法名可以用来区分场景(valueof,of,getInstance,newInstance,getXXX,newXXX)
2:帮助复用对象(valueof,of)和单例(getInstance)
3:通过声明接口可以返回任意实现类
4:减少多余的范型声明

劣势
1:静态方法往往配合私有构造器,导致类本身无法extends
2:调用的时候没有语法支持,无法快速识别这是一个构造方法

Builder

当有多个构造器的常见的时候,用Builder模式。

public class Person {
    private final String name;
    private final int age;

    private Person(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
    }

    public static class Builder{

        private   String name;
        private   int age;
        public Builder(String name){
            this.name=name;
        }
        public Builder age(int age){
            this.age = age;
            return this;
        }

        public Person build(){
            return new Person(this);
        }
    }
}

复用对象

1:可以“string”的时候,不要new String(“string”)
2:对象是不可变是,能不new 的尽量共同同一个。参考数据库连接池
3:能long的时候,不要用Long,避免触发装箱拆箱产生多余消耗
4:当对象是pojo是,不要为了复用反复拷贝。

对象无用的时候,记得消除对象的引用

array[i] = null;可以让gc有效

单例的创建

1:final static instance配合private 构造函数{throw new Runtime();}
2:单个的枚举本身
3:扩展的provider 模式,如guice ,spring,guava等包装过的单例

目录
相关文章
|
4月前
|
C++
C++中的对象
C++中的对象
45 2
|
4月前
|
测试技术 索引
v-for 与对象
v-for 与对象
|
11月前
|
前端开发
67 # 对象的处理
67 # 对象的处理
28 0
|
12月前
|
存储 程序员 编译器
C++都有对象了,你还没有吗?
C++都有对象了,你还没有吗?
71 0
|
Java 开发者 容器
你有对象吗?
你有对象吗?
88 0
|
存储 JSON Java
谈“对象“
谈“对象“
|
存储 编译器 C语言
我现在必须new一个对象!!!
C++内存管理,手动开辟空间,我现在必须new一个对象!!!
81 0
我现在必须new一个对象!!!
|
算法 Java
对象的比较
本篇文章是对Java中一些常见的比较的总结,在涉及到比较方面,有元素的比较与对象的比较,下边博主来带领大家一起了解这些比较方式。
87 0