获取Class对象的三种方法

获取Class对象的三种方法

有三种方式可以获取Class对象,但是这三种方式有所区别。

首先准备一个Animal类,用于测试

public class Animal {
    static {
        System.out.println("静态代码块");
    }

    {
        System.out.println("动态代码块");
    }
}

第一种方法,通过Animal.class获取

public class Main {
    public static void main(String[] args) {
        Class<?> clazz = Animal.class;
        System.out.println("class name:" + clazz.getName());
    }
}

执行结果:class name:com.foo.Animal

这种方式不会执行类的静态代码块,也不会执行动态代码块。

第二种方法,通过Class.forName()获取

public class Main {
    public static void main(String[] args) {
        Class<?> clazz = null;
        try {
            clazz = Class.forName("com.foo.Animal");
            System.out.println("class name:" + clazz.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

执行结果:

静态代码块
class name:com.foo.Animal

通过名称字符串获取Class对象时,会执行静态代码块,但不会执行动态代码块。

第三种方法,通过对象的getClass()方法获取

public class Main {
    public static void main(String[] args) {
        Class<? extends Animal> clazz = new Animal().getClass();
        System.out.println("class name:" + clazz.getName());
    }
}

执行结果:

静态代码块
动态代码块
class name:com.foo.Animal

由于创建了对象,所以静态代码块和动态代码块都执行了。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注