[Java] 反射 Java中反射机制(Reflection) →→→→→进入此内容的聊天室

来自 , 2019-06-12, 写在 Java, 查看 119 次.
URL http://www.code666.cn/view/db576a7d
  1. <code>   ①:在运行时判断任意一个对象所属的类。
  2.    ②:在运行时构造任意一个类的对象。  
  3.    ③:在运行时判断任意一个类所具有的成员变量和方法。
  4.    ④: 在运行时调用任意一个对象的方法
  5.  
  6.   反射机制允许程序在运行时通过反射的API获取类中的描述,方法,并且允许我们在运行时改变fields内容或者去调用methods
  7. </code>//源代码片段来自云代码http://yuncode.net
  8.                        
  9.  
  10.  
  11. <code>在JDK中,主要由以下类来实现Java反射机制,这些类都
  12. 位于java.lang.reflect包中
  13.  ①:Class类:代表一个类。【注:这个Class类进行继承了Object,比较特别】
  14.  ②:Field 类:代表类的成员变量(成员变量也称为类的属性)。
  15.  ③:Method类:代表类的方法。
  16.  ④:Constructor 类:代表类的构造方法。
  17.  ⑤:Array类:提供了动态创建数组,以及访问数组的元素的静态方法
  18. </code>//源代码片段来自云代码http://yuncode.net
  19.                        
  20.  
  21.  
  22. <code> 要想使用使用反射,我们要去获取我们需要进行去处理的类或者对象的Class对象,其中我们主要有三种方法去获取
  23.  
  24.   ①:使用Class的静态方法forName():例如:Class.forName("java.lang.Class");
  25.  
  26.   ②:使用XXX.Class语法:例如:String.Class
  27.  
  28.   ③:使用具体某个对象.getClass()方法:例如String str="abc"; Class<? ?> tClass=str.getClass();
  29.  
  30.  先看一个例子:这个例子对于指定的类名,使用反射来获取该类中的所有声明的方法,(使用第一种获取Class对象的方法)(主要代码如下:):
  31. </code>//源代码片段来自云代码http://yuncode.net
  32.                        
  33.  
  34.  
  35. package com.jiangqq.reflection;  
  36. /**
  37.  * 使用反射来获取Class中的生命的方法,包括私有的方法
  38.  */  
  39. import java.lang.reflect.Method;  
  40. public class Reflection1 {  
  41.     public static void main(String[] args) throws Exception {  
  42.         //使用Class去调用静态方法forName()获得java.lang.Class的Class对象  
  43.         Class<?> tClass = Class.forName("java.lang.Class");  
  44.         //获取该class中声明的所有方法  
  45.         Method[] methods = tClass.getDeclaredMethods();  
  46.         for (Method method : methods) {  
  47.             System.out.println(method);  
  48.         }  
  49.     }  
  50. }
  51.  
  52. //源代码片段来自云代码http://yuncode.net
  53.  
  54.  
  55.  
  56. <code>        ①: getName():获得类的完整名字。
  57.         ②: getFields():获得类的public类型的属性。
  58.         ③: getDeclaredFields():获得类的所有属性。
  59.         ④: getMethods():获得类的public类型的方法。
  60.         ⑤: getDeclaredMethods():获得类的所有方法。
  61.  
  62.         ⑥:getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字parameterTypes参数指定方法的参数类型。
  63.  
  64.         ⑦:getConstructors():获得类的public类型的构造方法。
  65.  
  66.         ⑧:getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes参数指定构造方法的参数类型。
  67.  
  68.         ⑨:newInstance():通过类的不带参数的构造方法创建这个类的一个对象。
  69.  
  70.      先看上面的⑧和⑨其中都能生成对象,但是因为构造函数有无参和有参构造函数两种,所以我们分两种情况考虑
  71. </code>//源代码片段来自云代码http://yuncode.net
  72.                        
  73.  
  74.  
  75.  
  76.  
  77. Class<?> tclass = Reflection2.class;  
  78. Object reflection2 = classType.newInstance();  
  79.  
  80. //源代码片段来自云代码http://yuncode.net
  81.                        
  82.  
  83.  
  84.  
  85. Class<?> classType = Reflection2.class;  
  86. t reflection2 = classType.newInstance();  
  87. Constructor<?> constructor = classType.getConstructor(new Class[] {});  
  88.  reflection2 = constructor.newInstance(new Object[] {});  
  89.  
  90. //源代码片段来自云代码http://yuncode.net
  91.                        
  92.  
  93.  
  94.  
  95.                 Class<?> tClass = Person.class;    
  96. Constructor cons = classType.getConstructor(new Class[]{String.class, int.class});    
  97. Object obj = cons.newInstance(new Object[]{“zhangsan”, 19});  
  98.  
  99. //源代码片段来自云代码http://yuncode.net
  100.                        
  101.  
  102.        

回复 "反射 Java中反射机制(Reflection)"

这儿你可以回复上面这条便签

captcha