title: return Class.forName instead of new instance
body: <p>I've found this code inside an old project</p>
  
  <pre><code>public abstract class AireBatchDaoFactory {
       public static final String ORACLE_FACTORY = "airebatch.oracle.OracleDaoFactory";
       public static AireBatchDaoFactory getFactory(String factory) throws SQLException
       {
          try {
             return (AireBatchDaoFactory) Class.forName(factory).newInstance();
          } 
          catch (Exception e) {
              throw new SQLException("error msg");
          }
       }
       public abstract AireBatchDao getAireBatchDao() throws SQLException;}
  </code></pre>
  
  <p>I would like to understand the concrete difference beetween</p>
  
  <pre><code>return (AireBatchDaoFactory) Class.forName(factory).newInstance();
  </code></pre>
  
  <p>and </p>
  
  <pre><code>return new AireBatchDaoFactory();
  </code></pre>