总结:
1.获取成员变量
getFields() 获取所有public得成员变量
getField(xxx) 指定
getDeclaredFields() 获取所有得成员变量,无视private
getDeclaredField(xxx)
//
public java.lang.String cn.itcast.demain.persion.a
public java.lang.String cn.itcast.demain.persion.b
public java.lang.String cn.itcast.demain.persion.c
-----------------------
null
persion{name='null', age=0, a='zhangsan',b='null', c='null', d='null'}
========================
private java.lang.String cn.itcast.demain.persion.name
private int cn.itcast.demain.persion.age
public java.lang.String cn.itcast.demain.persion.a
public java.lang.String cn.itcast.demain.persion.b
public java.lang.String cn.itcast.demain.persion.c
private java.lang.String cn.itcast.demain.persion.d
-------------------------
null
2.获取构造方法
getConstructors()
getConstructor(xxx)
getDeclaredConstructors()
getDeclaredConstructor(xx)
public cn.itcast.demain.persion(java.lang.String,int)
public cn.itcast.demain.persion()
-----------------------------
public cn.itcast.demain.persion(java.lang.String,int)
persion{name='zhangsan', age=1, a='null',b='null', c='null', d='null'}
Process finished with exit code 0
3.获取成员方法:
getMethonds()
getMethond(xxx)
getDeclaredMethonds
getDeclaredMethond(xxx)
eat...
eat...饭
------------------------
cn.itcast.demain.persion
4.获取类名
getClass();
5.暴力反射:可让无视private
d.setAccessible(true);
/**
* 多用于配置文件中。读取文件,加载类
*/
Class cls1 = Class.forName("cn.itcast.demain.persion");
System.out.println(cls1);
/**
* 多于用参数的传递
*/
Class cls2 = persion.class;
System.out.println(cls2);
/**
* 多用于对象的获取字节码得方式
*/
persion p=new persion();
Class cls3 = p.getClass();
System.out.println(cls3);
ReflectDemo1
/**
* 获取功能:
* 2.获取构造方法
* getDeclaredConstructors()
* 返回一个反映 Constructor对象表示的类声明的所有 Constructor对象的数组 类 。
* 3.获取成员方法
*/
//0.获取Persion得Class对象
Class persionClass = persion.class;
/**
* 1.获取成员变量
* Field[] getFields()
* Field getField(String name)
* Field[] getDeclaredFields()
* Field getDeclaredField(String name)
*/
//1.Field[] getFields() 获取所有public修饰的成员变量
Field[] fields = persionClass.getFields();
for (Field field : fields) {
System.out.println(field);
}
System.out.println("-----------------------");
//2.Field getField(String name) 获取指定的public修饰的成员变量
Field a = persionClass.getField("a");
//获取成员变量a的值
persion p =new persion();
Object value = a.get(p);
System.out.println(value);
//设置a的值
a.set(p,"zhangsan");
System.out.println(p);
System.out.println("========================");
//3.Field[] getDeclaredFields() //可以获取所有的 不用考虑修饰符
Field[] declaredFields = persionClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println(declaredField);
}
System.out.println("-------------------------");
//4.Field getDeclaredField(String name)
Field d = persionClass.getDeclaredField("d");
//忽略访问权限修饰符得安全检查
d.setAccessible(true);//暴力反射
Object value1 = d.get(p);
System.out.println(value1);
ReflectDemo2
Class<persion> persionClass3 = persion.class;
//1.
Constructor[] constructors = persionClass3.getConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
System.out.println("-----------------------------");
//2.
Constructor constructor3 = persionClass3.getConstructor(String.class, int.class);
System.out.println(constructor3);
//construcetor:构造方法,创建对象;
Object name = constructor3.newInstance("zhangsan", 1);
System.out.println(name);
ReflectDemo3
Class<persion> persionClass4 = persion.class;
//1.获取指定名称方法
Method eat_method = persionClass4.getMethod("eat");
persion p=new persion();
//执行方法
eat_method.invoke(p);
Method eat1 = persionClass4.getMethod("eat", String.class);
eat1.invoke(p,"饭");
System.out.println("-----------------");
Method[] methods = persionClass4.getMethods();
for (Method method : methods) {
System.out.println(method);
String name = method.getName();
System.out.println(name);
}
System.out.println("------------------------");
//获取类名
String name1 = persionClass4.getName();
System.out.println(name1);
Person
public class persion {
private String name;
private int age;
public String a;
public String b;
public String c;
private String d;
@Override
public String toString() {
return "persion{" +
"name='" + name + '\'' +
", age=" + age +
", a='" + a + '\'' +
", b='" + b + '\'' +
", c='" + c + '\'' +
", d='" + d + '\'' +
'}';
}
public persion() {
}
public persion(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat(){
System.out.println("eat...");
}
public void eat(String food){
System.out.println("eat..."+food);
}
}