java反射
public class Demo2 {
public static void main(String[] args) throws Exception {
//取得Person类对应的字节码对象Class
Class clazz = Class.forName("cn.itcast.java.reflect.Person");
//取得该类的唯一构造方法
//Constructor c = clazz.getConstructor(null);
//Constructor c = clazz.getConstructor(String.class,int.class);
Constructor c = clazz.getDeclaredConstructor(null);
//创建实例
//Person p = (Person) c.newInstance(null);
//Person p = (Person) c.newInstance("berry",10);
//设置非public成员的访问性,默认false即不可访问性
c.setAccessible(true);
Person p = (Person) c.newInstance(null);
//执行方法
p.show();
}
}
public class Demo3 {
public static void main(String[] args) throws Exception {
Person p = new Person();
Class c = Class.forName("cn.itcast.java.reflect.Person");
Field f = c.getDeclaredField("name");
f.setAccessible(true);
f.set(p,"杰克");//p.setName("杰克")
System.out.println("用户名:" + p.getName());
}
}
public class Demo4 {
public static void main(String[] args) throws Exception {
Class c = Class.forName("cn.itcast.java.reflect.Person");
Constructor con = c.getConstructor(null);
Person p = (Person) con.newInstance(null);
Method m = c.getDeclaredMethod("goodbye",null);
m.setAccessible(true);
String returnValue = (String) m.invoke(p,null);
System.out.println(returnValue);
//Method m = c.getMethod("show",String[].class,double.class);
//m.invoke(p,new String[]{"sing","dance"},5000);//new Person().show()
}
}
public class Demo6 {
public static void main(String[] args) throws Exception {
//加载属性文件,取得类名的方法名
Properties props = new Properties();
InputStream is = new FileInputStream("src/cn/itcast/java/reflect/class.properties");
props.load(is);
String className = props.getProperty("className").trim();
String methodName = props.getProperty("methodName").trim();
//通过反射,执行该类的方法
Class c = Class.forName(className);
Constructor con = c.getConstructor(null);
Method m = c.getDeclaredMethod(methodName,null);
m.setAccessible(true);
m.invoke(con.newInstance(null),null);
}
}