用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

反射 Java中反射机制(Reflection)

2015-01-27 作者: java源代码大全举报

[java]代码库

<code>   ①:在运行时判断任意一个对象所属的类。
   ②:在运行时构造任意一个类的对象。   
   ③:在运行时判断任意一个类所具有的成员变量和方法。
   ④: 在运行时调用任意一个对象的方法

  反射机制允许程序在运行时通过反射的API获取类中的描述,方法,并且允许我们在运行时改变fields内容或者去调用methods
</code>//源代码片段来自云代码http://yuncode.net
			


<code>在JDK中,主要由以下类来实现Java反射机制,这些类都
位于java.lang.reflect包中
 ①:Class类:代表一个类。【注:这个Class类进行继承了Object,比较特别】
 ②:Field 类:代表类的成员变量(成员变量也称为类的属性)。
 ③:Method类:代表类的方法。
 ④:Constructor 类:代表类的构造方法。
 ⑤:Array类:提供了动态创建数组,以及访问数组的元素的静态方法
</code>//源代码片段来自云代码http://yuncode.net
			


<code> 要想使用使用反射,我们要去获取我们需要进行去处理的类或者对象的Class对象,其中我们主要有三种方法去获取

  ①:使用Class的静态方法forName():例如:Class.forName("java.lang.Class");

  ②:使用XXX.Class语法:例如:String.Class;

  ③:使用具体某个对象.getClass()方法:例如String str="abc"; Class<? ?> tClass=str.getClass();

 先看一个例子:这个例子对于指定的类名,使用反射来获取该类中的所有声明的方法,(使用第一种获取Class对象的方法)(主要代码如下:):
</code>//源代码片段来自云代码http://yuncode.net
			


package com.jiangqq.reflection;  
/** 
 * 使用反射来获取Class中的生命的方法,包括私有的方法 
 */  
import java.lang.reflect.Method;  
public class Reflection1 {  
    public static void main(String[] args) throws Exception {  
        //使用Class去调用静态方法forName()获得java.lang.Class的Class对象  
        Class<?> tClass = Class.forName("java.lang.Class");  
        //获取该class中声明的所有方法  
        Method[] methods = tClass.getDeclaredMethods();  
        for (Method method : methods) {  
            System.out.println(method);  
        }  
    }  
}

//源代码片段来自云代码http://yuncode.net



<code>        ①: getName():获得类的完整名字。
        ②: getFields():获得类的public类型的属性。
        ③: getDeclaredFields():获得类的所有属性。
        ④: getMethods():获得类的public类型的方法。
        ⑤: getDeclaredMethods():获得类的所有方法。

        ⑥:getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字parameterTypes参数指定方法的参数类型。

        ⑦:getConstructors():获得类的public类型的构造方法。

        ⑧:getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes参数指定构造方法的参数类型。

        ⑨:newInstance():通过类的不带参数的构造方法创建这个类的一个对象。

     先看上面的⑧和⑨其中都能生成对象,但是因为构造函数有无参和有参构造函数两种,所以我们分两种情况考虑
</code>//源代码片段来自云代码http://yuncode.net
			




Class<?> tclass = Reflection2.class;  
Object reflection2 = classType.newInstance();  

//源代码片段来自云代码http://yuncode.net
			



Class<?> classType = Reflection2.class;  
t reflection2 = classType.newInstance();  
Constructor<?> constructor = classType.getConstructor(new Class[] {});  
 reflection2 = constructor.newInstance(new Object[] {});  

//源代码片段来自云代码http://yuncode.net
			



		Class<?> tClass = Person.class;    
Constructor cons = classType.getConstructor(new Class[]{String.class, int.class});     
Object obj = cons.newInstance(new Object[]{“zhangsan”, 19});   

//源代码片段来自云代码http://yuncode.net
			

	


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...