Java: Class.Load? - PullRequest
       17

Java: Class.Load?

0 голосов
/ 24 апреля 2011

Я довольно запутался насчет Class.forName в Java. как объяснить, что Class.forName с точки зрения C #?

вариант использования: java.lang.Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");

Ответы [ 2 ]

3 голосов
/ 24 апреля 2011

Class.forName возвращает экземпляр объекта Class.Класс эквивалентен объекту класса c #.

Class.forName заставляет классы загружаться, если они еще не были загружены.В рамках процесса загрузки класса вызываются все статические блоки, определенные в классе.Статический блок выглядит так:

class Foo {
    static {
         System.out.println("loaded Foo");
    }
}

//running this will print "loaded Foo"
Class.forName("Foo");

Статические блоки вызываются только один раз, при первой загрузке класса, поэтому повторный вызов Class.forName ("Foo") вызовет только "загруженный Foo"напечатан один раз.Создание нового экземпляра Foo также приведет к загрузке класса, если он еще не был загружен.

Обычно драйверы JDBC регистрируют себя, вызывая DriverManager.registerDriver () встатический блок, поэтому при вызове Class.forName () загружается драйвер.

1 голос
/ 24 апреля 2011

Вы можете использовать java.lang.Class.forName, когда вы хотите создать экземпляр объекта в Java, просто указав имя объекта в виде строки.

Это похоже на использование Activator.CreateInstance (objectType) в c #.

Для получения дополнительной информации читайте http://java.sun.com/developer/technicalArticles/ALT/Reflection/ и http://msdn.microsoft.com/en-us/library/d49ss92b(v=VS.71).aspx

...