File size: 2,709 Bytes
0284885
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package Reflect_package1;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Parameter;

public class Reflect_demo2 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        /*
            Class类中用于获取构造方法的方法:
                Constructor<?>[] getConstructors ()
                Constructor<?>[] getDeclaredConstructors ()
                Constructor<T> getConstructor (Class<?>...parameterTypes)
                Constructor<T> getDeclaredConstructor (Class<?>...parameterTypes)

            Constructor类中用于创建对象的方法:
                T newInstance (Object...initargs)
                setAccessible (boolean flag)
         */

        //1、获取class字节码文件对象
        Class<?> clazz = Class.forName("Reflect_package1.Student");

        //2、获取public构造方法
        Constructor<?>[] cons1 = clazz.getConstructors();

        for (Constructor<?> con : cons1) {
            System.out.println(con);
        }
        System.out.println("========================");

        //获取所有构造方法
        Constructor<?>[] cons2 = clazz.getDeclaredConstructors();
        for (Constructor<?> con : cons2) {
            System.out.println(con);
        }
        System.out.println("========================");

        //获取单个的构造方法
        Constructor<?> con1 = clazz.getDeclaredConstructor();
        System.out.println(con1);
        System.out.println("========================");

        Constructor<?> con2 = clazz.getDeclaredConstructor(String.class);
        System.out.println(con2);
        System.out.println("========================");

        Constructor<?> con3 = clazz.getDeclaredConstructor(String.class, int.class);
        System.out.println(con3);
        System.out.println("========================");


        //获取权限修饰符
        int modifiers = con3.getModifiers();
        System.out.println(modifiers);
        System.out.println("========================");

        //获取构造方法所有的参数
        Parameter[] parameters = con3.getParameters();
        for (Parameter parameter : parameters) {
            System.out.println(parameter);
        }
        System.out.println("========================");

        //创建对象
        Constructor<?> con4 = clazz.getDeclaredConstructor(int.class);
        con4.setAccessible(true);//暴力反射:表示临时取消权限校验
        Student stu = (Student) con4.newInstance( 23);

        System.out.println(stu);
    }
}