java反射机制方法的获取与调用
来源:互联网 发布:网络端口怎么接 编辑:程序博客网 时间:2024/06/01 07:19
6.反射方法的获取和调用(反射的作用就是写框架和工具类,平时少用反射,因为反射操作非常消耗性能)
方法获取思路:1.方法获取 思路过程:1.获取类对应的class对象 2.通过class对象调用API中的方法获取该类中的方法
方法调用思路:1.获取类的字节码对象 2.通过字节码对象获取类中的方法对象 3.通过方法对象调用Class中的方法invoke来调用执行方法 参数obj:为方法对象所在的底层类对象 args:为方法实际所传的参数 返回值以object来接收
* 如果没有返回值则不接收
package javaInvoke;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 通过类的class对象获取对象的方法并且调用方法
* @author Administrator
*
*/
class test{
public test(){
}
/*
private test(){
}
*/
public test(String name){
}
public test(String name,int items){
}
private test(String name,int items,double dou){
}
public String sayHello(String name){
System.out.println("你好"+name+"\n");
return name;
}
public void sayHi(String name,String city){
System.out.println("你好"+city+"的"+name);
}
private void sayGoodBye(String name){
System.out.println("再见"+name);
}
}
public class invokeMethod {
/**
*方法获取 思路过程:1.获取类对应的class对象 2.通过class对象调用API中的方法获取该类中的方法
*
* @param args
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InstantiationException
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public static void main(String[] args) throws Exception {
/*获取类对应的字节码对象*/
Class claz = test.class;
/*获取类中所有public方法以及所有的继承方法和接口*/
Method[] meths = claz.getMethods();
for(Method meth:meths){
System.out.println(meth+"获取所有public方法和继承的方法");
}
/*获取指定的方法(public修饰)*/
Method me = claz.getMethod("sayHello", String.class);
System.out.println(me+"获取指定参数的方法");
/*获取指定的私有方法*/
Method mee = claz.getDeclaredMethod("sayGoodBye", String.class);
System.out.println(mee+"获取指定的私有方法");
/*************************方法调用*****************************/
/**
* 方法调用思路:1.获取类的字节码对象 2.通过字节码对象获取类中的方法对象 3.通过方法对象调用Class中的方法invoke来调用执行方法 参数obj:为方法对象所在的底层类对象 args:为方法实际所传的参数 返回值以object来接收
* 如果没有返回值则不接收
* public Object invoke(Object obj,Object args);
*/
Object obj= me.invoke(claz.newInstance(), "反射方法的参数");
System.out.println(obj+"***"+"执行反射方法返回的结果");
/*调用私有方法*/
/*调用私有方法之前必须设置安全访问权限*/
mee.setAccessible(true);
Object objP =mee.invoke(claz.newInstance(), "byebye");
System.out.println(objP+"***"+"执行(私有)反射方法返回的结果");
/*
* 静态方法的获取是一样的思路;只是静态方法的调用第一个参数可以不用传方法所在的底层对象;注意的是私有方法调用前需要指定访问权限为true
*/
Class claz1=Class.forName("javaInvoke.test");
System.out.println(claz1+"全限定名class字节码对象获取方式");
Method sayNo = claz1.getMethod("sayNo", String.class);
System.out.println(sayNo+"获取sayNo静态方法对象");
Method sayYes = claz1.getDeclaredMethod("sayYes", String.class);
System.out.println(sayYes+"获取sayYes静态私有方法");
/**静态方法的调用**/
sayNo.invoke(null, "jane");
sayYes.setAccessible(true);
sayYes.invoke(null, "jim");
}
- java反射机制方法的获取与调用
- Java反射机制获取/调用类的属性和方法
- java 反射机制的几个调用方法
- java反射机制获取成员变量调用和调用实例方法的实现
- java反射机制调用方法
- java反射机制调用方法
- Java反射机制-调用方法
- 利用Java反射机制调用其他类的main方法
- 通过java反射机制动态调用某方法的总结
- Java方法的动态调用(采用反射机制)
- 利用java反射机制调用类的私有方法
- 利用java反射机制实现自动调用类的方法
- 利用Java反射机制调用其他类的main方法 .
- Java反射机制调用源类的方法实例
- JAVA反射机制调用源类的私有方法
- 利用Java反射机制调用含数组参数的方法
- java如何利用反射机制调用类的私有方法
- java反射机制怎样调用类的私有方法?
- 一个隐式转换引起的问题
- swift switch
- HRBUST 1188 区间最大值 I
- Leet Code OJ 20. Valid Parentheses [Difficulty: Easy]
- 关于Font的方法使用
- java反射机制方法的获取与调用
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误解决方法
- Intellij IDEA中集成tortoiseSVN
- 解决position:fix中的固底定位在跳转后返回的抖动
- Android大图片裁剪终极解决方案 原理分析
- 为什么a标签中使用img后的高度多了几个像素?(转)
- Git怎样撤销一次分支的合并Merge
- VC访问数据库学习总结
- 判断对象是否相等---重写equals方法