public class ReflectDemo {

    public static void main(String[] args) throws ClassNotFoundException {

        // 获取Class对象的三种方式

        // 1、当类文件没有加载到内存中,还是源代码阶段时,可以用Class类中的静态方法forName(String className)获取Class对象
        // String className是全类名(包名+类名)
        Class clazz1 = Class.forName("com.unit1.test.reflect.Dog");
        System.out.println(clazz1);

        // 2、当类文件编译为class文件加载到内存中时,可以用类名.class获取Class对象
        Class clazz2 = Dog.class;
        System.out.println(clazz2);

        // 3、当new了类对象时,可以用对象.getClass()获取Class对象,所有的对象都能获取到类的字节码文件,getClass()是定义在Object类中的
        Dog dog = new Dog();
        Class clazz3 = dog.getClass();
        System.out.println(clazz3);

        // 一个类的Class对象是唯一的
        System.out.println(clazz1 == clazz2);
        System.out.println(clazz1 == clazz3);

    }

}
public class Dog {

    private String name;
    private int age;

    public Dog() {}

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public void eat() {
        System.out.println("吃");
    }

    @Override
    public String toString() {
        return "Dog [name=" + name + ", age=" + age + "]";
    }

}