package reflection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestRelection {
/*
* 1.测试反射的小例子
* 2.要具备面向对象的思维,class是对象,方法是对象,方法参数是对象,类里面的属性
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
String str="T";
System.out.println("抛出异常了");
Class c= Class.forName(str);//将class对象加载进来
System.out.println("没有找到");
Object o=c.newInstance();//创建对应的类的实例
Method[] methods=c.getMethods();//得到这个类中对应的方法
//遍历类中的方法,得到一个方法的数组
for(Method m:methods){
String s=m.getName();
System.out.println(s);
}
for(Method m:methods){
if(m.getName().equals("mm")){
m.invoke(o);//arguments代表参数不合法
for(Class p:m.getParameterTypes()){//获取参数的类型
System.out.println(p);
}
}
if(m.getName().equals("m1")){
m.invoke(o, 1);
Class returnType=m.getReturnType();//获取方法的返回值类型
System.out.println(returnType.getName());
}
}
}
}
class T{
int i;
String s;
//静态代码块这要类被夹在就会执行的
static{
System.out.println("T loaded....");
}
public T(){
System.out.println("构造函数执行了,创建对象了");
}
public void mm(){
System.out.println("mm追上了");
}
public void m1(int i,int j) {
System.out.println("值:"+i+j);
}
public String getS() {
return s;
}
}
在src目录下新建一个:test.Properties文件,里面内容写上要找的class类: class=T