2013-09-27 63 views
2
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类是否被加载的类时,静态方法创建对象

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(“实体”),它会创建三个对象,两个对象(实体,单元)将在类加载到JVM时创建,而当我调用静态方法时会创建一个?

+0

哪三个对象在FactoryProducer.getFactory(“entities”)方法调用时创建? –

回答

2

所有方法只有在被调用时才会执行。不在课堂上加载。如果您想在加载类时执行某些操作,请使用静态初始化程序块。

当我打电话FactoryProducer.getFactory(“实体”),它会创建三个对象,两个对象(实体和单位),当类被加载到JVM将被创建,一个当我调用静态方法?

  • 的方法时,它被称为getFactory将只执行。不是在加载类时。
  • 当你经过"entities",第一if条件将是真实的,当它使用new LoadEntityFactory
  • else状态就不会真正调用,因此new UnitFactory不会被调用,而不是创建UnitFactory对象LoadEntityFactory将被实例化。
+0

你的意思是当一个类被加载时,静态方法不会初始化其中的任何内容? – beinghuman

+0

@Niks加载类时,不会调用静态方法。 –

+1

@PrasadKharkar。你以某种方式反过来解释这个问题。 –

相关问题