`
primer_2004
  • 浏览: 129388 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

候捷谈Java反射机制(5)

    博客分类:
  • Java
阅读更多

运行时生成instances<o:p></o:p>

欲生成对象实体,在Reflection 动态机制中有两种作法,一个针对“无自变量ctor”,<o:p></o:p>

一个针对“带参数ctor6是面对“无自变量ctor”的例子。如果欲调用的是“带参数ctor“就比较麻烦些,7是个例子,其中不再调用ClassnewInstance(),而是调用Constructor newInstance()7首先准备一个Class[]做为ctor的参数类型(本例指定为一个double和一个int),然后以此为自变量调用getConstructor(),获得一个专属ctor。接下来再准备一个Object[] 做为ctor实参值(本例指定3.14159125),调用上述专属ctornewInstance()<o:p></o:p>

<o:p> </o:p>

#001 Class c = Class.forName("DynTest");<o:p></o:p>

#002 Object obj = null;<o:p></o:p>

#003 obj = c.newInstance(); //不带自变量<o:p></o:p>

#004 System.out.println(obj);<o:p></o:p>

6:动态生成“Class object 所对应之class”的对象实体;无自变量。<o:p></o:p>

<o:p> </o:p>

#001 Class c = Class.forName("DynTest");<o:p></o:p>

#002 Class[] pTypes = new Class[] { double.class, int.class };<o:p></o:p>

#003 Constructor ctor = c.getConstructor(pTypes);<o:p></o:p>

#004 //指定parameter list,便可获得特定之ctor<o:p></o:p>

#005<o:p></o:p>

#006 Object obj = null;<o:p></o:p>

#007 Object[] arg = new Object[] {3.14159, 125}; //自变量<o:p></o:p>

#008 obj = ctor.newInstance(arg);<o:p></o:p>

#009 System.out.println(obj);<o:p></o:p>

7:动态生成“Class object 对应之class”的对象实体;自变量以Object[]表示。<o:p></o:p>

<o:p> </o:p>

运行时调用methods<o:p></o:p>

这个动作和上述调用“带参数之ctor”相当类似。首先准备一个Class[]做为ctor的参数类型(本例指定其中一个是String,另一个是Hashtable),然后以此为自变量调用getMethod(),获得特定的Method object。接下来准备一个Object[]放置自变量,然后调用上述所得之特定Method objectinvoke(),如8。知道为什么索取Method object时不需指定回返类型吗?因为method overloading机制要求signature(署名式)必须唯一,而回返类型并非signature的一个成份。换句话说,只要指定了method名称和参数列,就一定指出了一个独一无二的method<o:p></o:p>

<o:p> </o:p>

#001 public String func(String s, Hashtable ht)<o:p></o:p>

#002 {<o:p></o:p>

#003 System.out.println("func invoked"); return s;<o:p></o:p>

#004 }<o:p></o:p>

#005 public static void main(String args[])<o:p></o:p>

#006 {<o:p></o:p>

#007 Class c = Class.forName("Test");<o:p></o:p>

#008 Class ptypes[] = new Class[2];<o:p></o:p>

#009 ptypes[0] = Class.forName("java.lang.String");<o:p></o:p>

#010 ptypes[1] = Class.forName("java.util.Hashtable");<o:p></o:p>

#011 Method m = c.getMethod("func",ptypes);<o:p></o:p>

#012 Test obj = new Test();<o:p></o:p>

#013 Object args[] = new Object[2];<o:p></o:p>

#014 arg[0] = new String("Hello,world");<o:p></o:p>

#015 arg[1] = null;<o:p></o:p>

#016 Object r = m.invoke(obj, arg);<o:p></o:p>

#017 Integer rval = (String)r;<o:p></o:p>

#018 System.out.println(rval);<o:p></o:p>

#019 }<o:p></o:p>

8:动态唤起method<o:p></o:p>

<o:p> </o:p>

运行时变更fields<o:p></o:p>

与先前两个动作相比,“变更field内容”轻松多了,因为它不需要参数和自变量。首先调用ClassgetField()并指定field名称。获得特定的Field object之后便可直接调用Fieldget()set(),如9<o:p></o:p>

<o:p> </o:p>

#001 public class Test {<o:p></o:p>

#002 public double d;<o:p></o:p>

#003<o:p></o:p>

#004 public static void main(String args[])<o:p></o:p>

#005 {<o:p></o:p>

#006 Class c = Class.forName("Test");<o:p></o:p>

#007 Field f = c.getField("d"); //指定field 名称<o:p></o:p>

#008 Test obj = new Test();<o:p></o:p>

#009 System.out.println("d= " + (Double)f.get(obj));<o:p></o:p>

#<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="True" sourcevalue="10" unitname="F">010 f</st1:chmetcnv>.set(obj, 12.34);<o:p></o:p>

#011 System.out.println("d= " + obj.d);<o:p></o:p>

#012 }<o:p></o:p>

#013 }<o:p></o:p>

9:动态变更field 内容<o:p></o:p>

分享到:
评论

相关推荐

    java面试题--反射机制

    ### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...

    JAVA反射机制应用

    JAVA反射机制应用 JAVA反射机制是JAVA语言中的一种动态机制,它能够在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息以及动态...

    java反射机制源码

    java反射机制源码java反射机制源码java反射机制源码

    Java反射机制的实现_Reflection

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过Java反射机制,开发者可以在不知道具体类名的情况下创建对象,调用方法,访问和修改私有成员变量,以及...

    java 反射机制详解

    Java 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用对象的方法,甚至修改对象的状态。这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在...

    Java反射机制Demo

    ### Java反射机制详解 #### 一、什么是Java反射机制? Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    北大青鸟java反射机制

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念...

    Java反射机制课件ppt

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具有高度的灵活性和动态性,可以在编译时未知类的情况下进行类的加载、实例化、方法调用等操作...

    Java反射机制笔记(简单易懂)

    Java反射机制笔记 Java反射机制是Java语言中一个强大的功能,它允许程序在运行时检查和修改其自身的结构和行为。通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态...

    java反射机制核心代码

    java反射机制核心代码,小弟一直弄不明白,怎么通过反射来调用私有成员方法,看了这个后,你可以随心调用private方法,和属性,记得添加setAccessable(true),哦,要不还是不行,如:method.setAccessable(true);

    java反射机制讲解

    Java反射机制是Java语言提供的一种强大的能力,它允许我们在运行时检查类的信息并动态地创建和操作对象。这种机制使得程序具有更高的灵活性和扩展性,尤其是在框架开发中有着广泛的应用。 首先,我们要理解反射的...

    java反射机制详解

    ### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...

    Java反射机制

    ### Java反射机制详解 #### 一、什么是Java的反射机制 Java反射机制是Java语言的一种重要特性,使得Java成为了一种动态性很强的语言。通过反射,可以在程序运行时获取类的信息,包括类名、父类、接口、字段、方法...

    候捷的java精髓

    通过阅读《候捷的Java精髓》,Java开发者可以深入理解语言的内在机制,提高代码质量,同时也能学习到如何解决实际开发中遇到的问题。书中的例子丰富、实用,便于读者理解和掌握。文件"art-java-b5-20050422-2ch.pdf...

    java反射机制,很安逸.不要错过

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,打破了通常编译时静态绑定的限制。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段值,甚至...

    Java反射机制的学习

    Java反射机制是Java编程语言中的一项核心特性,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够在编译后仍然能够灵活地处理类和对象,增强了代码的动态性。在Android应用开发中,反射机制尤其重要...

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

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

    实战java反射机制-让你迅速认识java强大的反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...

Global site tag (gtag.js) - Google Analytics