使用反射技术操作方法所有细节
来源:互联网 发布:unity3d什么语言最好 编辑:程序博客网 时间:2024/05/20 05:09
1、使用反射技术操作方法所有细节
2、代码演示如下:
package com.reflect.api.method;import java.lang.reflect.*;import com.reflect.bean.Cat;/** * 使用反射技术操作方法所有细节 * @author tiger * @Date 2017年8月3日 */public class ReflectMethod {public static void main(String[] args) throws Exception, Exception {System.out.println("--------------1、获取所有方法------------");getMethod(Cat.class);System.out.println("-------2、获取指定方法,并执行此方法 invoke-------");Cat cat = new Cat();//有参Method m = callMethod(Cat.class, "eat",int.class,String.class);m.invoke(cat, 10,"老鼠");//无参Method m2 = callMethod(Cat.class, "eat");m2.invoke(cat);System.out.println("--------------3、获取指定方法中细节信息---------");//有参,有返回值getMethodInfo(m);//无参,无返回值getMethodInfo(m2);System.out.println("--------------4、利用反射调用类构造器------------");getConstructor();}/** * 1、获取所有方法 * @param clzz */public static void getMethod(Class> clzz){//获取所有已经声明的方法,遍历出来Method[] methods = clzz.getDeclaredMethods();for (Method method : methods) {System.out.println(method);}}/** * 2、获取指定方法,并执行此方法 invoke * @param clzz * @param name * @throws Exception * @throws NoSuchMethodException */public static Method callMethod(Class> clzz,String mName,Class>...types) throws NoSuchMethodException, Exception{//传入方法名和类型参数[类型.class](有多少传多少)Method m = clzz.getDeclaredMethod(mName,types);//公开权限,以可以操作执行所有方法m.setAccessible(true);System.out.println(m);return m;}/** * 3、获取指定方法中细节信息 * 1、获取类型参数 * 2、返回值 * 3、权限修饰符 1:公有 2:私有 4:protected 0:默认default * @param m */public static void getMethodInfo(Method m){//1、获取类型参数Class>[] types = m.getParameterTypes();System.out.print("此方法的参数列表:");for (Class> c : types) {System.out.print(c+",");}System.out.println();//2、返回值Class> ret = m.getReturnType();System.out.println("此方法返回值:"+ret);//3、权限修饰符int mod = m.getModifiers();System.out.println("权限修饰符:"+mod);}/** * 4、利用反射调用类构造器 * @throws Exception */public static void getConstructor() throws Exception{System.out.println("--获取所有构造器--");Constructor>[] cons = Cat.class.getDeclaredConstructors();for (Constructor> c : cons) {System.out.println(c);}System.out.println("--调用了无参构造器--");Constructor> c = Cat.class.getDeclaredConstructor();Object object = c.newInstance();System.out.println(object);System.out.println("--调用了有参构造器--");Constructor> c2 = Cat.class.getDeclaredConstructor(String.class);Object object2 = c2.newInstance("tiger");System.out.println(object2);}}package com.reflect.bean;public class Cat {protected String name = "老猫";public int age = 12;private Integer score = 100;public Cat() {System.out.println("我是无参"+name);}public Cat(String name) {this.name = name;System.out.println("我是有参"+name);}public int eat(int a,String b){System.out.println("调用有参方法:" + name+"吃了" + a + "只"+ b);return a;}void eat(){System.out.println("调用无参方法:" +name+"没东西吃了");}private int sleep(){System.out.println("Cat.sleep()");return 0;}@Overridepublic String toString() {return "Cat [name=" + name + ", age=" + age + ", score=" + score + "]";}}
阅读全文
1 0
- 使用反射技术操作方法所有细节
- STL中clear()操作方法的使用细节
- ACE技术使用细节
- java使用JDBC技术连接数据库操作方法
- 使用java反射技术完成对象所有属性值的输出
- 使用java反射技术完成对象所有属性值的输出
- 使用java反射技术完成对象所有属性值的输出
- 反射三 操作方法1
- 反射四 操作方法2
- 关于直播,所有的技术细节都在这里了
- 关于直播,所有的技术细节都在这里了
- 关于直播,所有的技术细节都在这里了!
- 关于直播,所有的技术细节都在这里了
- 关于直播,所有的技术细节都在这里了
- 关于直播,所有的技术细节都在这里了
- 关于直播,所有的技术细节都在这里了!
- 关于直播,所有的技术细节都在这里了
- 关于直播,所有的技术细节都在这里了
- 从一个文件夹提取普片到另一个文件夹
- 学生信息系统错误
- Hibernate Hql 查询出现 USER is not mapped [FROM USER WHERE
- Java IO知识点总结三(字符流)
- WebView的WebSettings配置
- 使用反射技术操作方法所有细节
- 暑期集训之还是畅通工程
- MFC 树控件如何隐藏相应节点的复选框
- myeclipse插件SVN报错The working copy is too old
- 屏蔽字 随写
- 畅通工程
- 剑指offer 07 用两个栈实现队列
- windows下VC高度封装,人脸识别,人脸匹配应用FaceMatch-第一章-《零度屏幕录像软件》
- Git典型工作流