`

JAVA高级应用之反射

    博客分类:
  • Java
 
阅读更多
参考链接
http://www.cnblogs.com/mengdd/archive/2013/01/26/2877972.html

import java.lang.reflect.Method; 
      
public class TestReflect {  
  
	/** 
	 * @param args 
	 * @throws Exception  
	 */  
	public static void TestCase1(String[] args) throws Exception {  
		//获得字符串所标识的类的class对象
        Class<?> classType = Class.forName("java.lang.String");//在此处传入字符串指定类名,所以参数获取可以是一个运行期的行为,可以用args[0]
        
        //返回class对象所对应的类或接口中,所声明的所有方法的数组(包括私有方法)
        Method[] methods = classType.getDeclaredMethods();
        
        //遍历输出所有方法声明
        for(Method method : methods)
        {
            System.out.println(method);
        }
	}  
	
	public static void TestCase2(String[] args) throws Exception
    {

        // 以前的常规执行手段
        InvokeTester tester = new InvokeTester();
        System.out.println(tester.add(1, 2));
        System.out.println(tester.echo("Tom"));
        System.out.println("---------------------------");

        // 通过反射的方式

        // 第一步,获取Class对象
        // 前面用的方法是:Class.forName()方法获取
        // 这里用第二种方法,类名.class
        Class<?> classType = InvokeTester.class;

        // 生成新的对象:用newInstance()方法
        Object invokeTester = classType.newInstance();
        System.out.println(invokeTester instanceof InvokeTester); // 输出true

        // 通过反射调用方法
        // 首先需要获得与该方法对应的Method对象
        Method addMethod = classType.getMethod("add", new Class[] { int.class,
                int.class });
        // 第一个参数是方法名,第二个参数是这个方法所需要的参数的Class对象的数组

        // 调用目标方法
        Object result = addMethod.invoke(invokeTester, new Object[] { 1, 2 });
        System.out.println(result); // 此时result是Integer类型
        
        //调用第二个方法
        Method echoMethod = classType.getDeclaredMethod("echo", new Class[]{String.class});
        Object result2 = echoMethod.invoke(invokeTester, new Object[]{"Tom"});
        System.out.println(result2);

    }
	
	public static void main(String[] args) throws Exception { 
	    TestCase1(args);
	    TestCase2(args);
	}
  
} 

class InvokeTester
{
    public int add(int param1, int param2)
    {
        return param1 + param2;

    }

    public String echo(String message)
    {
        return "Hello: " + message;
    }
}
分享到:
评论

相关推荐

    完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt

    完整版 Java高级教程 Java语言程序设计 第5章 Java反射(共9页).ppt 完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt...

    你不知道的JAVA高级应用

    2.反射,暴力反射,和静态做斗争,暴力反射,setAccessible 无论公有私有都可以用来访问 3.动态代理 在调用这个目标方法前,后,2头,异常处都可以动态的加上自己需要逻辑判断,而且根据反射来动态的替换实现类,大大提升了...

    Java试题-3:反射和泛型的综合应用

    Java试题-3:反射和泛型的综合应用 Java反射 泛型都是比较高级的应用技术

    java高级应用简笔

    包含近期学习的java高级应用: 自定义注解和相关使用、反射机制、字节码操作、动态编译、JVM类加载器

    java高级思维导图

    web 网络 泛型 反射 注解 枚举 java高级思维导图java高级思维导图

    完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt

    完整版 Java高级教程 Java语言程序设计 第5章 Java反射(共9页).ppt 完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt...

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    Java高级程序设计 第3章 Java反射机制 3.1 应用场景 3.2 相关知识3.3 实施过程 3.4 拓展知识3.5 拓展训练 3.6 课后小结3.7 课后习题 3.8 上机实训 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第...

    Java试题-5:应用反射创建对象,调用对象方法

    Java试题-5:应用反射创建对象,调用对象方法 反射为Java的高级技术应用

    Java高级应用和Struts的入门笔记

    Java高级应用包含了Java的IO、泛型、反射等技术,Struts2为Web开发增添了更多的色彩,他为前台和后台数据交互提供了更多的方便

    JAVA学习视频之Java8高级编程(2)

    这些实例展示了Java高级编程技术在实际开发中的应用场景,帮助开发者提高代码的效率和质量。通过学习和理解更高级的Java编程技巧,我们能够更好地应对复杂的编程需求,提升软件开发的水平和竞争力。

    JAVA学习视频之Java8高级编程(1)

    这些实例展示了Java高级编程技术在实际开发中的应用场景,帮助开发者提高代码的效率和质量。通过学习和理解更高级的Java编程技巧,我们能够更好地应对复杂的编程需求,提升软件开发的水平和竞争力。

    JAVA学习视频之Java8高级编程(3)

    这些实例展示了Java高级编程技术在实际开发中的应用场景,帮助开发者提高代码的效率和质量。通过学习和理解更高级的Java编程技巧,我们能够更好地应对复杂的编程需求,提升软件开发的水平和竞争力。

    Java反射机制的缺点_尚硅谷_张晓飞

    1. 反射的用途 Uses of Reflection Reflection is commonly used by programs which require the ...如果能把这句警示时刻放在心里,那么反射机制就会成为一项强大的技术,可以让应用程序做一些几乎不可能做到的事情。

    Java高级面试题整理及答案.md

    Java高级面试题:该资源包含了Java的高级面试题,包括并发编程、泛型与类型推断、反射、序列化等方面的问题。 答案解析:对于每个面试题,该资源都提供了详细的答案解析,帮助开发者更好地理解题目背后的知识点和...

    Java 高级特性.doc

    JAVA高级特性 1.静态导入:先举个离例子 。 import java.lang.Integer.parseInt; public class StaticImport { int x = parseInt("123"); System.out.println(x); } 这样的程序如果不在IDE 工具中输入,是很难...

    Java核心技术 第12版 开发基础+高级特性 英文原版

    着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体包括面向对象程序设计、反射与代理、接口与内部类、异常处理、泛型程序设计、集合框架、事件监听器模型、图形用户界面设计和并发...

    JAVA高级应用

    反射、 JDK核心类库API 、异常、集合、泛型

    java面向对象.docx

    java高级应用,反射

    java学习:05.Java注解和反射.md

    Java是一种高级的面向对象的程序设计语言,它具有广泛的应用和强大的跨平台特性。Java语言于1995年由Sun公司推出,由Java之父詹姆斯高斯林设计。Java的设计目标是提供一种易学易用、功能强大的编程语言,使开发人员...

    java高级特性,涵盖了多种java常用的一些例子

    涉及多种线程,死锁,同步队列,异步线程,涵盖了java的自定义注解及反射,包含了23种设计模式,含注释, 线程1(基本应用) 线程2(同步,死锁,线程池) 注解和泛型 Java 注解(Annotation)又称 Java 标注,是 ...

Global site tag (gtag.js) - Google Analytics