1、
获取一个Class对象
Class classas = Class.forName(“需要加载获取的类的路径”);
例如:
Class classas = Class.forName("club.kang.blog.web.test.TestClassMy.Student");
2、
将这个类对象创建出来
Object object = classas.newInstance();
3、然后我们对这个对象进行操作下面是各种操作
获取成员变量
例如:操作一个叫name的公有属性:
获取当前类模板的对象
Class classas = Class.forName("club.kang.blog.web.test.TestClassMy.Student");
创建一个classas类模板的对象,无参构造
Object object = classas.newInstance();
获取成员变量,设置变量名的名字
Field field = classas.getField("name");
获取一个field成员叫做name,从object中拿出来
field .get(object);
设置这个成员的name成员,值为MyName
field.set(object,"MyName");
获取这个成员的变量名
field.getName()
获取这个类的所有_公有_成员变量
Field[] fields = classas .getFields();
循环遍历他
for(Field fu : fields){
System.out.println("加载一个公有成员变量" + fu);
}
访问所有属性
Field[] field = classas.getDeclaredFields();
它可以加载所有的成员变量甚至可以设置私有变量,
所以一般的开发中很少用到反射一般用作开发框架等,
下面我们来设置私有变量
只需要添加一个
field.setAccessible(true);
就可以给私有的成员设置值也是暴力破解私有的方法
下面我们来操作方法还是用那一个类对象
Method method = classas.getMethod(方法名,参数值对象类…);
参数值对象类是例如String类型的参数则是String.class
int对应int.Class
这里的返回值是方法的返回值,如果是void类型的则返回null
Object object2 = method .invoke(object,参数.......);
然后我们来返回所有公有的方法
Method[] methods = classas.getMethods();
查询所有方法
classas.getDeclaredMethods();
私有的方法也能调用
Method.setAccessible(true);
然后直接调用他
Object object2 = method .invoke(object,参数.......);
剩下的基本都一样都是在中间加上
getDeclaredField和getDeclaredMethods()
getXxxxx后面操作获取的都是所有的
也嫩返回getName等等
然后就是获取构造方法
设置构造方法的参数格式
Constructor constructor = classas.getConstructor(String.class, int.class, String.class);
将获取到的值赋给对象
Object object = constructor.newInstance("MyName", 18, "男");
就设置好了
然后是查找他的父类和接口
创建一个新的类模板,加载他的父类类模板
Class cs = classas.getSuperclass();
这是获取他的所有接口
Class[] interfaces = classas.getInterfaces();
其实获取的方法都是一样的getXxxx然后是方法或者成员或者其他的setXXXX就是往里面设置加载
getName就是方法名,或者接口名,或者成员名
暴力破解private私有的都是field或者方法等加上.setAccessible(true);就可以了
field.setAccessible(true);
里面还有其他的很多东西可以慢慢了解哦