java反射总结
Android HOOK或脱壳,很多地方都需要用到反射,JAVA的反射,意思就是,在运行过程中,每个类都能知道这个类的所有属性和方法,对于每个对象,都能任意的调用这个类的任意一个方法。
这里在Android中进行测试和学习。
1:获取类
获取类可以有三种方法,Class.forname()、Class.getclass()、Class.class
2:获取父类与接口:
Class.getSuperclass()
Class.getInterfaces()
这里由于Activity中没有接口,所以没有获取到
3:实例化类对象
User类:
public class User { private int age; private String name; public User() { super(); } public User(String name) { super(); this.name = name; } public User(int age, String name) { super(); this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User [age=" + age + ", name=" + name + "]"; }
try { clazz = Class.forName("com.example.viewtest.User"); User u = (User) clazz.newInstance(); u.setAge(20); u.setName("test"); Log.d("User反射结果:", u.toString()); Constructor[] cons = clazz.getConstructors(); for (Constructor con : cons) { Class[] clzs = con.getParameterTypes(); for (Class clz : clzs) { Log.d("构造函数反射结果:", clz.getName()); } } u = (User) cons[1].newInstance(10,"test2"); Log.d("构造函数启动实例反射结果", u.toString()); u = (User) cons[2].newInstance("test1"); Log.d("构造函数启动实例反射结果", u.toString()); } catch (Exception e) { Log.d("反射结果错误", e.getMessage()); }
4:获取某个类中的全部属性