獲取字節(jié)碼的三種方式:
- Object類的getClass()方法
- 靜態(tài)屬性class
- Class類中的靜態(tài)方法forName()
接下來我們通過代碼實(shí)例來看看這三種方式以及通過字節(jié)碼創(chuàng)建對(duì)象
首先我們創(chuàng)建普通的Java項(xiàng)目
項(xiàng)目目錄結(jié)構(gòu)

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 {
//獲取字節(jié)碼的三種方式
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);
//有了字節(jié)碼之后就可以通過字節(jié)碼創(chuàng)建對(duì)象
Person person2 = (Person) clazz1.newInstance();
person2.name = "zhangsan";
person2.age = 25;
person2.show();
//獲取構(gòu)造器
Constructor<?> constructor = clazz1.getConstructor(String.class, Integer.class);
//通過有參構(gòu)造器來創(chuàng)建對(duì)象
Person person3 = (Person) constructor.newInstance("lisi", 28);
person3.show();
}
}
代碼運(yùn)行結(jié)果:
true
true
我是:zhangsan,年齡:25
我是:lisi,年齡:28