Class.forName(strClassName)只是返回strClassName的Class,
但是类装载器还是要装载该类,于是strClassName里的static部块都要执行,但没生成实例。
而Class.forName(strClassName).newInstance()
就相当于new strClassName();//strClassName()要改成你那个Class所对应的类。
那个所说的不写有一个例子:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
因为只须执行SQLServerDriver中的静态方法,所以没必要生成实例。

解决方案 »

  1.   

    应该只须执行SQLServerDriver中的静态块
    如sun.jdbc.odbc.JdbcOdbcDriver类static 中的内容
    也就是Class.ForName("sun.jdbc.odbc.JdbcOdbcDriver");所执行的部分
        static 
        {
            if(JdbcOdbcObject.isTracing())
                JdbcOdbcObject.trace("JdbcOdbcDriver class loaded");
            JdbcOdbcDriver jdbcodbcdriver = new JdbcOdbcDriver();
            try
            {
                DriverManager.registerDriver(jdbcodbcdriver);
            }
            catch(SQLException sqlexception)
            {
                if(JdbcOdbcObject.isTracing())
                    JdbcOdbcObject.trace("Unable to register driver");
            }
        }