黑马程序员——Java反射
2011-12-24 09:04
549 查看
黑马程序员——Java反射
---------------------- android培训、java培训、期待与您交流!
----------------------
一、Java语言的反射机制
在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。
Java 反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法。
二、Class 对象的取得途径
Java允许我们从多种途径为一个class生成对应的Classobject
![](http://hi.csdn.net/attachment/201112/24/0_1324688619CnnT.gif)
三、构造方法(Constructor)的反射
Class.getConstructors():获得类的public类型的构造方法。
Class.getConstructor(Class[]parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
● 实例:
四、成员变量(Field)的反射
Field类代表类的成员变量(成员变量也称为类的属性)。
Class.getField(String name):根据指定成员名获得类的public类型的属性。
Class.getDeclaredField(String name):根据指定成员名获得类的属性(包括private属性)。
Field.setAccessible(boolean flag):用指定的标记设置属性的访问权限。
Field.get(Object obj):返回这个字段在指定对象上的值。
● 实例:
五、成员方法(Method)的反射
Method类代表类的一个成员方法。
得到类的某一人方法:
MethodcharAt=String.class.getMethod(“charAt”, int.class);
调用方法:
通常方式:System.out.println(“fengyan”.charAt(1));
反射方式:System.out.println(charAt.invoke(“fengyan”,1));
如果Method为静态方法,则调用invoke(Object obj, Object… args)方法的第一个参数传null。
● 实例:通过反射调用main(String[] args)方法
---------------------- android培训、java培训、期待与您交流!
----------------------
详细请查看:http://edu.csdn.net/heima
---------------------- android培训、java培训、期待与您交流!
----------------------
一、Java语言的反射机制
在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。
Java 反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法。
二、Class 对象的取得途径
Java允许我们从多种途径为一个class生成对应的Classobject
![](http://hi.csdn.net/attachment/201112/24/0_1324688619CnnT.gif)
三、构造方法(Constructor)的反射
Class.getConstructors():获得类的public类型的构造方法。
Class.getConstructor(Class[]parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
● 实例:
Constructor<?> con = String.class.getDeclaredConstructor(byte[].class); System.out.println(con); String s=(String)con.newInstance("fengyan".getBytes()); System.out.println(s);
四、成员变量(Field)的反射
Field类代表类的成员变量(成员变量也称为类的属性)。
Class.getField(String name):根据指定成员名获得类的public类型的属性。
Class.getDeclaredField(String name):根据指定成员名获得类的属性(包括private属性)。
Field.setAccessible(boolean flag):用指定的标记设置属性的访问权限。
Field.get(Object obj):返回这个字段在指定对象上的值。
● 实例:
public class ReflectPoint { private int x; public int y; public ReflectPoint(int x, int y) { this.x = x; this.y = y; } } import java.lang.reflect.Field; public class ReflectField { public static void main(String[] args) throws Exception { ReflectPoint pt = new ReflectPoint(3, 5); Field fieldX = pt.getClass().getDeclaredField("x"); Field fieldY = pt.getClass().getField("y"); fieldX.setAccessible(true); System.out.println("x = " + fieldX.get(pt));//访问私有成员 System.out.println("y = " + fieldY.get(pt)); } }
五、成员方法(Method)的反射
Method类代表类的一个成员方法。
得到类的某一人方法:
MethodcharAt=String.class.getMethod(“charAt”, int.class);
调用方法:
通常方式:System.out.println(“fengyan”.charAt(1));
反射方式:System.out.println(charAt.invoke(“fengyan”,1));
如果Method为静态方法,则调用invoke(Object obj, Object… args)方法的第一个参数传null。
● 实例:通过反射调用main(String[] args)方法
package com.heima.reflect; public class InvokeMain { public static void main(String[] args) { if (args != null && args.length > 0) { for (String arg : args) System.out.println(arg); } else { System.out.println("args is null"); } } } import java.lang.reflect.Method; public class ReflectInvokeMain { public static void main(String[] args) throws Exception { String className = "com.heima.reflect.InvokeMain"; Class<?> clazz = Class.forName(className); Method main = clazz.getMethod("main", String[].class); main.invoke(null, new Object[] { new String[] { "111", "222", "333" } }); } }
---------------------- android培训、java培训、期待与您交流!
----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员--Java中的反射逻辑
- 黑马程序员_Java高新技术之反射 数组的反射
- 黑马程序员_java反射
- 黑马程序员 —— Java基础加强 - 反射
- 黑马程序员——java基础---反射、正则
- 黑马程序员 高新技术——JAVA1.5新特性及反射
- 黑马程序员--Java反射
- 【黑马程序员】 学习笔记 - Java新技术 - 反射
- 黑马程序员——java基础---反射
- 黑马程序员_Java基础:反射机制(Reflection)总结
- 黑马程序员--Java基础加强--15.利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】【个人
- 黑马程序员-Java的反射学习笔记
- 黑马程序员—JAVA基础—反射
- 黑马程序员--十二、Java反射
- 黑马程序员_java反射
- 黑马程序员-------java提高之反射
- 黑马程序员--Java基础--正则表达式、反射机制
- 黑马程序员_java基础笔记(11)...反射
- 黑马程序员--java基础加强-反射
- 黑马程序员-java学习笔记-反射基础类Class