Java中的反射 ————Class类

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45104211/article/details/99826168

一、 如何获取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):

猜你喜欢

转载自blog.csdn.net/weixin_45104211/article/details/99826168