zoukankan      html  css  js  c++  java
  • 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:获取某个类中的全部属性

  • 相关阅读:
    Unity Ply网格读取
    LoadLibrary加载dll失败
    Anaconda引起cuda MSB3721 with return error code 1
    STL 如何对STL进行扩展,简单小结
    集群环境准备(Centos7)
    MySQL中的常见函数
    Mysql优化_第十三篇(HashJoin篇)
    docker创建和使用mysql
    JNI相关笔记 [TOC]
    选择排序
  • 原文地址:https://www.cnblogs.com/basstorm/p/12663256.html
Copyright © 2011-2022 走看看