Java对象初始化多次在一个类中或只是一次?

时间:2012-09-04 07:51:36

标签: java class instance

我想知道什么是类初始化的最佳实践,

我的意思是我应该在顶级一级Customer c = new Customer();初始化一个类,并在类中的任何地方使用它:

Tools tools = new Tools();
    public boolean doCIdCheck(int cId) {
        final Iterator<Customer> cursor = tools.Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }

或者我应该在需要的地方使用new Customer().checkCId();

    public boolean doCIdCheck(int cId) {
        final Iterator<Customer> cursor = new Tools().Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }

或者最好让每个函数/方法都有自己的类实例:

    public boolean doCIdCheck(int cId) {
        Tools tools = new Tools();
        final Iterator<Customer> cursor = tools.Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }

4 个答案:

答案 0 :(得分:1)

从您的示例中看,最好的方法是将Tools的共享方法和成员声明为static而不是创建实例,并将其称为

final Iterator<Customer> cursor = Tools.Customers.iterator();

这当然假设您不会在Tools中存储可能导致冲突的数据,在这种情况下,首选创建多个实例。

答案 1 :(得分:0)

这取决于您的要求。例如,如果您不希望方法doCIdCheck之外的类工具,则首选第3个选项。

答案 2 :(得分:0)

您可以覆盖equals()方法,以检查cidCustomer的相等性。 Example

然后,您可以使用Collection方法的contains()代替那些循环

所以你的doCIdCheck方法看起来像

public boolean doCIdCheck(Customer cId) {
    Tools tools = new Tools();// I don't know if you are initializing list
                                // in Tools constructor or not but it should
                                // be initialized in constructor or in declaration
    return tools.customers.contains(cId);
}

答案 3 :(得分:0)

考虑到在类的每个方法中都需要该Object,并且只考虑内存管理和处理器消耗:

1.选项1(保持全局变量随处可访问):如果您拥有大量这些对象,内存使用量将会增加,因为您将为每个工具实例存储额外的客户对象。这将获得处理器速度,因为您不必为每种方法创建和销毁客户对象。

2.选项2 :(仅在方法内保持Customer对象可访问):内存使用率将降低,应用程序将变得更加处理器,因为每次访问方法时都会创建和销毁对象。

IMO,如果你实例化大量的工具对象,那么选择其他选项2,如果存在工具对象,则只需少量选择1