首页 > 代码库 > Java反射机制

Java反射机制

反射就是通过获取到的运行时类来获取到类所有的结构,如属性,方法,变量等


1、首先如何创建Class实例

Class class = Person.clsss;

1.1过程:源文件经过编译(javac.exe)会后。得到一个或者多个.class文件,经过运行(java.exe)这步,就需要进行类的加载(通过jvm的加载器)加载到内存中的缓存,每一个放入缓存的文件就是一个Class的实例

java.lang.Class就是反射的源头,接下来涉及到的类都在java.lang.reflect子包下面

1.2实例化Class类的三种方法:

//1调用运行时类的class属性

Class clazz1 = Person.class;

//2通过运行时磊的对象,调用getClass方法

Person p = new Person();

Class clazz2=p.getClass();

//3通过调用Class的静态方法forName(String className) 方法会报ClassNotFoundException

String className = "com.test.Person";

Class clazz3 = Class.forName(className);


2、有了Class实例以后,可以创建类对应的运行时的对象,获取类的完整的类的结构,包括:属性、方法、构造器、

包、父类、接口、泛型、注解、异常、内部类

如:Method[] m1 = class.getMethods();获取对应的运行时类中声明的权限为public的方法

       Method[] m2= class.gettDeclaredMethods();获取到对应的运行时类的所有的方法,包括private和protected

@Test
	public void test1{
		Class clazz = Class.forName("com.test.java.Animal");
		Object object = clazz.newInstance();
		Animal a = (Animal)object;
		System.out.println(a);
	}
	@Test
	public void test2{
		Class clazz = Animal.class;
		Constructor constructor = clazz.getDeclaredConstructor(String.class,int.class);
		constructor.setAccessible(true);
		Animal animal = (Animal)constructor.newInstance("Tom",20);
		System.out.println(a);
	}


还可以调用对应的运行时类的制定的结构

Java反射机制