Java编程社区Java程序员面试宝典

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

2019-07-04  本文已影响2人  C语言中文社区

获取字节码的三种方式:

接下来我们通过代码实例来看看这三种方式以及通过字节码创建对象
首先我们创建普通的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<Person> clazz2 = Person.class;
        
        Person person = new Person();
        Class<? extends Person> 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
上一篇 下一篇

猜你喜欢

热点阅读