`

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高级应用教程"这一主题之前,我们首先要理解Java编程语言的基本概念。Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。其设计哲学是“一次编写,...

    java8高级应用与开发课件及案例代码

    7. **第7章 JAVA高级应用**: 这一章可能涵盖了除上述内容外的其他高级Java话题,如反射、代理、注解、泛型等,这些都是Java进阶开发者必须掌握的技能。 8. **第8章 JAVA 8新特性**: Java8引入了大量新特性,如...

    详解Java高级特性之反射

    "详解Java高级特性之反射" Java反射机制是Java语言中一个非常重要的概念,它允许程序在运行时检查和修改其他类的行为。Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意...

    你不知道的JAVA高级应用

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

    java的反射机制及其实际应用

    Java作为一种强大的编程语言,提供了许多高级特性,其中反射机制尤为突出。通过反射,开发者可以在运行时动态地获取类的信息并操纵类的行为,从而实现更加灵活和扩展性强的程序设计。 #### 二、Java中的类反射 ###...

    java高级应用资料

    "Java高级应用资料"集合通常包含一系列深入讲解Java高级特性和最佳实践的文档、教程或代码示例,旨在帮助Java开发者提升技能,实现更高效、更优化的编程。 在Java的世界里,"高级应用"可能涵盖以下几个核心领域: ...

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

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

    java高级思维导图

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

    Java高级实用教程

    本教程"Java高级实用教程"旨在帮助你深入理解和掌握Java的核心高级概念,从而提升你的编程技能和解决问题的能力。下面将对Java的一些关键高级知识点进行详尽的阐述。 1. **多线程**:Java提供了丰富的多线程支持,...

    java高级应用作业集.zip

    "Java高级应用作业集"很可能包含了一系列与Java高级特性和实践相关的编程任务或项目,旨在帮助学习者深入理解和掌握Java的强大功能。在这个作业集中,我们可以预见到涵盖以下几个核心领域的知识点: 1. **多线程**...

    Java反射机制总结

    Java作为一种高级编程语言,也支持反射功能。反射机制为Java程序员提供了一种强大的工具,使得程序能够在运行时动态地获取类的信息,并且能够直接操作程序的内部结构。这种能力使得Java程序更加灵活,能够根据运行时...

    java高级课后练习题2

    本章节我们将聚焦于“Java高级课后练习题2”,这个练习题通常会涵盖诸如多线程、集合框架、异常处理、反射、IO流、网络编程、设计模式等核心主题。以下是对这些知识点的详细讲解: 1. **多线程**:Java提供了丰富的...

    java高级应用简笔

    ### Java高级应用知识点详解 ...总结,Java高级应用包括自定义注解、反射机制、动态编译、字节码操作等多个方面,这些技术不仅能够提升程序的灵活性和扩展性,还能帮助开发者更好地理解和控制程序的底层行为。

    Java高级应用.zip

    以下将详细介绍这些Java高级应用的知识点。 1. **多线程**:在Java中,多线程是程序执行的核心部分,它可以提升程序的执行效率和响应时间。通过实现Runnable接口或继承Thread类来创建线程,同时理解线程同步机制,...

    Java学习资料(高级应用)

    学习如何有效地管理线程和避免并发问题,如死锁和竞态条件,是Java高级应用的重要部分。 2. **Java集合框架**:深入理解ArrayList、LinkedList、HashSet、HashMap等数据结构的内部工作原理,以及它们在不同场景下的...

    java高级教程JAVA高级教程

    以上就是Java高级教程中可能涵盖的一些核心知识点。熟练掌握这些内容,将使你能够编写出高效、可维护且易于扩展的Java应用。同时,持续关注Java的新特性和发展趋势,如Java 11、12及更高版本的更新,也是保持技术...

    Java中的反射机制

    这一概念的引入促进了计算机科学领域对反射性的研究,并迅速被应用于程序语言的设计之中。在Lisp语言和面向对象编程中取得了显著成果。此外,LEAD/LEAD++、OpenC++、MetaXa和OpenJava等编程语言都是基于反射机制构建...

    Java Reflection (JAVA反射)详解

    Java 反射(Java Reflection)是Java编程语言中的一种高级特性,它允许程序在运行时动态地获取类的信息(如类名、字段、方法等)并进行操作,从而增加了程序的灵活性和动态性。以下是对Java反射机制的详细解释: 1. ...

Global site tag (gtag.js) - Google Analytics