美文网首页Java编程社区Java程序员面试宝典
java反射之获取字节码且通过字节码创建对象

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

作者: C语言中文社区 | 来源:发表于2019-07-04 23:07 被阅读2次

    获取字节码的三种方式:

    • 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
    

    相关文章

      网友评论

        本文标题:java反射之获取字节码且通过字节码创建对象

        本文链接:https://www.haomeiwen.com/subject/seodhctx.html