Reflection 反射
程序员文章站
2024-01-20 22:27:16
...
1.得到对象的属性字段
(1)getFields()
public class PropertyTest {
public static void main(String[] args) {
Met p = new Person();
// Person p=new Person(); //结果一样
// Zou p=new Person(); //结果一样
Class c = p.getClass();
Field[] f = c.getFields();
for (int i = 0; i < f.length; i++) {
System.out.println(f[i]);
}
}
}
class Person extends Zou implements Met {
public String name;
protected String address;
private int age;
int kk;
}
interface Met {
public String interfaceFiled = "ff";
}
abstract class Zou {
public String abstractFiled;
}
运行结果
public java.lang.String com.flh.reflection.Person.name
public static final java.lang.String com.flh.reflection.Met.interfaceFiled
public java.lang.String com.flh.reflection.Zou.abstractFiled
结论:相信已经一目了然,getFields()返回该类(包括实现的接口和继承的抽象类)的所有可访问的公共字段。
另:getField(String name)返回某一具体的字段。
2.得到对象的属性值
public class FieldTest {
public static void main(String[] args) {
User user=new User();
user.name="yyming";
Class c=user.getClass();
try {
Field f=c.getField("name");
Object o=f.get(user);
System.out.println(o);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
class User{
public String name;
protected String address;
private int age;
int kk;
}
运行结果:yyming
f.get(user)通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
3.得到静态的属性值
见上上面的例子
Object o=f.get(user);
Object o=f.get(c);
即可以通过类的实例,也可以通过Class类的实例得到。
4.得到对象的方法
public class MethodTest {
public static void main(String[] args) {
Animal a = new Animal();
Class c = a.getClass();
Method[] method = c.getMethods();
for (int i = 0; i < method.length; i++) {
System.out.println(method[i]);
}
}
}
class Animal {
public void eat() {
System.out.println("动物吃东西");
}
public static void eat(String s) {
System.out.println("动物吃" + s);
}
private void lasi() {
System.out.println("动物拉斯");
}
protected void run() {
System.out.println("动物跑");
}
}
运行结果:
public void com.flh.reflection.Animal.eat()
public static void com.flh.reflection.Animal.eat(java.lang.String)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
上一篇: 通过JAVA的反射调用类中的公有私有方法
下一篇: wpf - Text Viewer