3、java反射机制总结

1、已知类名,获取属性名字
//加载类
Class<?> classType=Class.forName("com...."); //包+类名

//获取属性名字
Filed[] fields=class.Type.getDeclaredFields();

//取出每一个属性
for(int i=0;i<fields.length;i++){
Field field=fields[i];
//获取属性名字
String fieldName=field.getName();
}


2、已知类名、获取方法名字
//加载类
Class<?> classType=Class.forName("类名..包名");
//获取方法
Method[] methods=classType.getDeclaredMethods();
//通过for循环得到方法名字
for(int i=0;i<methods.length;i++){
    String methodName=methods[i].getName;       
}


3、通过上面获取的方法,然后获取该方法的参数类型
例如public void sing(String name){ //代码 }
方法sing的参数类型就是String

//获取本方法的参数类型,并存入数组
Class<?>[] parameterTypes=methods[i].getParemeterTypes();
//获取参数名字
for(int j=0;j<parameterTypes[j].length;j++){
    String parameterName=parametertypes[j].getName();
}


4、运行方法
公式:方法.invoke(对象,参数1,参数2);

如已知:public void sing(String name,int age){//代码}

01、通过方法名字先得到sing方法,(方法名,参数类型1.class,参数类型2.classMethod method=classType.getMethod(sing,String.class,int.class);

02、运行该方法
method.invoke(对象,name,age);

说明:classType为类的字节码文件


5、获取类的字节码文件的方法
01、已知类名,获取类的字节码方法看最上面的1

02、已知对象,获取类的字节码
Class classType=对象.getClass();

具体例子看下面链接
https://blog.csdn.net/nba_linshuhao/article/details/82555689

https://blog.csdn.net/nba_linshuhao/article/details/82561165

https://blog.csdn.net/nba_linshuhao/article/details/82619888

猜你喜欢

转载自blog.csdn.net/nba_linshuhao/article/details/82732699