Verwenden der java.lang.Class
java.lang.Class ist eine der wichtigsten Klassen in Java, wird aber von Java-Programmierern selten wahrgenommen. Diese Klasse ist sehr nützlich, da sie über mehrere Methoden verfügt, wie z. B.: getClass(), forName() das zum Laden einer Klasse verwendet werden kann, und Sie können auch Oracle- und MySQL-Treiber laden. Die Class bietet auch Methoden wie Class.newInstance() mit dem Sie eine Instanz einer Klasse erstellen können, ohne die new(). Die java.lang.Class hat keine öffentlichen Konstruktoren, und seine Instanz wird von der JVM erstellt, wenn sie geladen wird. Das Objekt der Klasse Class wird auch verwendet, um Klassen, Aufzählungen, Schnittstellen und Anmerkungen in einer laufenden Java-Anwendung darzustellen. Die primitiven Typen byte, short, char, int, float, double und boolean werden durch Instanzen von java.lang.Class. Sie können die Instanz Class wie folgt entsprechend: int.class, float.class oder boolean.class. Diese Klasse wird auch verwendet, um die Instanz eines Arrays in Java darzustellen. Jedes Gemälde mit dem Dasselbe und dieselbe Dimension teilt sich die Dasselbe Instanz der Klasse Klasse. Eine weitere Verwendung des java.lang.Class bei der Implementierung des equals() um zu prüfen, ob zwei Objekte fällig sind Dasselbe type oder nicht.Das Objekt java.lang.Class wird jedes Mal von der JVM erstellt, die den Typ des Objekts beschreibt. Alle Instanzen derselben Klasse teilen sich dasselbe Objekt Class und Sie können das Objekt Class durch Aufruf der Methode getClass(). Diese Methode wird von der java.lang.Object.
Angenommen, wir haben in diesem Beispiel verschiedene Instanzen erstellt, um sie mit den folgenden zu vergleichen:
public static void main(String[] args) {Runtime:
String str1 = new String(), str2 = new String();
System.out.println(str1.getClass().getName());
System.out.println(str2.getClass().getName());
if(str1.getClass().equals(str2.getClass())){
System.out.println("str1 und str2 sind Instanzen derselben Klasse");
}else{
System.out.println("str1 und str2 sind Instanzen verschiedener Klassen");
}
Integer A = new Integer(1);
Boolescher Wert B = neuer Boolescher Wert(wahr);
System.out.println(A.getClass().getName());
System.out.println(B.getClass().getName());
if(A.getClass().equals( B.getClass())){
System.out.println("A und B sind Instanzen derselben Klasse");
}else{
System.out.println("A und B sind Instanzen verschiedener Klassen");
}
}
java.lang.StringWir benötigen die Methoden newInstance() und forName() da wir manchmal den Namen der instanziierten Klasse zur Laufzeit nicht kennen können, so dass diese Methoden die Dinge für uns einfacher machen.
java.lang.String
str1 und str2 sind Instanzen derselben Klasse
java.lang.Integer
java.lang.Boolean
A und B sind Instanzen verschiedener Klassen
try {Laufzeit:
/*newInstance() äquivalent zu new String()*/
String str2 = str1.getClass().newInstance();
System.out.println(str2.getClass().getName());
System.out.println(str2.getClass().getSimpleName());
System.out.println(str2.getClass().getCanonicalName());
} catch (InstantiationException e) {
// TODO Automatisch generierter catch-Block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Automatisch generierter catch-Block
e.printStackTrace();
}
java.lang.StringEs gibt andere Methoden, um den Typ der Klasse zu testen:
String
java.lang.String
isEnum(): gibt true zurück, wenn es sich bei dem Typ um eine Aufzählung handelt.
isArray(): gibt true zurück, wenn es sich bei dem Typ um ein Array handelt.
isInstance(Object o): gibt true zurück, wenn eine Klasse eine Instanz des o.
String str1 = new String();
String[] array = {"aa","bb","cc"};
String[] array2 = {"fd","be","ce"};
System.out.println(array.getClass().isArray()); true
System.out.println(array.getClass().isInstance(array2)); true
System.out.println(array.getClass().isLocalClass()); false
Abrufen der Konstruktoren, Schnittstellen und Methoden einer Klasse
Ein weiterer Vorteil der Verwendung von java.lang.Class ist, dass wir alle Listen von Konstruktoren, Attributen, Methoden und Schnittstellen mit den folgenden Methoden anzeigen können:java.lang.Class.getConstructors(): Gibt ein Array zurück, das alle Konstruktorobjekte enthält, die sich auf die öffentlichen Konstruktoren der Klasse beziehen. Ein Array der Größe 0 wird zurückgegeben, wenn die Klasse keine öffentlichen Konstruktoren hat oder wenn die Klasse ein Array ist.
java.lang.Class.getMethods(): gibt ein Array zurück, das alle Membermethoden der Klasse oder Schnittstelle enthält, einschließlich der in der Klasse oder Schnittstelle deklarierten Methoden oder der von einer übergeordneten Klasse und übergeordneten Schnittstellen geerbten Methoden. Ein Array der Größe 0 wird zurückgegeben, wenn die Klasse keine öffentliche Methode hat oder wenn die Klasse ein Array ist.
java.lang.Class.getInterfaces(): Diese Methode bestimmt, welche Schnittstellen durch eine Klasse implementiert oder durch dieses Objekt repräsentiert werden. Sie Gibt ein Array zurück, das alle Schnittstellen in der Klasse enthält, einschließlich der in der Klasse deklarierten oder von einer übergeordneten Klasse geerbten Schnittstellen. Ein Array der Größe 0 wird zurückgegeben, wenn die Klasse keine öffentliche Schnittstelle hat oder wenn es sich bei der Klasse um ein Array handelt.
Die Verwendung dieser drei Methoden ist einfach, wie im folgenden Code gezeigt:
java.lang.Class button = Class.class.forName("javax.swing.JButton");Das Ausführen dieses Codes führt zu einer langen Liste von Methoden der java.lang.String, also zeigen wir nur die Liste der Konstruktoren und Schnittstellen an:
System.out.println("Konstruktoren von "+button.getClass());
Konstrukteur > [] c = button.getClass().getConstructors();
for(int i=0; Ich< c. Länge; i++)
System.out.println(c[i]);
System.out.println("Schnittstellen von "+button.getClass());
java.lang.Class > [] Schnittstellen = button.getClass().getInterfaces();
for(int i=0; Ich< interfaces.length; i++)
System.out.println(interfaces[i]);
System.out.println("Methoden von "+button.getClass());
Method[] m = button.getClass().getMethods();
for(int i=0; Ich< m.Länge; i++)
System.out.println(m[i]);
javax.swing.JButtonReferences:
javax.swing.JButton
interface java.io.Serializable
interface java.lang.reflect.GenericDeclaration
interface java.lang.reflect.Type
interface java.lang.reflect.AnnotatedElement
< br />Class Methoden javax.swing.JButton
public static java.lang.Class java.lang.Class.forName(java.lang.String,boolean,java.lang.ClassLoader) wirft java.lang.ClassNotFoundException
public static java.lang.Class java.lang.Class.forName(java.lang.String) wirft java.lang.ClassNotFoundException
public native boolean java.lang.Class.isAssignableFrom(java.lang.Class)
public native java.lang.Class java.lang.Class.getSuperclass()
public native java.lang.Class java.lang.Class.getComponentType()
public java.lang.String java.lang.Class.toString()
public native boolean java.lang.Class.isInstance(java.lang.Object)
public native int java.lang.Class.getModifiers()
public native boolean java.lang.Class.isInterface()
public native boolean java.lang.Class.isArray()
public native boolean java.lang.Class.isPrimitive()
public java.lang.String java.lang.Class.getName()
public java.lang.Class java.lang.Class.asSubclass(java.lang.Class)
public java.lang.Object java.lang.Class.cast(java.lang.Object)
public java.lang.Class[] java.lang.Class.getClasses()
public java.lang.reflect.Field java.lang.Class.getField(java.lang.String) wirft java.lang.NoSuchFieldException,java.lang.SecurityException
public java.lang.reflect.Field[] java.lang.Class.getFields() wirft java.lang.SecurityException
public java.lang.reflect.Method java.lang.Class.getMethod(java.lang.String,java.lang.Class[]) wirft java.lang.NoSuchMethodException,java.lang.SecurityException
public java.lang.reflect.Method[] java.lang.Class.getMethods() wirft java.lang.SecurityException
public java.lang.Package java.lang.Class.getPackage()
public java.net.URL java.lang.Class.getResource(java.lang.String)
public native java.lang.Object[] java.lang.Class.getSigners()
public boolean java.lang.Class.isAnnotation()
public boolean java.lang.Class.isEnum()
public boolean java.lang.Class.isLocalClass()
public boolean java.lang.Class.isSynthetic()
public java.lang.Object.java.lang.Class.newInstance() wirft java.lang.InstantiationException, java.lang.IllegalAccessException
public boolean java.lang.Class.desiredAssertionStatus()
public java.lang.annotation.Annotation java.lang.Class.getAnnotation(java.lang.Class)
public java.lang.annotation.Annotation[] java.lang.Class.getAnnotations()
public java.lang.String java.lang.Class.getCanonicalName()
public java.lang.ClassLoader java.lang.Class.getClassLoader()
public java.lang.reflect.Constructor java.lang.Class.getConstructor(java.lang.Class[]) wirft java.lang.NoSuchMethodException,java.lang.SecurityException
public java.lang.reflect.Constructor[] java.lang.Class.getConstructors(] java.lang.Class.getConstructors() wirft java.lang.SecurityException
public java.lang.annotation.Annotation[] java.lang.Class.getDeclaredAnnotations()
public java.lang.Class[] java.lang.Class.getDeclaredClasses() wirft java.lang.SecurityException
public java.lang.reflect.Constructor java.lang.Class.getDeclaredConstructor(java.lang.Class[]) wirft java.lang.NoSuchMethodException,java.lang.SecurityException
public java.lang.reflect.Constructor[] java.lang.Class.getDeclaredConstructors(] java.lang.Class.getDeclaredConstructors() wirft java.lang.SecurityException
public java.lang.reflect.Field java.lang.Class.getDeclaredField(java.lang.String) wirft java.lang.NoSuchFieldException,java.lang.SecurityException
public java.lang.reflect.Field[] java.lang.Class.getDeclaredFields() wirft java.lang.SecurityException
public java.lang.reflect.Method java.lang.Class.getDeclaredMethod(java.lang.String,java.lang.Class[]) wirft java.lang.NoSuchMethodException,java.lang.SecurityException
public java.lang.reflect.Method[] java.lang.Class.getDeclaredMethods() wirft java.lang.SecurityException
public native java.lang.Class java.lang.Class.getDeclaringClass()
public java.lang.Class java.lang.Class.getEnclosingClass()
public java.lang.reflect.Constructor java.lang.Class.getEnclosingConstructor()
public java.lang.reflect.Method java.lang.Class.getEnclosingMethod()
public java.lang.Object[] java.lang.Class.getEnumConstants()
public java.lang.reflect.Type[] java.lang.Class.getGenericInterfaces()
public java.lang.reflect.Type java.lang.Class.getGenericSuperclass()
public native java.lang.Class[] java.lang.Class.getInterfaces()
public java.security.ProtectionDomain java.lang.Class.getProtectionDomain()
public java.io.InputStream java.lang.Class.getResourceAsStream(java.lang.String)
public java.lang.String java.lang.Class.getSimpleName()
public java.lang.reflect.TypeVariable[] java.lang.Class.getTypeParameters()
public boolean java.lang.Class.isAnnotationPresent(java.lang.Class)
public boolean java.lang.Class.isAnonymousClass()
public boolean java.lang.Class.isMemberClass()
public final void java.lang.Object.wait(long,int) wirft java.lang.InterruptedException
public final native void java.lang.Object.wait(long) wirft java.lang.InterruptedException
public final void java.lang.Object.wait() java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
Javadoc: java.lang.Class