如何将()添加到扩展arraylist的静态类?

时间:2014-09-06 19:14:28

标签: java arraylist static

所以我认为我一直在尝试做不可能的事情,我只是想确保我是对的。

ArrayList的add()方法不是静态的,因此必须实例化ArrayList的任何子类才能添加任何东西,对吗?

因此,如果我想要一个扩展ArrayList的类来提供一些管理一组对象的新函数,那么我必须实际创建一个子类的实例吗?

如果是这种情况,是否可以通过静态初始化程序对其进行实例化,如下所示:

static ArrayList<object> manager = new ArrayList<object>();

即使变量是静态的,这会被视为在类加载时创建的实例吗?我怎么知道它何时被创建,所以我可以确保引用管理器的代码不会出现问题?我必须在代码的开头只实例化一次,因为随着时间的推移,我想多次使用相同的ArrayList(添加,删除等)。

感谢您的任何澄清。

2 个答案:

答案 0 :(得分:1)

打印引用变量在内存中的位置,这将告诉您JVM已创建它。

这样做:

system.out.println(manager);

这将在内存中打印对象位置,这将告诉您它已创建。 希望这可以帮助。 P.S在乍一看,记忆中物体位置的显示可能看起来像很多垃圾,但它确实有意义。

答案 1 :(得分:1)

如果您想确保它不为空,您可以这样做:

private static final ArrayList<Object> manager;
static {
    //Static blocks are automatically called
    manager = new ArrayList<Object>();
    //You can use any of the needed methods here as well, or even add things to manager.
    //Note that this is basically the same as assigning it beforehand, and certainly not required.
    //But it does allow, say, loading it from a file or however you need it.
}

你可以或者创建一个检查实例是否为null的方法,如果是,则创建一个实例:

private static void instIfNull() {
    if (manager == null) {
        manager = new ArrayList<object>();
    }
}

然后你会在所有本地函数中调用它。