###反射一些内容使用操作!!!

public class Demo01 {

    public static void main(String[] args) throws Exception {
        
        //如何获取Class对象
        //三张方式
        // 第一种方式,直接通过类名.class
        Class<?> clazz = Demo01.class;
        // 第二种: 根据类的全路径名称得到Class  
        Class<?> clazz2 = Class.forName("com.qfedu.reflect.Demo01");
        // 第三种:通过一个类的实例化对象获取该类的Class类对象
        Demo01  demo =new Demo01();

        Class<? extends Demo01> class3 = demo.getClass();
        

public class Demo02 {

    public static void main(String[] args) throws Exception {
        
        Student stu =new Student();
        System.out.println(stu.phone);
        stu.getAge();
        
        //第一步:不new就可以获取一个类的实例化对象
        Class<?> clazz = Student.class;
        //获取类中所有的构造方法
        Constructor<?>[] constructors = clazz.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor.getName());
        }
        
        //获取Student类中无参数的构造器,得到一个学生对象
        Constructor<?> constructor = clazz.getConstructor();
        Object object = constructor.newInstance();
        Student stu2 = (Student) object;
        System.out.println(stu2);
        
        //通过有参数的构造器得到一个Student对象
        Constructor<?> constructor2 = clazz.getConstructor(int.class,String.class,String.class);
        Object object2 = constructor2.newInstance(12,"张三","181xxxx9903");
        Student stu3 = (Student) object2;
        System.out.println(stu3.getName());
        
        //第二步:可以获取所有字段,包括私有字段
        // 通过getFields 只能获取public字段
        Field[] fields = clazz.getFields();
        for (Field field : fields) {
            System.out.println(field.getName());
        }
        
        
        // Declared 公开的
        //可以获取所有字段,包含私有的
        Field[] fields2 = clazz.getDeclaredFields();
        
        for (Field field : fields2) {
            System.out.println(field.getName());
        }
        //第三步:可以调用类中方法,不需要new
        
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
        }
        
        //调用的是无参数的方法
        Method method = clazz.getDeclaredMethod("getName");
        System.out.println(method.invoke(stu3));
        
        //如果有参数如何调用呢?
        Method method2 = clazz.getDeclaredMethod("setName",String.class);
        method2.invoke(stu2, "李四");
        
        System.out.println(stu2.getName());
        
    }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值