1、通过对象获得类的class对象

  • Class aClass = 对象.getClass();
    • Person person = new Person();
      Class c1 = person.getClass();

2、通过Class.forName("包名+类名")获取类的class对象

  • Class c2 = Class.forName("com.xbky.Person");

3、通过类名获取Class对象

  • Class aClass =类名.class;
    • Class c3 = Person.class;

4、基本数据类型的包装类都有一个TYPE属性,可以直接用类名.TYPE获取

  • Class c4 = Integer.TYPE;
  • Class c4 = Byte.TYPE;

package com.xbky;

/**
 * 测试类
 */
public class 获取Class对象的几种方式 {
    public static void main(String[] args) throws ClassNotFoundException {
        // 1、通过对象获得类的class对象
        Person person = new Person();
        Class c1 = person.getClass();
        System.out.println(c1.hashCode()); // 685325104

        // 2、通过Class.forName("包+类")获取类的class对象
        Class c2 = Class.forName("com.xbky.Person");
        System.out.println(c2.hashCode()); // 685325104

        // 3、通过类名获取Class对象
        Class<Person> c3 = Person.class;
        System.out.println(c3.hashCode()); // 685325104

        // 4、基本数据类型的包装类都有一个 TYPE属性,能够获取包装类的class对象
        Class<Integer> integerClass1 = Integer.TYPE;
        Class<Integer> integerClass2 = Integer.TYPE;
        Class<Byte> byteClass = Byte.TYPE;
        System.out.println(integerClass1.hashCode()); // 460141958
        System.out.println(integerClass2.hashCode()); // 460141958
        System.out.println(byteClass.hashCode()); //1163157884


        // 5、通过Class对象获取父类的类型
        Class superclass = c1.getSuperclass();
        System.out.println(superclass); // class java.lang.Object
    }
}

/**
 * 类
 */
class Person {

}

总结:
1、获取一个普通类的Class对象,可以通过getClass()、Class.forName(String name)、类名.class三种方式,包装类可以直接调用TYPE属性获取Class对象。
2、每个类不管创建多少个类对象,它们的Class对象都是同一个,可以通过hashCode()方法来查看他们的hashCode码。