Java- reflection

//Test class

 1 package com.test;
 2 
 3 public class Student {
 4 
 5     private int stuNum;
 6     private String stuName;
 7     private String stuClass;
 8     
 9     private Student(int stuNum) {
10         this.stuNum = stuNum;
11     }
12     Student(int stuNum, String stuName) {
13         this.stuNum = stuNum;
14         this.stuName = stuName;
15     }
16     public Student() {
17         
18     }
19     public Student(int stuNum, String stuName, String stuClass) {
20         this.stuNum = stuNum;
21         this.stuName = stuName;
22         this.stuClass = stuClass;
23     }
24     
25     public void show1(String stuName){
26         System.out.println("The show1 (): stuName= "+ String parameter of the public." stuName);
27     }
28     public void show2() {
29         System.out.println("Public without reference show2 () ");
30     }
31     protected void show3(){
32         System.out.println("Protected show2 () ");
33     }
34     void show4(){
35         System.out.println("Default no reference show3 () ");
36     }
37     private String show5(int stuNum){
38         System.out.println("Private and return value, int parameter show4 (): age= "+ stuNum);
39         return stuNum+"abc";
40     }
41     
42     public int getStuNum() {
43         return stuNum;
44     }
45     public void setStuNum(int stuNum) {
46         this.stuNum = stuNum;
47     }
48     public String getStuName() {
49         return stuName;
50     }
51     public void setStuName(String stuName) {
52         this.stuName = stuName;
53     }
54     public String getStuClass() {
55         return stuClass;
56     }
57     public void setStuClass(String stuClass) {
58         this.stuClass = stuClass;
59     }
60     
61     @Override
62     public String toString() {
63         return "Student [stuNum=" + stuNum + ", stuName=" + stuName + ", stuClass=" + stuClass + "]";
64     }
65 }

View Code

 //Start testing

javaThe reflection mechanism is that for any class, all the attributes and methods of this class can be known. For any object, any one of its attributes and methods can be called. The method of dynamically obtaining information and dynamically calling objects is the reflection in Java language.

1         Class clazz1 = Student.class;    //The first is that any class has an implicit static member variable class.
2         
3         Class clazz2 = new Student().getClass();    //The second type: objects with this class have been passed through the getClass method.4         
5 //        System.out.println(clazz1 == clazz2);    //true
6         
7         Class clazz3 = Class.forName("com.test.Student");//Third: dynamic loading8         
9 //        System.out.println(clazz2 == clazz3);    //true

 Get all common construction methods

1         Constructor[] conArr = clazz3.getConstructors();
2         for(Constructor c : conArr){
3 //            public com.test.Student()
4 //            public com.test.Student(java.lang.String,java.lang.String)
5             System.out.println(c);
6         }

 Get all the construction methods.

1         conArr = clazz3.getDeclaredConstructors();
2         for(Constructor c : conArr){
3 //            public com.test.Student()
4 //            public com.test.Student(java.lang.String,java.lang.String)
5 //            com.test.Student(java.lang.String,java.lang.String)
6 //            private com.test.Student(java.lang.String)
7             System.out.println(c);
8         }

 Construction method for obtaining public no parameters

1         //Because it's a nonparametric constructor, the type is a null, and it's fine if you don't write it: what you need here is a parameter type, remember that it's a type2         //Returns a class object that describes this parameter constructor.
3         Constructor con = clazz3.getConstructor(null);
4         Object obj = con.newInstance();        //Invocation method
5         Student stu = (Student) obj;
6         System.out.println(stu);        //Student [stuNum=null, stuName=null, stuClass=null]

 Construction method for obtaining public parameters

1      con = clazz3.getConstructor(int.class,String.class,String.class);
2         obj = con.newInstance(100023,"chenkaixin","150101");    //Use the constructor represented by this Constructor object to create a new instance of the declarative class of the constructor and initialize the instance with the specified initialization parameter.
3         stu = (Student) obj;
4         System.out.println(stu);        //Student [stuNum=100023, stuName=chenkaixin, stuClass=150101]

 Construction method for obtaining private parameters

1       con = clazz3.getDeclaredConstructor(int.class);
2         con.setAccessible(true); //To enable or disable security checks, access to private methods or variables must be set to true.
3         obj = con.newInstance(100023);    //Invocation method
4         stu = (Student) obj;
5         System.out.println(stu);        //Student [stuNum=100023, stuName=null, stuClass=null]

 Get all public methods

 1         Method[] methodArr = clazz3.getMethods();
 2         for(Method m : methodArr){
 3 //            public java.lang.String com.test.Student.toString()
 4 //            public void com.test.Student.show2()
 5 //            public void com.test.Student.show1(java.lang.String)
 6 //            public void com.test.Student.setStuClass(java.lang.String)
 7 //            public void com.test.Student.setStuNum(int)
 8 //            public int com.test.Student.getStuNum()
 9 //            public void com.test.Student.setStuName(java.lang.String)
10 //            public java.lang.String com.test.Student.getStuName()
11 //            public java.lang.String com.test.Student.getStuClass()
12 //            public final void java.lang.Object.wait() throws java.lang.InterruptedException
13 //            public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
14 //            public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
15 //            public boolean java.lang.Object.equals(java.lang.Object)
16 //            public native int java.lang.Object.hashCode()
17 //            public final native java.lang.Class java.lang.Object.getClass()
18 //            public final native void java.lang.Object.notify()
19 //            public final native void java.lang.Object.notifyAll()
20             System.out.println(m);
21         }

 Get all the methods

 1         methodArr = clazz3.getDeclaredMethods();
 2         for(Method m : methodArr){
 3 //            public java.lang.String com.test.Student.toString()
 4 //            public void com.test.Student.show2()
 5 //            public void com.test.Student.show1(java.lang.String)
 6 //            private java.lang.String com.test.Student.show5(int)
 7 //            void com.test.Student.show4()
 8 //            public void com.test.Student.setStuClass(java.lang.String)
 9 //            public void com.test.Student.setStuNum(int)
10 //            public int com.test.Student.getStuNum()
11 //            public void com.test.Student.setStuName(java.lang.String)
12 //            protected void com.test.Student.show3()
13 //            public java.lang.String com.test.Student.getStuName()
14 //            public java.lang.String com.test.Student.getStuClass()
15             System.out.println(m);
16         }

 Access to public non parametric methods

1         Method m = clazz3.getMethod("show2");
2         //Implement this method.
3         m.invoke(obj);    //Public without reference show2 ()

 Access to public ownership

1         m = clazz3.getMethod("show1", String.class);
2         m.invoke(obj,"chenkaixin12121");    //The String parameter of the public is show1 (): stuName=chenkaixin12121.

Obtaining private reference method

1         m = clazz3.getDeclaredMethod("show5", int.class);
2         m.setAccessible(true);    //Remove private restriction
3         Object o = m.invoke(obj,12121);    //Private and return value, int parameter show4 (): age=12121
4         System.out.println(o);    //12121abc

 Get all attributes

1         Field[] fields = clazz3.getDeclaredFields();
2         for(Field f : fields){
3 //            public java.lang.String com.test.Student.toString()
4 //            private java.lang.String com.test.Student.show4(int)
5 //            void com.test.Student.show3()
6 //            public void com.test.Student.show1(java.lang.String)
7 //            protected void com.test.Student.show2()
8             System.out.println(f);
9         }

Get attribute values

1         /*
2         System.out.println("--------Gets the value of the attribute - -- "";3         Field field = clazz3.getDeclaredField("stuNum");
4         field.setAccessible(true);
5         String value = field.get(new Student(111,"aaa")).toString();
6         System.out.println(value);    //111
7          */    

 

Leave a Reply

Your email address will not be published. Required fields are marked *