JAVA有三种方式可以获得Class对象
1、通过类名.class方式获得,Class<?> cType = ClassName.class;
public class Client {
public static void main(String[] args) {
Class<?> cType1 = Test.class;
}
}
class Test{
static {
System.out.println("static block");
}
{
System.out.println("dynamic block");
}
}
2、通过Class.forName()方法获得,Class<?> cType = Class.forName("类全名");
package com.lynstudy;
public class Client {
public static void main(String[] args) {
try {
Class<?> cType2 = Class.forName("com.lynstudy.Test");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class Test{
static {
System.out.println("static block");
}
{
System.out.println("dynamic block");
}
}
3、通过对象名.getClass()方法获取,Class<?> cType3 = objName.getClass();
package com.lynstudy;
public class Client {
public static void main(String[] args) {
Class<?> cType3 = new Test().getClass();
}
}
class Test{
static {
System.out.println("static block");
}
{
System.out.println("dynamic block");
}
}
总结:三种方式均能够获得Class对象,区别是方法一不执行静态块和动态构造块,方法二执行静态块、不执行动态构造块,方法三需要创建对象,静态块和动态构造块均会执行;
注意:静态块仅在类加载时执行一次,若类已加载便不再重复执行;而动态构造块在每次new对象时均会执行