java反射之获取字节码且通过字节码创建对象

获取字节码的三种方式:

  • Object类的getClass()方法
  • 静态属性class
  • Class类中的静态方法forName()

接下来我们通过代码实例来看看这三种方式以及通过字节码创建对象
首先我们创建普通的Java项目
项目目录结构


Person.java

package com.wangc.reflect;

public class Person {
    
    String name;
    Integer age;
    public Person() {
        super();
    }
    public Person(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    public void show(){
        System.out.println("我是:" + name + ",年龄:" + age);
    }
}

Test.java

package com.wangc.reflect;

import java.lang.reflect.Constructor;

public class Test {
    
    public static void main(String[] args) throws Exception {
        //获取字节码的三种方式
        Class clazz1 = Class.forName("com.wangc.reflect.Person");
        
        Class clazz2 = Person.class;
        
        Person person = new Person();
        Class clazz3 = person.getClass();
        
        System.out.println(clazz1 == clazz2);
        System.out.println(clazz2 == clazz3);
        
        
        //有了字节码之后就可以通过字节码创建对象
        Person person2 = (Person) clazz1.newInstance();
        person2.name = "zhangsan";
        person2.age = 25;
        person2.show();
        
        //获取构造器
        Constructor constructor = clazz1.getConstructor(String.class, Integer.class);
        //通过有参构造器来创建对象
        Person person3 = (Person) constructor.newInstance("lisi", 28);
        person3.show();
    }
}

代码运行结果:

true
true
我是:zhangsan,年龄:25
我是:lisi,年龄:28

你可能感兴趣的:(java反射之获取字节码且通过字节码创建对象)