class signifie "class". C'est une classe en java. Elle définit l'implémentation d'une classe spécifique. Elle existe dans le package java.lang. Son constructeur est privé et chargé par la JVM (class device). pour créer un objet Class, qui peut être obtenu via la méthode getClass().
class est une classe qui existe dans le package java.lang Son constructeur est privé et l'objet Class est créé par la JVM (chargeur de classe). peut obtenir l'objet Class via la méthode getClass().
/* * 私有构造函数,使得只有jvm可以创建该类的对象,这个私有构造函数还可以防止通过默认构造函数创建类对象 */ private Class(ClassLoader loader) { // 初始化final变量ClassLoader classLoader = loader; }
La classe Class est une implémentation qui définit une classe spécifique en langage Java. La définition d'une classe inclut les variables membres, les méthodes membres, les interfaces implémentées par la classe et la classe parent de la classe. Les objets de la classe Class sont utilisés pour représenter les classes et les interfaces dans l'application Java en cours d'exécution. Par exemple : chaque tableau appartient à un objet Class et tous les tableaux avec le même type d'élément et la même dimension partagent un objet Class. Les types Java de base (boolean, byte, char, short, int, long, float et double) et les types void peuvent également être représentés sous forme d'objets Class.
Objet Classe, grâce auquel nous pouvons obtenir les attributs, méthodes, etc. de la classe créée.
Le rôle de la classe Class
(1) Obtenir le type d'attributs dans la classe
( 2) Récupérer le nom de l'attribut dans la classe
(3) Récupérer la méthode de la classe
(4) Récupérer la classe de base de la classe, etc.
(5) Sur la base de ce qui précède, vous pouvez l'utiliser pour compléter la réflexion
Méthode principale de la classe
1 méthode forName
Entrez le. nom de chemin complet de la classe qui doit être chargé et obtenir l'objet Class de la classe
Méthode 2.newInstance
public T newInstance() throws InstantiationException, IllegalAccessException { if (System.getSecurityManager() != null) { checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), false); } // NOTE: 下面的编码可能不是严格符合当前的java内存模型 // 寻找构造器 if (cachedConstructor == null) { if (this == Class.class) { throw new IllegalAccessException( "Can not call newInstance() on the Class for java.lang.Class" ); } try { Class<?>[] empty = {}; //获取无参构造器,如果没有就抛出异常,说明这个方法只适用于有无参构造函数的类 final Constructor<T> c = getConstructor0(empty, Member.DECLARED); // 设置构造器允许访问 java.security.AccessController.doPrivileged( new java.security.PrivilegedAction<Void>() { public Void run() { c.setAccessible(true); return null; } }); cachedConstructor = c; } catch (NoSuchMethodException e) { throw (InstantiationException) new InstantiationException(getName()).initCause(e); } } Constructor<T> tmpConstructor = cachedConstructor; // 安全检查 int modifiers = tmpConstructor.getModifiers(); if (!Reflection.quickCheckMemberAccess(this, modifiers)) { Class<?> caller = Reflection.getCallerClass(); if (newInstanceCallerCache != caller) { Reflection.ensureMemberAccess(caller, this, null, modifiers); newInstanceCallerCache = caller; } } // 执行无参构造函数创建实例对象 try { return tmpConstructor.newInstance((Object[])null); } catch (InvocationTargetException e) { Unsafe.getUnsafe().throwException(e.getTargetException()); // Not reached return null; } }
3.isInstance (méthode native)
Utilisé pour déterminer si le paramètre d'entrée est la classe d'implémentation de l'objet Class actuel (sous-classe)
public class TestInfo { static { System.out.println("我是谁"); } public TestInfo(){ System.out.println("我是构造函数"); } public String test="测试属性"; public static void main(String[] args) { TestClass info=new TestClass(); //返回结果是true因为info是子类的对象System.out.println(TestInfo.class.isInstance(info)); } public static class TestClass extends TestInfo{ }}
4.getName, getTypeName, getCanonicalName, getSimpleName
public static void main(String[] args) { System.out.println(TestClass.class.getTypeName()); System.out.println(TestClass.class.getCanonicalName()); System.out.println(TestClass.class.getSimpleName()); System.out.println(TestClass.class.getName()); System.out.println("-------------------------------------------------------"); System.out.println(TestClass[].class.getTypeName()); System.out.println(TestClass[].class.getCanonicalName()); System.out.println(TestClass[].class.getSimpleName()); System.out.println(TestClass[].class.getName()); } public static abstract class TestClass<T extends TestInfo, String> extends TestInfo implements Aware, Comparable<Integer> { public abstract void test(); }
Résultats de sortie
com.hikvision.test.abc.TestInfo$TestClass com.hikvision.test.abc.TestInfo.TestClass TestClass com.hikvision.test.abc.TestInfo$TestClass ------------------------------------------------------- com.hikvision.test.abc.TestInfo$TestClass[] com.hikvision.test.abc.TestInfo.TestClass[] TestClass[] [Lcom.hikvision.test.abc.TestInfo$TestClass;
5.getClassLoader
Obtenir le chargeur de classe de la classe actuelle
6.getTypeParameters
Obtenir le tableau de paramètres génériques dans la classe générique.
7.getSuperclass et getGenericSuperclass
obtiennent tous deux des informations sur la classe parent, mais cette dernière apportera des paramètres génériques
8.getInterfaces et getGenericInterfaces
Obtenez l'interface tableau implémenté par l'objet Class actuel, mais ce dernier apportera les paramètres génériques de l'interface, tels que
public static void main(String[] args) { System.out.println(TestClass.class.getInterfaces()[1]); } public static abstract class TestClass<T extends TestInfo,String> extends TestInfo implements Aware,BeanFactory { public abstract void test(); }
Output result
interface org.springframework.beans.factory.BeanFactory java.lang.Comparable<java.lang.Integer>
9.isAssignableFrom(native method)
Cette méthode est assez anti-humaine. Les paramètres d'entrée entre parenthèses représentent la classe parent de l'objet Class actuel ou du même objet.
//这样返回的是false System.out.println(TestClass.class.isAssignableFrom(TestInfo.class));
10.isInterface (méthode native)
Déterminer s'il s'agit d'une interface
11.isArray (méthode native)
s'il s'agit d'un tableau
12.isPrimitive (méthode native)
est utilisé pour déterminer si cet objet Class est un type de base, tel que int, byte, char, etc.
13. isAnnotation
détermine si l'objet Class est une annotation
14.getComponentType
Si l'objet Class actuel est un tableau, obtenez le type d'élément dans le tableau
15.getModifiers
Récupérer les attributs Ou la valeur d'énumération correspondant au modificateur devant la méthode
16.getDeclaringClass
Récupérer la classe à laquelle la méthode ou l'attribut appartient, ou obtenez la classe dont hérite l'objet Class actuel
17 .getSimpleName
Le nom de classe de l'objet Class
18.getClasses, getDeclaredClasses
(1) Obtenez la classe interne modifiée publiquement dans l'objet Class
(2) Obtenez la classe interne dans l'objet Class, les membres hérités ne sont pas inclus
19.getFields , getField, getDeclaredFields
(1) Obtenez le champ d'attribut public modifié
(2) Recherchez le domaine d'attribut correspondant
en fonction du nom d'attribut saisi (3) Obtenez le domaine d'attribut dans l'objet Class
20.getMethods, getMethod, getDeclaredMethods
( 1) Obtenez la méthode publique modifiée
(2) Trouvez la méthode correspondante
selon le nom de la méthode d'entrée et le type de paramètre (3) Récupérez la méthode dans l'objet Class
21.getConstructors, getConstructor, getDeclaredConstructors
(1) Récupérez le constructeur public modifié
(2) Trouvez le constructeur correspondant
(3) Obtenez le constructeur dans l'objet ClassCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!