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:获取某个类中的全部属性

原文地址:https://www.cnblogs.com/basstorm/p/12663256.html