zoukankan      html  css  js  c++  java
  • 反射--笔记(第一篇)

    直接代码理解

    主要说明:反射的三种方式,反射方法。调用方法

    public static void main(String[] args) throws Exception {
            getClassWays();
            Product product = (Product) Main.generateObj("demo.reflection.Product");
            product.doStr();
            System.out.println(product);
    
            Class clz = Product.class;
            //Declare:声明,因为一个类的方法可以简单的分为
            //自己写的(Declare)和父类继承过来的
            //getDeclareMethods是得到自己声明的所有方法
            Method[] declaredMethods = clz.getDeclaredMethods();
            for (Method declaredMethod : declaredMethods) {
                System.out.println(declaredMethod.getName());
            }
    
            //得到某一个具体方法。
            //得到某一个具体的方法,传递的参数,第一个是方法的名字
            //第二个是方法的参数类型,有多少个就传递多少个。如果没有就不用写。
            //为啥这样设计,是因为java语言有重载这种技术
            Method doStr = clz.getDeclaredMethod("doStr",String.class);
            //invoke:调用,方法的调用分为实例方法的调用和静态方法的调用
            //因为现在得到的是一个实例方法,所以需要传递对象
            //invoke方法的第一个参数就是对象,第二个参数就是方法的一系列的参数值
            doStr.invoke(product,"你好");
            System.out.println(doStr);
        }
        public static Object generateObj(String className) throws Exception {
            //这种创建方法,能成功的前提是此类有一个默认构造函数
            //不然会有异常:NoSuchMethodException
            Class clz = Class.forName(className);
            Object instance = clz.newInstance();
            return instance;
        }
        public static void getClassWays() throws Exception{
            //第一种方法是,依据类来得到其class对象
            Class c1= Product.class;
    
            //第二种:利用forName方法加载类,并返回类对象
            //如果此类已经被加载过,就不会重复加载
            Class c2 = Class.forName("demo.reflection.Product");
    
            //第三种方法:依据类的对象得到其类对象
            Product p = new Product();
            Class c3 = p.getClass();
        }
    }
  • 相关阅读:
    网络基础知识
    mysql安装
    docker打包镜像
    python的基础
    python静态属性的理解
    python中的静态方法和类方法
    python类的两种创建方式
    python的继承
    python中time和datetime模块
    python之模块
  • 原文地址:https://www.cnblogs.com/LixiaoFeng1650062546/p/11377908.html
Copyright © 2011-2022 走看看