JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
1.首先要获取Class对象,有三种方法
Cat cat=new Cat(); Class cat1=Class.forName("com.ncu.reflect.Cat");//Class.forName("全类名") Class cat2=Cat.class; //类名.class Class cat3=cat.getClass(); //对象名.getclass()
2.获取实体类的字段
Field[] getDeclaredFields() //获取所有字段,不限修饰符 Field getDeclaredFields(String name) //获取指定字段,不限修饰符 Field[] getFields() //获取所有public修饰的成员变量 Field getField(String name) //获取指定名称的public修饰的成员变量 //获取Cat类中所有字段,不限修饰符 Class cat1=Class.forName("com.ncu.reflect.Cat"); Field[] fields = cat1.getDeclaredFields();
3.Field类用来设置和获取字段值的方法
Cat cat=new Cat(); Field age = cat1.getDeclaredField("age"); age.set(cat,"15"); //将cat对象age字段值设置为15 System.out.println(age.get(cat)); //获取cat对象age字段值
4.获取成员方法
跟获取字段方法雷同 Method[] getMethods() Method getMethod(String name, 类<?>... parameterTypes) Method[] getDeclaredMethods() Method getDeclaredMethod(String name, 类<?>... parameterTypes) // Method eat = cat1.getMethod("eat", null);//获取一个public修饰符,无参的eat函数 eat.invoke(cat); //调用eat函数
5.获取构造函数
Constructor<?>[] getConstructors() Constructor<T> getConstructor(类<?>... parameterTypes) Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) Constructor<?>[] getDeclaredConstructors() cat1.getConstructors();//获取Cat类的无参构造函数