java反射之獲取字節(jié)碼且通過字節(jié)碼創(chuàng)建對(duì)象

獲取字節(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容