码迷,mamicode.com
首页 > 编程语言 > 详细

Java反射机制

时间:2014-11-05 19:43:40      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   java   for   sp   文件   on   2014   

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


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反射机制

标签:blog   io   ar   java   for   sp   文件   on   2014   

原文地址:http://blog.csdn.net/runningtortoises/article/details/40826283

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!