zoukankan      html  css  js  c++  java
  • Java 反射

    1.类加载器

      1.1类的加载

        程序使用某个类时,该类加载进内存中

        通过加载,连接,初始化三步进行初始化

        1.1.1加载,读入内存,将class读入内存,并且创建一个对象

        1.1.2连接,验证,是否有正确结构

          给静态成员分配内存

          解析,将类的二进制数中符号转换为直接引用

      1.2类加载实际

        凡是用到某个类时,都全部进行加载

      1.3类加载器

        用来把class文件加载进内存,首先将Demo.class加载进方法区,之后在heap中创建一个class文件的对象。

      1.4类加载器种类

        Bootstrap classLoader根类加载器

        Extension classLoader拓展类加载器

        System classLoader系统加载器

    反射的案例

         1.获取所有的构造器
            Class<?> c=Class.forName("java.lang.String");
            Constructor<?>[] p=c.getConstructors();
            for (Constructor<?> constructor : p) {
                System.out.println(constructor);
            }
         2.获取单个构造器并直接构造对象
            Class<Person> c=Person.class;
            Constructor<Person> con=c.getConstructor(String.class,int.class);
            Person p=con.newInstance("Jack",13);
            System.out.println(p);
         3.获取私有构造方法并且运行(不推荐,破坏程序的封装性)
            Class<Student> c=Student.class;
            Constructor<Student> con=c.getDeclaredConstructor(String.class,String.class);
            con.setAccessible(true);
            Student s=con.newInstance("Jack","male");
            System.out.println(s);
         4.获取成员方法并且运行
            Class<Person> c=Person.class;
            Person p=c.newInstance();
            Method method=c.getMethod("toString");
            System.out.println(method.invoke(p));
         5.泛型擦除   
            ArrayList<String> array=new ArrayList<String>();
            array.add("a");
            
            Class c=array.getClass();
            Method m=c.getMethod("add", Object.class);
            m.invoke(array,150);
            
            System.out.println(array);
  • 相关阅读:
    why why why
    为什么又显示了呢?
    Hello
    兼容性问题
    前端性能优化
    ES6新增API
    详解面向对象、构造函数、原型与原型链
    post请求导出表单。
    vue在生产环境清除console.log
    js 延迟加载的几种方法
  • 原文地址:https://www.cnblogs.com/littlepage/p/10654251.html
Copyright © 2011-2022 走看看