Java反射机制

2017-01-16  本文已影响12人  chad_it

通过反射创建一个对象(三步)
第一步:获取类的信息
参数:包名+类名
Class class = Class.forName("com.javawu.reflect.Demo");
第二步:获取类的构造方法
参数:构造方法需要传递的参数的Class
Constructor constructor = class.getConstructor(String.class, int.class);
第三步:根据获取到的构造方法传递相应的参数创建对象
Demo demo = (Demo)constructor.newInstance("张三", 55);

反射机制是什么

反射机制是在运行状态中,对于任意一个类,能够知道这个类的所有属性和方法,对于任意一个对象,能够调用它的任意一个方法和属性。
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的放射机制。

反射机制能做什么


获取类的类信息

//参数需要带上类所在的包名
Class class = Class.forName("com.javawu.reflect.Person");

获取类中的所有公有构造方法

Constructor[] constructors = class.getConstructors();

获取类中的所有的共有的和私有的构造方法

constructors = class.getDeclaredConstructors();

获取某个构造方法

Constructor constructor = class.getConstructor();
constructor = class.getConstructor(String.class, int.class);
//传递数组参数
//Class[] params = {String.class, int.class};
//class.getConstructor(params);
constructor.setAccessible(true);
person = (Person)constructor.newInstance("参数");

获取构造方法名

constructor.getName();

获取构造方法的参数的Class数组

Class[] params = constructor.getParemeterTypes();

获取类中的所有public方法(包括父类的方法)

Method[] methods = class.getMethods();

获取类中所有的方法(不包括父类的方法)

methods = class.getDeclaredMethods();

获取指定方法名和参数的方法

//第一个参数:方法的名字 第二个参数:方法的参数的Class
Method method = class.getMethod("eat", null);

调用方法

Person person = new Person();
//第一个参数:执行方法的对象 第二个参数:方法的参数
method.invoke(person, null);

调用静态方法

method.invoke(null, 参数)

获取类中的所有public属性

Field[] fields = class.getFields();

获取类中的所有属性

fields = class.getDeclaredFields();

获取指定属性名的属性

Field field = calss.getField("name");
上一篇下一篇

猜你喜欢

热点阅读