您的位置:首页 > 编程语言 > Java开发

java反射机制实例

2016-08-12 15:48 369 查看
一、简单讲解

通过类名获取类。(还有其他的方法获取类:Class.forName("...") .getClass() .class .Type .getSuperclass())

Class clazz = Class.forName("com.fc.demo.Utils");//括号里的参数为类名

获取方法

Method method = serviceManager.getMethod("getPreference", String.class);//括号里第一个参数为方法名,第二个参数为方法的形参类型

调用方法

method.invoke(Utils.newInstance(), "uid");//括号里第一个参数为类的实例(如果是静态方法此处写null),第二个参数为传入方法的形参值

二、一个实例:

import java.lang.reflect.Method;

import java.lang.reflect.InvocationTargetException;

class Person {

private String name;

public Person(String name) {

this.name = name;

}

public void setName(String msg) {

this.name = name;

}

public String getName() {

return name;

}

public void testStart() {

System.out.println("测试反射");

}

}

public class ReflectionDemo{

public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {

Person person = new Person("xiaohong");

Class clazz = person.getClass();

Method m1 = clazz.getDeclaredMethod("testStart");

Method m2 = clazz.getDeclaredMethod("setName", String.class);

Method m3 = clazz.getDeclaredMethod("getName");

m1.invoke(person);

m2.invoke(person, "姓名改为:dawei");

String name = (String) m3.invoke(person);

System.out.println(name);

}

}

输出结果:

测试反射

姓名改为:dawei

三、附录(参考其他文章)

侯捷Java反射机制

http://blog.csdn.net/njchenyi/article/details/1620939

http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html


Class object 诞生管道
示例
运用getClass()
注:每个class 都有此函数
String str = "abc";
Class c1 = str.getClass();
运用
Class.getSuperclass()
Button b = new Button();
Class c1 = b.getClass();
Class c2 = c1.getSuperclass();
运用static method
Class.forName()
(最常被使用)
Class c1 = Class.forName ("java.lang.String");
Class c2 = Class.forName ("java.awt.Button");
Class c3 = Class.forName ("java.util.LinkedList$Entry");
Class c4 = Class.forName ("I");
Class c5 = Class.forName ("[I");
运用
.class 语法
Class c1 = String.class;
Class c2 = java.awt.Button.class;
Class c3 = Main.InnerClass.class;
Class c4 = int.class;
Class c5 = int[].class;
运用
primitive wrapper classes
的TYPE 语法
Class c1 = Boolean.TYPE;
Class c2 = Byte.TYPE;
Class c3 = Character.TYPE;
Class c4 = Short.TYPE;
Class c5 = Integer.TYPE;
Class c6 = Long.TYPE;
Class c7 = Float.TYPE;
Class c8 = Double.TYPE;
Class c9 = Void.TYPE;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: