Java之反射基础

反射概述:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

当我们new对象的时候,jvm会编译生成.class文件,并将这个文件加载到内存中的方法区,同时会产生一个class对象,这个class对象每个类只会产生一个,反射就是得到这个class对象,然后反向获得我们new出来的对象。

例:

public class Student {
    private String name;
    private String id;
    private int age;
    private char sex;

    public Student(){

    }

    private Student(String name,String id,int age,char sex){
        this.age = age;
        this.name = name;
        this.id = id;
        this.sex =sex;
    }
}


public class ReflectDemo {
    public static void main(String[] args) {
        //获取Class对象
        //方式一:Object中的getClass方法
        Student student = new Student();
        Class cls1 = student.getClass();

        //方式二:通过类的属性
        Class cls2 = Student.class;

        //方式三:通过Class类的静态方法forname
        try {
            Class cls3 = Class.forName("ClassDemo.ReflectDemo");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

上述例子就是通过反射获得class对象的过程。

那我们获得class对象有什么用呢?

1.可以获得和使用对应类的构造方法

 Class cls3 = Class.forName("ClassDemo.ReflectDemo");
 Constructor cons = cls3.getConstructor();
//获得无参构造,这个方法只能获得公共的构造方法
Constructor cons2 = cls3.getDeclaredConstructor(String.class,String.class,int.class,char.class);
//获得私有的构造这个方法能获得所有访问权限的构造
Constructor[] conss = cls3.getDeclaredConstructors();
//获得一个类所有的构造有Declared这个单词的方法就表示不受访问修饰符影响

2.可以获得和使用对应类的成员变量

Field field1 = cls3.getField("name");
Field field2 = cls3.getDeclaredField("id");
//需要获得哪个成员变量就传哪个变量的变量名
Field[] fields = cls3.getDeclaredFields();
//获得所有成员变量

3.可以获得和使用对应类的成员方法

Method method = cls3.getMethod("eat");
Method method1 = cls3.getDeclaredMethod("eat");
Method[] methods  = cls3.getDeclaredMethods();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值