美文网首页
Java 反射机制

Java 反射机制

作者: mnikn | 来源:发表于2017-03-11 19:39 被阅读20次

直接上码使用方式:

public class Car {
    private String brand;
    private String color;
    private int maxSpeed;

    public Car() {}

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getMaxSpeed() {
        return maxSpeed;
    }

    public void setMaxSpeed(int maxSpeed) {
        this.maxSpeed = maxSpeed;
    }
    public Car(String brand,String color,int maxSpeed){
        this.brand = brand;
        this.color = color;
        this.maxSpeed = maxSpeed;
    }

    public void introduce(){
        System.out.println("brand: " + brand + " color: " + color + " maxSpeed: " + maxSpeed);
    }
}

public class ReflectTest {
    public static Car initByDefaultConst() throws Throwable {
        //通过类装载器获取Car类对象
        ClassLoader classLoader = ClassLoader.getSystemClassLoader();
        Class clazz = classLoader.loadClass("Car");

        //找到默认构造函数并生成对象
        Constructor constructor = clazz.getDeclaredConstructor((Class[]) null);
        Car car = (Car) constructor.newInstance();

        //通过反射方法设置属性
        Method setBrand = clazz.getMethod("setBrand",String.class);
        setBrand.invoke(car,"Bens");
        Method setColor = clazz.getMethod("setColor",String.class);
        setColor.invoke(car,"Red");
        Method setMaxSpeed = clazz.getMethod("setMaxSpeed",int.class);
        setMaxSpeed.invoke(car,45);

        return car;
    }

  public static void main(String[] args) throws Throwable{
          initByDefaultConst().introduce();
  }
}

类装载器ClassLoader把类装载进JVM需要经过以下步骤:

  • 装载:查找和导入类文件。
  • 链接:执行校验、准备和解析。
  • 校验:检测类数据是否正确。
  • 准备:给类静态变量分配空间。
  • 解析:将符号引用改为直接引用。
  • 初始化:对类的静态变量和代码执行初始化工作。

JVM运行时会生成三个ClassLoader:根装载器,ExClassLoader(拓展类装载器)
、AppClassLoader(系统类装载器),其中根装载器是C++文件,AppClassLoader和ExClassLoader都是ClassLoader的子类,AppClassLoader是ExClassLoadee的子类。根装载器负责装载Jre核心类库,ExClassLoader装载jre拓展库,AppClassLoader负责应用程序类。装载顺序是只有父ClassLoader找不到文件才到子ClassLoader装载。

相关文章

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之三

    总结内容源自以下文章 粗浅看java反射机制 反射机制应用实践 谈谈java反射机制 Java Reflectio...

  • java反射机制

    java的反射机制 1 JAVA的反射机制是什么?反射机制能做什么?反射机制的优点与缺点2 认识 Class...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • Chapter 13 . 反射机制

    阅读原文 Chapter 13 . 反射机制 13.1 Java反射机制研究及应用 Java Reflection...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

  • Java 反射机制

    [1]. java反射详解[2]. Java Reflection(反射机制)详解[3]. 深入理解Java类型...

网友评论

      本文标题:Java 反射机制

      本文链接:https://www.haomeiwen.com/subject/ewyagttx.html