静态方法是否在加载类时创建对象

时间:2013-09-27 10:13:15

标签: java static-methods

public class FactoryProducer {

    public static AbstractFactory getFactory(String choice){

        if(choice.equalsIgnoreCase("ENTITIES")){
            System.out.println("entities factory created with out calling");
             return new LoadEntityFactory();
          } 
          elseif(choice.equals.IgnoreCase("UNITS"))
              return new UnitFactory();


       }


    }

LoadEntity Class

public class LoadEntityFactory extends AbstractFactory {

    @Override
    public loadEntities getLoadEntity(String entity) {
        if(entity==null){
            return null;
        }else if (entity.equalsIgnoreCase("categories")) {

            return new LoadCategoryEntity();
        }
        else if (entity.equalsIgnoreCase("books")) {
            return new LoadBookEntity();
        }
        else if (entity.equalsIgnoreCase("author")) {
            return new LoadAuthorEntity();
        }
        else if (entity.equalsIgnoreCase("publisher")) {
            return new LoadPublisherEntity();
        }

        return null;
    }

}

现在我的问题当我调用FactoryProducer.getFactory(“entities”)时,是否会创建三个对象,当类加载到JVM中时会创建两个对象(实体和单元),而当我调用静态方法时会创建一个对象(实体和单元)?

1 个答案:

答案 0 :(得分:2)

所有方法仅在调用时执行。不上课加载。如果要在加载类时执行某些操作,请使用静态初始化程序块。

  

当我调用FactoryProducer.getFactory(" entities")时,它会创建三个对象,当类加载到JVM时会创建两个对象(实体和单元),而当我调用静态方法时会创建一个对象(实体和单元) ?

  • 方法getFactory仅在调用时执行。不是在加载类时。
  • 当您通过"entities"时,第一个if条件将为true,并且LoadEntityFactory将在使用new LoadEntityFactory
  • 调用时进行实例化
  • else条件不成立,因此不会调用new UnitFactory并且不会创建UnitFactory对象。