//反射调用静态方法。
try{
Class> perClass=Class.forName("reflector.Person");
Method method= perClass.getMethod("staticMethod",String.class);
method.invoke(perClass.newInstance(),"zhangzhen");
}catch(Exception e) {
e.printStackTrace();
}//反射创建对象
try{
Class> perClass=Class.forName("reflector.Person");
Person person=(Person)perClass.getConstructor().newInstance();
person.setAge(1);
System.out.println(person.getAge());
}catch(Exception e) {
e.printStackTrace();
}//反射调用实例方法
try{
Class> perClass=Class.forName("reflector.Person");
Method method= perClass.getMethod("interfaceMethod");
method.invoke(perClass.newInstance());
}catch(Exception e) {
e.printStackTrace();
}//反射调用私有方法
try{
Class> perClass=Class.forName("reflector.Person");//再次说明,你要调用私有的方法,一定要用这个getDeclaredMethod ,因为只有这个才是没有访问权限的控制。
Method method = perClass.getDeclaredMethod("privateMethod");
method.setAccessible(true);
method.invoke(perClass.newInstance(),null);
}catch(Exception e) {
e.printStackTrace();
}//反射调用重载方法
try{
Class> perClass=Class.forName("reflector.Person");//反射调用重载方法的时候,主要是由声明时候的参数类型决定的,和你具体传值是无关的。
Method method = perClass.getDeclaredMethod("SayHello",int.class);
method.setAccessible(true);
method.invoke(perClass.newInstance(),Integer.valueOf(300));
}catch(Exception e) {
e.printStackTrace();
}//反射越过泛型检查 ;
try{
ArrayList arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(3);
Method method= arrayList.getClass().getMethod("add", Object.class);
method.invoke(arrayList,"test");for (int i = 0; i
System.out.println(arrayList.get(i));
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}//反射动态加载
Properties properties = newProperties();
System.out.println(System.getProperty("user.dir"));
properties.load(new FileReader("1.txt"));
String className=properties.getProperty("ClassName");
String methodName=properties.getProperty("MethodName");try{
Class> perClass =Class.forName(className);//反射调用重载方法的时候,主要是由声明时候的参数类型决定的,和你具体传值是无关的。
Method method =perClass.getDeclaredMethod(methodName);
method.setAccessible(true);
method.invoke(perClass.newInstance());
}catch(Exception e) {
e.printStackTrace();
}