import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;/*** @author Alina* @date 2021年12月30日 10:47 下午* JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,* 都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java 语言的反射机制。* 获取字节码文件的三种方式* 1.new 对象后 使用getClass获取* 2.使用静态属性class 获取* 3.Class类的静态方法 forName()* 4.获取所有公共构造方法* 5.获取一个空参构造器* 6.获取有参构造器* 7.获取有参构造器简便方式:类中必有空参的public 权限的 class类中有newInstance()* 8.获取一个带有参数的私有构造器,并运行* 9.获取成员变量 从类中的class文件中获取成员变量 Field getFields()* 10.获取成员方法 Method getMethod 运行获取到的方法 invoke*/
public class ReflectDemo {public static void main(String[] args)throws Exception {// method_2();method_10();}public static void method_10()throws Exception{Class clazz10 = Class.forName("People");Object obj = clazz10.newInstance();
// Method[] methods = clazz10.getMethods();
// for(Method m :methods){
// System.out.println(m);
// }Method method = clazz10.getMethod("show"); // 获取空参方法method.invoke(obj);Method method1 = clazz10.getMethod("show",int.class,double.class);method1.invoke(obj,10,12.34);}public static void method_9 () throws Exception{Class clazz9 = Class.forName("People");Object obj = clazz9.newInstance();
// Field[] fields = clazz9.getFields(); //获取所有共有权限的成员变量 获取私有的加Declared
// for (Field f : fields){
// System.out.println(f);
// }Field filed = clazz9.getField("sex");filed.set(obj,"女");System.out.println(obj);}public static void method_8 ()throws Exception {Class clazz8 = Class.forName("People");Constructor con = clazz8.getDeclaredConstructor(String.class);System.out.println(con);//父类方法con.setAccessible(true);Object obj = con.newInstance("李四");System.out.println(obj);}public static void method_7 ()throws Exception {Class clazz7 = Class.forName("People");System.out.println(clazz7.newInstance());}public static void method_6 ()throws Exception {Class clazz6 = Class.forName("People");Constructor con = clazz6.getConstructor(String.class,int.class);Object obj = con.newInstance("张三",20);System.out.println(obj);}public static void method_5 ()throws Exception {Class clazz5 = Class.forName("People");Constructor con = clazz5.getConstructor();System.out.println(con);}public static void method_4 ()throws Exception {Class class4 = Class.forName("People");Constructor[] cons = class4.getConstructors();for(Constructor com:cons){System.out.println(com);}}public static void method_3 () throws Exception {Class class3 = Class.forName("People");System.out.println(class3);}public static void method_2 (){Class class2 = People.class;System.out.println(class2);}public static void method_1(){People p = new People();Class class1 = p.getClass();System.out.println(class1);}
}