Heim > Java > javaLernprogramm > Hauptteil

Detaillierte Einführung in die Wissenszusammenfassung zum Java-Reflexionsmechanismus

黄舟
Freigeben: 2017-03-18 11:23:02
Original
1357 Leute haben es durchsucht

Der Reflexionsmechanismus besteht darin, dass Sie im laufenden Zustand alle Eigenschaften und Methoden dieser Klasse kennen und jede ihrer Methoden und Eigenschaften aufrufen können Informationen und die Funktion des dynamischen Aufrufs der Objektmethoden werden als Reflexionsmechanismus der Java-Sprache bezeichnet. [Übersetzt aus offiziellen Dokumenten]

In diesem Artikel wird das Wissen der Reflexion unter folgenden Aspekten vorgestellt:

1. Was ist Klasse

In der objektorientierten Welt ist alles ein Objekt. Klassen sind Objekte und Klassen sind Instanzobjekte der Klasse java.lang.Class. Darüber hinaus kann die Klassenklasse nur von der Java Virtual Machine neu sein. Jede Klasse ist ein Instanzobjekt der Class-Klasse. Dieses Instanzobjekt hat drei Ausdrücke:

public class User{
}

public class ClassTest{
User u=new User();
 //方式1:
 Class c1=User.class;
//方式2:
Class c2=u.getClass();
//方式3:
Class c3=Class.forName("com.forezp.User");

//可以通过类的类型创建该类的实例对象
User user=(User)c1.newInstance();
}
Nach dem Login kopieren

2. Dynamisches Laden der Klasse

Class.forName (vollständiger Name der Klasse); stellt aber auch dynamisch geladene Klassen dar. Zur Kompilierungszeit geladene Klassen werden statisch geladen, und zur Laufzeit geladene Klassen werden dynamisch geladen.

3. Methodeninformationen abrufen

Grundlegender Datentyp, void-Schlüsselwort sind Instanzen der Klasse class; Sie können den Namen der Klasse über getame(); ).

Class c1=String.class;
Class c2=int.class;
Class c3=void.class;
System.out.println(c1.getName());
System.out.println(c2.getSimpleName());
Nach dem Login kopieren

Alle Methoden der Klasse abrufen und ausdrucken:

public static void printClassInfo(Object object){
        Class c=object.getClass();
        System.out.println("类的名称:"+c.getName());

        /**
         * 一个成员方法就是一个method对象
         * getMethod()所有的 public方法,包括父类继承的 public
         * getDeclaredMethods()获取该类所有的方法,包括private ,但不包括继承的方法。
         */
        Method[] methods=c.getMethods();//获取方法
        //获取所以的方法,包括private ,c.getDeclaredMethods();

        for(int i=0;i<methods.length;i++){
            //得到方法的返回类型
            Class returnType=methods[i].getReturnType();
            System.out.print(returnType.getName());
            //得到方法名:
            System.out.print(methods[i].getName()+"(");

            Class[] parameterTypes=methods[i].getParameterTypes();
            for(Class class1:parameterTypes){
                System.out.print(class1.getName()+",");
            }
            System.out.println(")");
        }
    }
Nach dem Login kopieren
public class ReflectTest {

        public static void main(String[] args){
                String s="ss";
                ClassUtil.printClassInfo(s);
        }
}
Nach dem Login kopieren

Ausführen:

类的名称:java.lang.String
booleanequals(java.lang.Object,)
java.lang.StringtoString()
inthashCode()
…
Nach dem Login kopieren

4 . Holen Sie sich die Mitgliedsvariableninformationen

Sie können auch die Mitgliedsvariableninformationen der Klasse abrufen

 public static void printFiledInfo(Object o){

        Class c=o.getClass();
        /**
         * getFileds()获取public
         * getDeclaredFields()获取所有
         */
        Field[] fileds=c.getDeclaredFields();

        for(Field f:fileds){
            //获取成员变量的类型
            Class filedType=f.getType();
            System.out.println(filedType.getName()+" "+f.getName());
        }

    }
Nach dem Login kopieren
public static void main(String[] args){
                String s="ss";
                //ClassUtil.printClassInfo(s);
                ClassUtil.printFiledInfo(s);
        }
Nach dem Login kopieren

Ausführen:

[C value
int hash
long serialVersionUID
[Ljava.io.ObjectStreamField; serialPersistentFields
java.util.Comparator CASE_INSENSITIVE_ORDER
int HASHING_SEED
int hash32
Nach dem Login kopieren

5. Konstruktorinformationen abrufen

public static void printConstructInfo(Object o){
        Class c=o.getClass();

        Constructor[] constructors=c.getDeclaredConstructors();
        for (Constructor con:constructors){
            System.out.print(con.getName()+”(“);

            Class[] typeParas=con.getParameterTypes();
            for (Class class1:typeParas){
                System.out.print(class1.getName()+” ,”);
            }
            System.out.println(“)”);
        }
    }
Nach dem Login kopieren
 public static void main(String[] args){
                String s="ss";
                //ClassUtil.printClassInfo(s);
                //ClassUtil.printFiledInfo(s);
                ClassUtil.printConstructInfo(s);
        }
Nach dem Login kopieren

Ausführen:

java.lang.String([B ,)
java.lang.String([B ,int ,int ,)
java.lang.String([B ,java.nio.char
set
.Charset ,)
java.lang.String([B ,java.lang.String ,)
java.lang.String([B ,int ,int ,java.nio.charset.Charset ,)
java.lang.String(int ,int ,[C ,)
java.lang.String([C ,boolean ,)
java.lang.String(java.lang.StringBuilder ,)
java.lang.String(java.lang.StringBuffer ,)
Nach dem Login kopieren

6. Methodenreflexionsoperationen

Methode abrufen : Sie müssen den Namen der Methode und die Parameter der Methode abrufen, um eine Methode zu bestimmen. Reflexionsoperation der

-Methode:

method.invoke(对象,参数列表);
Nach dem Login kopieren

Zum Beispiel:

class A{

    public void add(int a,int b){
        System.out.print(a+b);
    }

    public void toUpper(String a){
        System.out.print(a.toUpperCase());
    }
}
Nach dem Login kopieren
public static void main(String[] args) {
        A a=new A();
        Class c=a.getClass();
        try {
            Method method=c.getMethod("add",new Class[]{int.class,int.class});
            //也可以 Method method=c.getMethod("add",int.class,int.class);
            //方法的反射操作
            method.invoke(a,10,10);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
Nach dem Login kopieren

Ausführen:

20
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Wissenszusammenfassung zum Java-Reflexionsmechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!