Maison > Java > javaDidacticiel > le corps du texte

Que signifie la classe en Java ?

little bottle
Libérer: 2020-09-16 17:27:34
original
26540 Les gens l'ont consulté

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().

Que signifie la classe en Java ?

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;
    }
Copier après la connexion

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.

Que signifie la classe en Java ?

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;
        }
    }
Copier après la connexion

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{

    }}
Copier après la connexion

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();
    }
Copier après la connexion

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;
Copier après la connexion

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();
    }
Copier après la connexion

Output result

interface org.springframework.beans.factory.BeanFactory
java.lang.Comparable<java.lang.Integer>
Copier après la connexion

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));
Copier après la connexion

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 Class

Ce 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal