(JAVA)反射

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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值