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

java 反射 案例

2016-11-01 12:49 162 查看
测试类Person:

package com.ideal.test;

public class Person {

public int name;
public int age;

public Person(int name, int age) {
this.name = name;
this.age = age;
}

public Person() {

}

public int getName() {
return name;
}

public void setName(int name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public void getStr() {
System.out.println("测试获取方法.");
}
}
TestReflect类:
<pre name="code" class="java">package com.ideal.test;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
*
* @author XHL
*
*/
public class TestReflect {
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws IllegalArgumentException, InvocationTargetException, NoSuchFieldException, SecurityException, IllegalAccessException, InstantiationException, NoSuchMethodException, ClassNotFoundException {
//第一获取类型的方式
Class c1 = Person.class;
//第二种
Class c2 = Class.forName("com.ideal.test.Person");
//第三种
Person p = new Person();
p.setAge(18);
//p.setName("XHL");
Class c3 = p.getClass();
//创建的新对象
Person PersonXue = (Person)c3.newInstance();
PersonXue.setAge(50);
PersonXue.setName(100);
//获取Person类的getStr()方法
Method method = c3.getMethod("getStr");
//调用该该方法invoke为可变参数,第一参数为对象,后面的参数为 该方法参数
method.invoke(PersonXue);
//获取修饰符 和类名
System.out.println(Modifier.toString(c3.getModifiers()) + " class " + c3.getSimpleName());

//获取所有方法名
Method[] methods = c3.getMethods();
for (Method meth : methods) {
System.out.println("method" + meth.getName());
}
// 获取所有属性
Field[] declaredFields = c3.getDeclaredFields();
for (Field field : declaredFields) {
//设置些属性是可以访问的
field.setAccessible(true);
//获取属性的值
Object object = field.get(PersonXue);
//获取属性名
System.out.println(field.getName());
//输出属性值
System.out.println(object);
}
//指定获取单一的属性
Field fieldF = c3.getDeclaredField("age");
//设置这些书属性是可以访问的
fieldF.setAccessible(true);
//重新赋值
fieldF.set(PersonXue, 100);
System.out.println(PersonXue.getAge());
//getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
Field[] declaredFieldss = c3.getDeclaredFields();
for (Field field : declaredFieldss) {
System.out.println("0:" + field.getName());
}
//getFields()获得某个类的所有的公共(public)的字段,包括父类。
Field[] fields = c3.getFields();
for (Field field : fields) {
System.out.println("1:" + field.getName());
}
//同样类似的还有getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。

}
}



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