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
三、附录(参考其他文章)
通过类名获取类。(还有其他的方法获取类: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; |
相关文章推荐
- java反射机制实例解析
- Java反射机制总结(实例分析)(一)
- Java反射机制实例代码分享
- JAVA反射机制实例教程
- Java反射机制可以动态修改实例中final修饰的成员变量吗?
- 详解Java反射机制实例
- java反射机制获取成员变量调用和调用实例方法的实现
- JAVA反射机制实例详解
- Java反射机制总结(实例分析)(二)
- Java知识总结:Java反射机制(用实例理解)
- 通过实例学习java反射机制的强大
- java反射机制,实例
- JAVA反射机制深入学习(二)实例演示JAVA反射机制的应用
- Java反射机制实例详解
- Java反射机制调用源类的方法实例
- java反射机制的两个具体应用实例
- JAVA反射机制深入学习(二)实例演示JAVA反射机制的应用
- java反射机制实例解析
- Java反射机制及实例
- 详解Java反射机制实例