Person类 省略
package com.reflect.constructor;
import java.lang.reflect.Constructor;
/*
* 反射:通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法
* Class:
* Field
* Constructor
* Method
*/
public class ReflectDemo {
<span style="white-space:pre"> </span>public static void main(String[] args) throws Exception {
/*<span style="white-space:pre"> </span>Person p = new Person();
<span style="white-space:pre"> </span>Class c = p.getClass();
<span style="white-space:pre"> </span>Person p2 = new Person();
<span style="white-space:pre"> </span>Class c2 = p2.getClass();
<span style="white-space:pre"> </span>System.out.println(p == p2); // false
<span style="white-space:pre"> </span>System.out.println(c == c2); // true
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>Class c3=Person.class;
//<span style="white-space:pre"> </span>int.class;
//<span style="white-space:pre"> </span>String.class;
<span style="white-space:pre"> </span>System.out.println(c==c3); //true
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//开发常用
<span style="white-space:pre"> </span>Class c4=Class.forName("com.reflact.Person"); //全路径
<span style="white-space:pre"> </span>System.out.println(c==c4); //true
*/<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>Class c5=Class.forName("com.reflect.Person");
<span style="white-space:pre"> </span>//构造方法
//<span style="white-space:pre"> </span>Constructor[] cons = c.getConstructors(); 输出带public的
//<span style="white-space:pre"> </span>Constructor[] cons = c.getDeclaredConstructors();
//<span style="white-space:pre"> </span>for(Constructor con:cons){
//<span style="white-space:pre"> </span>System.out.println(con); //public com.reflact.Person()
//<span style="white-space:pre"> </span> //public com.reflact.Person(java.lang.String,int,java.lang.String)
//<span style="white-space:pre"> </span>
//<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>Constructor con = c5.getConstructor();
<span style="white-space:pre"> </span>Object obj = con.newInstance();
<span style="white-space:pre"> </span>System.out.println(obj);
<span style="white-space:pre"> </span>}
}
package com.reflect.field;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/*
* 反射:通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法
* Class:
* Field
* Constructor
* Method
*/
public class ReflectDemo {
<span style="white-space:pre"> </span>public static void main(String[] args) throws Exception {
/*<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//开发常用
<span style="white-space:pre"> </span>Class c4=Class.forName("com.reflact.Person"); //全路径
<span style="white-space:pre"> </span>System.out.println(c==c4); //true
*/<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>Class c1=Class.forName("com.reflect.field.Person");
<span style="white-space:pre"> </span>//构造方法
<span style="white-space:pre"> </span>Constructor con = c1.getDeclaredConstructor();
<span style="white-space:pre"> </span>Object obj = con.newInstance();
<span style="white-space:pre"> </span>Field addressField=c1.getField("address");
<span style="white-space:pre"> </span>//反射 逆向
<span style="white-space:pre"> </span>addressField.set(obj, "北京");
<span style="white-space:pre"> </span>System.out.println(obj);
<span style="white-space:pre"> </span>}
}
package com.reflect.method;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
/*
* 反射:通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法
* Class:
* Field
* Constructor
* Method
*/
public class ReflectDemo {
public static void main(String[] args) throws Exception {
/*
//开发常用
Class c4=Class.forName("com.reflact.Person"); //全路径
System.out.println(c==c4); //true
*/
Class c1=Class.forName("com.reflect.field.Person");
//构造方法
// Method[] methods=c1.getMethods(); //获取包括父亲的
// Method[] methods=c1.getDeclaredMethods();//获取自己的方法
// for(Method method:methods){
// System.out.println(method);
// }
Constructor con =c1.getConstructor();
Object obj = con.newInstance();
/*
* Person p = new Person(); p.show;
*/
Method m1=c1.getMethod("show");
m1.invoke(obj);
}
}