目录

  • 获取class对象:
  • 三种方式:
  • 代码过程:
  • 结论:


获取class对象:

三种方式:

  1. 【只有字节码文件没有进入内存中】Class.forName(“全类名”)【将字节码文件加载进内存,返回class对象】
  • 配置文件,将类名定义在配置文件中,读取文件加载类。
  1. 【已加载,通过类名获取】类名.class【通过类名的属性class获取】
  • 传参数
  1. 【拥有对象,通过对象获取】对象.getClass()【getClass()方法在Object类中定义着】
  • 对象的获取字节码的方式

代码过程:

java反射获取接口 java 反射获取对象_class


创建两个类,一个测试调用

[Person]

package com.yuhang.domain;

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

    public Person() {
    }

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

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

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

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

[Student]

package com.yuhang.domain;

public class Student {
}

[ReflectDemo1]

package com.yuhang.reflect;

import com.yuhang.domain.Person;
import com.yuhang.domain.Student;

public class ReflectDemo1 {

    public static void main(String[] args) throws Exception {
        //1.Class.forName("全类名")
        Class cls1 = Class.forName("com.yuhang.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);//true
        System.out.println(cls1 == cls3);//true

        Class studentClass = Student.class;
        System.out.println(cls1 == studentClass);//false
    }
}

java反射获取接口 java 反射获取对象_class_02

结论:

同一个字节码文件Class,在程序运行中只会加载一次,无论那种class对象获取方式,都是获取的同一个。

2021年9月26日15:39:39