• java 反射


    一:

    反射的定义:在运行期载入,探知和使用编译期完全未知的类。

    1 查看类信息

    反射机制里一个特点就是实例化Class对象,因为任意一个类对象都是Class的实例...那么如何实例化Class对象呢?三种方法:

    常用的;

     1:  Class c = Class.forName("全限定类名");

    全限定类名:包名.类名

    2:对象.getClass();

    3:类.class;

    在Class类中 有三个常用的类Field,Method,Constructor类

    得到的是Class类public的的属性,方法,构造器:getFields(),getMethods(),getConstructors().

    得到的是Class所包含的类的所有属性,方法,构造器:getDeclaredFields(),getDeclaredMethods(),getDeclaredConstructors().

    2 创建对象

    eg:

    a           : Object object = c.newInstance();//调用无参构造器创建对象

    b           :通过getConstructor()方法得到指定的构造器,再用指定的构造器创建对象的实例

    eg:  Constructor cons = c.getConstructor(Class<?>...parameterType); 参数列表

            Object object = cons.newInstance(传入实参);

    3 调用方法

    首先导入  import java.lang.reflect.Method;

    eg:         Method method = c.getMethod(String name,Class<?>... parameterTypes);

            method.invoke(Object  obj,Object ...args);// 调用底层方法对象,用于方法调用的参数

    4 获取字段

    首先导入  import java.lang.reflect.Field;

    eg:     Field[] field = c.getDeclaredFields(); 

                for (Field fi : field) {//遍历

                      System.out.println(fi);
    }

     

    5  获取方法   访问修饰符  返回类型  方法名 (参数类型)

    首先导入           import java.lang.reflect.Method;

                    import java.lang.reflect.Modifier;

                 

      eg:       

    Method[] methods = c.getDeclaredMethods();
                 for (Method method : methods) {
             System.out.print(Modifier.toString(method.getModifiers()) + " "+ method.getReturnType().getCanonicalName() + " "+ method.getName() + "(");

                                 //method.getModifiers()这个返回的int,所有用Modifier.toString转换成字符串类型的
                Class[] types = method.getParameterTypes();
                               int len = types.length;
                            for (int i = 0; i < len; i++) {
                              System.out.print(types[i].getName());
                                if (i != len - 1)
                             System.out.print(",");
                                   }
                             System.out.println(")");
                     }

    6 获取构造器

    首先要导入  import java.lang.reflect.Constructor;

     其实与获取方法的差不多。

      Constructor[] constructor = c.getDeclaredConstructors();

    二:垃圾回收 

    三:类加载器

      主要包括: 根类加载器(核心Java类)    ;   扩展加载器(Javax);         系统加载器(运行时加载);

    类加载的过程: 加载  连接(验证,准备,解析)  初始化

    四:如果你写了一些方法,没有导入包的话,就会报错(这是一定的),当你把鼠标移到错误的地方,就会显示一个框,然后点击你所需要的包就可以了。


     

  • 相关阅读:
    CPU被挖矿,Redis竟是内鬼!
    图解四种 IO 模型
    用户态和内核态的区别是啥
    关于 RocketMQ ClientID 相同引发的消息堆积的问题
    玩转 ByteBuffer
    RocketMQ Consumer 启动时都干了些啥?
    网络协议之:基于UDP的高速数据传输协议UDT
    dart系列之:安全看我,dart中的安全特性null safety
    JetBrains又出神器啦!Fleet,体验飞一般的感觉
    网络协议之:还在用HTTP代理?弱爆了!快试试SOCKS5
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/4436396.html
Copyright © 2020-2023  润新知