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()
分享到:
相关推荐
之前上课的时候老师总结的JavaReflection反射学习资料,内容简单易懂,浅显易懂,适合小白入手学习。。
北大青鸟ACCP6.0 第三学期 Y2 JAVA方向 reflection 反射 基础复习 上课示例
package day29; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { ...
java反射获取类的名称、字段和方法信息
javase基础之反射
讲述java 反射机制的典型示例,通过学习应该能很好的掌握
主要介绍了实例介绍PHP的Reflection反射机制,本文从使用Reflection获取一个类的信息角度来介绍PHP的Reflection反射机制,需要的朋友可以参考下
Unity Planar Reflection平面反射
主要介绍了PHP中的reflection反射机制测试例子,从本文可以学到一些反射的使用方法,需要的朋友可以参考下
详细解说reflection 和annotation
圣思园 reflection(Java反射) 课件 圣思园 reflection(Java反射) 课件 圣思园 reflection(Java反射) 课件
Java Reflection (JAVA反射)详解
反射(Reflection)是C#里很重要的一个特性,源码是我写的一篇关于反射的文章的示例,有详细的解释,是学习反射的好实例。
C#反射(Reflection)详解 什么是反射 命名空间和装配体的关系
供初学反射的开发者提供一个小例子,希望各位多多指点
C# 反射例ReflectionExample C# 反射例ReflectionExample C# 反射例ReflectionExample
Java Reflection (JAVA反射.mht
c# 反射(Reflection)例子