获取字节码Class对象的三种方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44002167/article/details/98316644
  1. 方法

    (1),Class.forname(“全类名”);将字节码文件加载进内存,返回Class
    多用于配置文件,将类名定义在配置文件中,读取文件,加载类
    (2),类名.class:通过类名的属性class获取
    多用于参数的传递
    (3),对象.getClass();getClass()方法在object类中定义
    多用于获取对象的字节码文件

  2. 案例
    1,建立一个demain的包,里边定义一个Person类

package domain;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2,定义一个ReflectDemo1的类

package indi.zxp.reflect;
import domain.Person;

public class ReflectDemo1 {
    /**
     * 	1,Class.forName("全类名");将字节码文件加载进内存,返回Class
     * 	        多用于配置文件,将类名定义在配置文件中,读取文件,加载类
     * 	2,类名.class:通过类名的属性class获取
     * 	        多用于参数的传递
     * 	3,对象.getClass();getClass()方法在object类中定义
     * 	        多用于获取对象的字节码文件
     * @param args
     */
    public static void main(String[] args) throws Exception{
        //1.Class.forName("全类名");
        Class cls1 = Class.forName("domain.Person");
        System.out.println(cls1);
        //2.类名.class
        Class cls2 = Person.class;
        System.out.println(cls2);
        //3.对象.getClass()
        Person person = new Person();
        Class cls3 = person.getClass();
        System.out.println(cls3);

        //用 == 比较三个对象
        System.out.println(cls1 == cls2);
        System.out.println(cls1 == cls3);
    }
}

3,结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44002167/article/details/98316644