Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Mit [JAPI]Class#forName(java.lang.String)[/JAPI] wird die angegebene Klasse initialisiert und zurückgegeben. Nun, über einen String ist das ja ein wenig blöd, wenn der Klassenbezeichner nicht erst dynamisch erzeugt werden muss, sondern eben statisch vorliegt.
Eine Möglichkeit wäre, den String nicht hartcodet drin stehen zu haben, sondern ihn sich über den Namen des Klassenobjekts zu holen:
Code:
Class.forName(Test.class.getName());
Ändert aber nichts daran, dass es über einen String geht und eine Exception abzufangen ist.
Geht das nicht direkt mit dem Klassenobjekt? Habe in [JAPI]Class[/JAPI] und im [JAPI]ClassLoader[/JAPI] nichts gefunden.
Im Prinzip habe ich kein richtiges Ziel. Ich habe mich nur gewundert, wieso man bei JDBC die Treiber-Klasse immer so initialisiert hat. Dann habe ich rumprobiert und bemerkt, dass ich keinen Weg finde.
Also als ein konkretes Beispiel: Wie lade ich (vor JDBC 4.0) einen DB-Treiber ohne
Stimmt, Asche auf mein Haupt: in der Doku zu Class.forName steht das.
Die JLS ist da leider nicht ganz so eindeutig:
A class or interface type T will be initialized immediately before the first occurrence of any one of the following:
T is a class and an instance of T is created.
T is a class and a static method declared by T is invoked.
A static field declared by T is assigned.
A static field declared by T is used and the field is not a constant variable (§4.12.4).
T is a top-level class, and an assert statement (§14.10) lexically nested within T is executed.
Invocation of certain reflective methods in class Class and in package java.lang.reflect also causes class or interface initialization. A class or interface will not be initialized under any other circumstance.
Ich habe mich nur gewundert, wieso man bei JDBC die Treiber-Klasse immer so initialisiert hat. Dann habe ich rumprobiert und bemerkt, dass ich keinen Weg finde.
Du kannst nicht davon ausgehen, dass die Treiber zur Kompilierungszeit bekannt sind. Ich hab das auch schon in eine Config ausgelagert. Immerhin gehört der Datenbank- und somit der Treibertyp IMHO zu den Verbindungseinstellungen.