通过反射 拿到方法

package com.sxt.method1;
/*
 * 通过反射 拿到方法
 */
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestMethod {
    public static void main(String[] args) throws Exception {
        //获取类信息
        Class<?> class1 = Class.forName("com.sxt.entity.Student");
        //创建对象
        Object obj = class1.newInstance();
        //获取所有方法
        Method[] methods = class1.getDeclaredMethods();
        //遍历查看所需要的方法信息
        for(Method m : methods){
            System.out.println(m.getName()+"\t"+m.getReturnType()+"\t"+Modifier.toString(m.getModifiers()));
        }
        System.out.println("-------------------------------------");
//        //获取对应的public方法
//        Method method = class1.getMethod("sum", int.class,int.class);
//        Object result = method.invoke(obj, 3,4);
//        System.out.println("result:"+result);

        //获取private的对应方法  突破了封装的限制
        Method m = class1.getDeclaredMethod("sum", int.class,int.class);
        System.out.println(m.getName()+"\t"+m.getReturnType()+"\t"+Modifier.toString(m.getModifiers()));
        m.setAccessible(true);
        Object result = m.invoke(obj, 3,4);
        System.out.println("result:"+result);

    }
}
时间: 2024-08-01 20:22:54

通过反射 拿到方法的相关文章

反射类的方法(其中main方法比较特殊)

package reflet; import java.util.List; public class person { public String name="hahaah"; public void aa1()//方法 { System.out.println("aa1"); } public void aa1(String name,int password) { System.out.println(name+":"+password);

反射之获取方法信息

本文接上文"反射之Class类的使用",以编写一个用来获取类的信息(成员函数.成员变量)的工具类来讲解"反射之获取方法信息" 1.新建工具类,命名ClassUtil,输入一个对象(Object),输出该对象的基础信息方法(printClassMessage) 1 /** 2 * 打印类的信息,成员函数.成员变量 3 * Created by Format on 2017/6/3. 4 */ 5 public class ClassUtil { 6 7 } 2.获取类

代替Reflection(反射)的一些方法

Reflection(反射)是深入学习.Net必须掌握的技能之一.最初学Reflection的时候,的确是被惊住了,原来还可以这样.只要给你一个Assembly, 你就能获取到其中所有的类型,根据类型,你能够创建和操作对象的属性和方法,甚至是私有的.但是,每次使用Reflection,看着那些丑陋难懂的代码,都让人不敢直视.下面就介绍一些在特定场景下可以替换Reflection的方法. 1. 使用Reflection完成的简单Demo 我们首先创建一个Person类,这个类非常简单,一个Name

C#中的反射和扩展方法的运用

前段时间做了一个练手的小项目,名叫Book_Bar,用来卖书的,采用的是三层架构,也就是Models,IDAL,DAL,BLL 和 Web , 在DAL层中各个类中有一个方法比较常用,那就是 RowToClass ,顾名思义,也就是将 DataTable 中的数据封装到 Models 中.结果导致在DAL各个类中写了很多类似的方法,后来就直接把它抽取出来做成了 DataTable和 DataRow的扩展方法, 下面是代码: using System; using System.Collectio

反射类的方法

1 import java.io.FileInputStream; 2 import java.io.InputStream; 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.InvocationTargetException; 5 import java.lang.reflect.Method; 6 import java.util.ArrayList; 7 import java.util.List; 8

java动态加载指定的类或者jar包反射调用其方法

序言 有时候,项目中会用到java动态加载指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大降低,更加的模块化,代码利用率更高.模式中的代理模式就用到java的这一机制.下边就让我们通过代码来看看如何实现此功能. 代码详细 package loadjarclass; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoad

J2SE_通过反射能获取方法参数名称吗?

一.Java通过反射可以获取方法的参数名称吗? 不能!!! 二.测试示例代码: import java.lang.reflect.Method; class T { public void print(String username) { System.out.println(username); } } public class Test { public static void main(String[] args) { T t = new T(); t.print("zhangsan&qu

java动态载入指定的类或者jar包反射调用其方法

序言 有时候.项目中会用到java动态载入指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大减少,更加的模块化.代码利用率更高.模式中的代理模式就用到java的这一机制. 下边就让我们通过代码来看看怎样实现此功能. 代码具体 package loadjarclass; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoa

扩展方法的几个实例,扩展基本类型、接口、通过反射让扩展方法使用私有成员等

.net扩展方法可以扩展很多类型,包括:基本数据类型.接口.类,等等.如果,需要扩展的类型包含私有成员,扩展方法如何运用这些私有成员呢?本篇逐一体验,包括: ■ 扩展基本数据类型■ 扩展接口■ 扩展包含私有字段的类 使用反射获取类的私有字段■ 扩展一个类的私有嵌套类 通过反射 扩展方法有几个必要前提:● 扩展方法所在的类必须是静态类● 扩展方法本身必须是静态方法● 扩展方法参数中,对类型的扩展参数前必须加this关键字 扩展基本数据类型 针对DateTime类型写一个扩展方法. public s

C#- 反射之 GetType()方法

Type.GetType()在跨程序集反射时返回null的解决方法 在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型.如果使用稍有不慎,就会产生运行时错误.例如使用Type.GetType("BNameSpace.ClassName")在程序集A.dll获取程序集B.dll中的类型,就会返回Null. 关于跨程序集的反射,有两点需要注意: 1.如果使用typeof,编译能通过,则跨程序集的反射一定可以正常运行.可以说,typeof是支持强类型的.比如