版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一、 如何获取Class类
Class类的特点:
public final class Class<T> implements java.io.Serializable,
GenericDeclaration,
Type,
AnnotatedElement
private Class(ClassLoader loader) {
// Initialize final field for classLoader. The initialization value of non-null
// prevents future JIT optimizations from assuming this final field is null.
classLoader = loader;
}
Class类不可以被继承(final):
Class类实现了 java.io.Serializable,
Class类的构造方法为 private 不可以创建对象
Class在 package java.lang 包里,可以直接使用
1、通过Class.forName()静态方法:
try {
Class clazz =Class.forName("reflect.Student");
System.out.println(clazz.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
此时输出的为:类的地址:注(此时Student被包裹在reflect包中)
2、通过类名调用:
Class clazz;
clazz =Student.class;
System.out.println(clazz.getName());
3、通过创建的对象引用 getClass() 方法:
Class clazz;
clazz=new Student().getClass();
System.out.println(clazz.getName());
4、基本类型使用包装类.TYPE;包装类直接使用.class:
package reflect;
public class Test{
public static void main(String[] args) {
Class clazz;
clazz=Integer.TYPE;
System.out.println(clazz);
clazz =Integer.class;
System.out.println(clazz);
}
}
5、数组类的引用:
package reflect;
public class Test{
public static void main(String[] args) {
Class clazz;
clazz=String[].class;
System.out.println(clazz);
}
}
6、找到父类对应的Class类 class.getSuperclass:
package reflect;
public class Test{
public static void main(String[] args) {
Class clazz;
clazz=Student.class.getSuperclass();
System.out.println(clazz);
}
}
此时Student无显式父类的继承关系(Object):