获取字节码的三种方式:
- 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<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
网友评论