反射

72 阅读1分钟

获取Class类实例的几种方法

package com.ch.test;
public class TestClass {
    public static void main(String[] args) throws ClassNotFoundException {
        Person person=new Student();
        System.out.println("这个人是:"+person.name);
    }
}

class Person{
    public String name;

    public Person() {
    }

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

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

class Student extends Person{
    public Student(){
        this.name="学生";
    }
}

class Teacher extends Person{
    public Teacher() {
        this.name="老师";
    }
}

1. 通过对象获取

Class c1 = person.getClass();
System.out.println(c1.hashCode()

2. 通过forName获取

Class c2 = Class.forName("com.ch.test.Student");
System.out.println(c2.hashCode());

3. 通过类名.class获取

Class c3 = Student.class;
System.out.println(c3.hashCode());

4. 基本内置类型的包装类都有一个type属性

Class c4 = Integer.TYPE;
System.out.println(c4.hashCode());

5. 获得父类类型

Class c5 = c1.getSuperclass();
System.out.println(c5);

输出结果

image.png