Java中的反射的简明使用
1. 反射
发射的概述:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个 方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.
反射的作用:可以再运行时期动态的创建对象:获取对象的属性和方法,不需要源码。
反射的使用:
a.获取class对象
方法一:Object.getClass();
方法二:没中数据类型都有一个“静态”的class属性int.class
方法三:通过Class类的静态方法:Class clazz=Class.forName(String className)
注:className=类的全名(即报名+类名例:gz.demo1)
b.通过class对象可以获取某个类的:构造方法,成员变量,成员方法;并访问成员
反射的使用实例
* api的解释:
* —–|Class Class 类的实例表示正在运行的 Java 应用程序中的类和接口。
* ——–|Class.forName(“gz.fanshe.entity.Student”) 用于创建Class的实例
* ——–|clazz.getConstructor(String.class,String.class);用于获取构造器
* ——–|constructor.newInstance(“1″,”乔布斯”) 用于通过构造器,创建实体类对象
* ——–|clazz.getDeclaredFields();//获取所用对象(共有的,私有的,受保护的)
* ——–|field.setAccessible(true);//接触所用限制,强制访问
* ——–|Method m = clazz.getDeclaredMethod(“setId”, String.class);//获取方法
* ———-|m.invoke(stu1, “2”);//调用stu1的setId()方法
* 使用步骤:
* 1.创建并获取class对象
* 2.获取构造方法,并调用
public class Demo1 { public static void main(String[] args)throws Exception { //1.创建并获取class对象 Class clazz=Class.forName("gz.fanshe.entity.Student"); //2.获取构造方法 Student stu1=(Student) clazz.newInstance();//默认调用无参的构造方法 Constructor constructor = clazz.getConstructor(String.class,String.class);//获取构造器 Student stu2=(Student) constructor.newInstance("1","乔布斯"); //3.获取成员变量并调用 Field[] fieldArray=clazz.getDeclaredFields();//获取所用对象(共有的,私有的,受保护的) for (Field field : fieldArray) { field.setAccessible(true);//接触所用限制,强制访问 //获取字段名称 String name=field.getName(); //获取值 Object value=field.get(stu2); System.out.println(name+value); } //4.获取成员方法并调用 Method m = clazz.getDeclaredMethod("setId", String.class);//获取方法 m.invoke(stu1, "2");//调用set方法 Method m2 = clazz.getMethod("getId"); System.out.println(m2.invoke(stu1));//调用get方法 } }