`
h416756139
  • 浏览: 365724 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java反射机制学习笔记

    博客分类:
  • java
阅读更多

一. 反射机制描述

      Java的反射机制允许程序在运行时透过反射API取得任何一个已知名称的class的内部信息,主要包括属性名,属性名的修饰符,方法名,方法返回值,方法修饰符等信息。

 

二. Java类反射中的主要方法

     Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数, 

 

     Constructor[] getConstructors() -- 获得类的所有公共构造函数

 

     Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)

 

     Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关) 

 

     获得字段信息的Class 反射调用不同于那些用于接入构造函数的调用,在参数类型数组中使用了字段名:

 

     Field getField(String name) -- 获得命名的公共字段

 

     Field[] getFields() -- 获得类的所有公共字段

 

     Field getDeclaredField(String name) -- 获得类声明的命名的字段

 

     Field[] getDeclaredFields() -- 获得类声明的所有字段 

 

     用于获得方法信息函数:

 

     Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法

 

     Method[] getMethods() -- 获得类的所有公共方法

 

     Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法

 

     Method[] getDeclaredMethods() -- 获得类声明的所有方法 

 

三. Java反射机制应用初探

 

     现在一堆框架搞得人云里雾里的,例如spring等等,大都利用了Java的反射机制,eg. 大名鼎鼎的IOC.昨天晚上闲着没事的时候,初试了下反射,下面是一个简单的测试例子:

 

import java.awt.Button;

import java.lang.reflect.Method;

import java.util.Hashtable;

 

/**

 * 测试Java的反射机制

 * @author Amigo Xie(xiexingxing1121@126.com)

 * @since 2007/04/20 21:40

 */

public class ReflectionTest {

 

    /**

     * @param args

     */

    public static void main(String[] args) throws Exception {

        ReflectionTest reflection = new ReflectionTest();

        reflection.getNameTest();

        System.out.println("");

        reflection.getMethodTest();

    }

 

    /**

     * Class的getName()方法测试

     * @throws Exception

     */

    public void getNameTest() throws Exception {

        System.out.println("===========begin getNameTest============");

        String name = "amigo";

        Class cls = name.getClass();

        System.out.println("string class name: " + cls.getName());

 

        Button btn = new Button();

        Class btnClass = btn.getClass();

        System.out.println("button class name: " + btnClass.getName());

        Class superBtnClass = btnClass.getSuperclass();

        System.out.println("super button class name: " + superBtnClass.getName());

 

        Class clsTest = Class.forName("java.awt.Button");

        System.out.println("clsTest name: " + clsTest.getName());

        System.out.println("===========end getNameTest============");

    }

 

    /**

     * Class的getMethod()方法测试

     * @throws Exception

     */

    public void getMethodTest() throws Exception {

        System.out.println("===========begin getMethodTest==========");

        Class cls = Class.forName("ReflectionTest");

        Class ptypes[] = new Class[2];

        ptypes[0] = Class.forName("java.lang.String");

        ptypes[1] = Class.forName("java.util.Hashtable");

        Method method = cls.getMethod("testMethod", ptypes);

        Object args[] = new Object[2];

        args[0] = "hello, my dear!";

 

        Hashtable ht = new Hashtable();

        ht.put("name", "amigo");

        args[1] = ht;

 

        String returnStr = (String) method.invoke(new ReflectionTest(), args);

        System.out.println("returnStr= " + returnStr);

        System.out.println("===========end getMethodTest==========");

    }

 

    public String testMethod(String str, Hashtable ht) throws Exception {

        String returnStr = "return str";

        System.out.println("begin testMethod invoked");

        System.out.println("str= " + str);

        System.out.println("name= " + (String) ht.get("name"));

        System.out.println("end testMethod invoked");

        return returnStr;

    }

}

 

 

 

       控制台输出如下:

       ===========begin getNameTest============

       string class name: java.lang.String

       button class name: java.awt.Button

       super button class name: java.awt.Component

       clsTest name: java.awt.Button

       ===========end getNameTest============

 

       ===========begin getMethodTest==========

       begin testMethod invoked......

       str= hello, my dear!

       name= amigo

       end testMethod invoked......

       returnStr= return str

       ===========end getMethodTest==========

参考文章:

      《侯捷观点--Java反射机制》

      《java反射机制》  http://hi.baidu.com/javatwt/blog/item/9aeffd13ddfb65025aaf53d4.html

转自:http://www.blogjava.net/amigoxie/archive/2007/04/21/112421.html

分享到:
评论

相关推荐

    java反射机制学习笔记

    Java反射机制是Java编程语言的一项重要特性,它允许程序在运行时动态地获取类的信息,并且能够对类的属性和方法进行操作。反射机制的核心在于Java的`java.lang.reflect`包,其中包含了`Class`、`Constructor`、`...

    java反射机制学习笔记+反射机制实操案例

    总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...

    java学习笔记java反射机制

    java学习笔记java反射机制

    java学习笔记(java 反射机制 流 内存管理)

    本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...

    JAVA 私塾笔记整理——反射机制(Reflection)

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理对象、类、接口以及它们之间的关系...

    java反射机制.xmind

    自己总结的java反射机制的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者

    Reflection_in_Java.zip_in_java 反射_java 反射机制_java反射_反射机制

    Java反射机制是Java编程语言中一个强大的特性,它允许运行时的程序动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包下的类如`Constructor`、`Method`和`...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    java学习笔记markdown

    8. **反射机制**:探讨Java反射API的使用,包括动态获取类信息、创建对象、调用方法等功能,这对于理解和调试程序有很大的帮助。 9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收...

    java学习——java中的反射学习笔记.rar_java 反射

    本篇笔记将深入探讨Java反射的概念、重要性以及如何使用。 一、反射基础 1. 类加载:当Java虚拟机(JVM)加载一个类时,它会创建该类的Class对象。这个对象包含了关于类的所有信息,包括方法、字段、构造器等。...

    [Java学习笔记doc]之反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在深入理解这个知识点之前,我们首先需要了解什么是反射。反射是指在运行时,程序可以获取类的...

    java李兴华学习笔记之Java常用类库

    ### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点概览 根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库...

    Java入门学习笔记

    "Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...

    java学习笔记 - 反射机制,头大的难

    Java反射机制是Java编程语言中的一个强大特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至能够动态调用方法和创建对象。在深入理解Java反射机制之前,我们先要明白类加载的过程。当Java程序...

    JAVA学习笔记 林信良

    最后,书中还涉及了Java的反射机制和注解,这两个高级特性在编写灵活、动态的代码时非常有用。反射允许程序在运行时检查和修改类的信息,而注解则提供了一种元数据的方式,可以用于编译时检查、代码生成和运行时处理...

    Java基础尚硅谷宋红康学习笔记

    1. **反射**:Java反射机制允许在运行时检查类的信息(如类名、方法、字段等),并能动态调用方法和修改字段值,增强了代码的灵活性。 2. **泛型**:泛型提供了一种在编译时检查类型安全的方法,允许在类、接口和...

    Java的反射机制

    在上述内容中,作者提到了一个名为JBBDoc的项目,这可能是一个针对Java反射机制进行学习和记录的个人学习笔记项目。作者通过自己的学习和实践经验,创建了这个项目来帮助自己更好地理解Java反射机制,并希望这些笔记...

    Java学习笔记(源码)

    8. **反射机制**:Java反射API允许在运行时动态访问类的信息,包括类名、方法、字段等。学习笔记会讲解如何使用反射进行元编程,以及其在插件系统、序列化和动态代理中的应用。 9. **Java API和库**:Java标准库...

    良葛格Java JDK 5.0学习笔记

    Java JDK 5.0是Java发展历程中的一个重要里程碑,它引入了许多新特性,极大地提升了开发效率和代码质量。..."良葛格Java JDK 5.0学习笔记"这份资料应该会详细解释这些概念,为初学者提供宝贵的参考资料。

    良葛格Java JDK 5.0学习笔记ch05

    在这个"良葛格Java JDK 5.0学习笔记ch05"中,我们将深入探讨其中的关键知识点。 一、泛型 Java 5.0引入了泛型,这是一项强大的类型安全机制,允许在编译时检查类型。泛型可以应用于类、接口和方法,通过指定参数...

Global site tag (gtag.js) - Google Analytics