java反射
来源:互联网 发布:googletts语音数据 编辑:程序博客网 时间:2024/06/05 11:18
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
Java的反射就是把java类作为操作的对象,对它的函数,属性,成员等进行操作。也就是说,我们平时用java来模拟这个对象那个对象,现在,轮到了类这个玩意。
Java的反射主要涉及到的类是java.lang.Class类和java.lang.reflect包中的Constructor、Field、Method类。
下面的程序演示了大部分常用到的反射用法
package reflect;/*注意包*/import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;class Demo1 {// 实验类1private String str;public int x = 88;public Demo1() {str = "默认初始化的Demo1";}public Demo1(String str) {this.str = "传参初始化的Demo1 : " + str;}@Overridepublic String toString() {return str;}}public class ReflectTest {public static void main(String[] args) {Class clas1 = void.class;System.out.println(clas1);System.out.println("得到类名 " + new Demo1().getClass().getName());System.out.println("-----得到Class类的3种方法-----");Class clazzDemo1 = Demo1.class;System.out.println("打印类 1 " + clazzDemo1);clazzDemo1 = new Demo1().getClass();System.out.println("打印类2 " + clazzDemo1);try {clazzDemo1 = Class.forName("reflect.Demo1");// 完整类名System.out.println("打印类3 " + clazzDemo1);} catch (ClassNotFoundException e) {System.out.println("错误1");}System.out.println("--------实例化对象--------");try {Object obj = clazzDemo1.newInstance();System.out.println("实例化对象1:" + obj);Constructor<?> constructor = clazzDemo1.getConstructor(String.class);Demo1 obj2 = (Demo1) constructor.newInstance("hehe");System.out.println("实例化对象2:" + obj2);} catch (Exception e) {System.out.println("错误2");}System.out.println("-------得到字段---------");Demo1 demo1 = new Demo1();Field fieldx;try {fieldx = demo1.getClass().getField("x");System.out.println("字段x " + fieldx.get(demo1));fieldx = demo1.getClass().getDeclaredField("str");fieldx.setAccessible(true);System.out.println("字段str :" + fieldx.get(demo1));} catch (Exception e) {System.out.println("错误3");}System.out.println("-----------得到接口------");Class<?> interfaces[] = java.util.ArrayList.class.getInterfaces();for (Class c : interfaces) {System.out.println("ArrayList接口为:" + c);}System.out.println("------得到方法----------");try {Method method1=String.class.getMethod("charAt", int.class);System.out.println("abc的第二个字母 "+method1.invoke("abc", 1));} catch (Exception e) {System.out.println("错误4");} }}
运行结果
void得到类名 reflect.Demo1-----得到Class类的3种方法-----打印类 1 class reflect.Demo1打印类2 class reflect.Demo1打印类3 class reflect.Demo1--------实例化对象--------实例化对象1:默认初始化的Demo1实例化对象2:传参初始化的Demo1 : hehe-------得到字段---------字段x 88字段str :默认初始化的Demo1-----------得到接口------ArrayList接口为:interface java.util.ListArrayList接口为:interface java.util.RandomAccessArrayList接口为:interface java.lang.CloneableArrayList接口为:interface java.io.Serializable------得到方法----------abc的第二个字母 b
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
0 0
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- Android Studio 使用技巧一(删除Module)
- eclipse如何使用两个workspace?
- 异或(XOR)运算加密/解密算法
- android全局变量
- 当达到文本域的最大字符数时跳至下一个域
- java反射
- 怎么样通过使用git来创建并提交你的第一个linux内核patch
- SOAP Array Overflow
- 《UNIX环境高级编程》中的apue.h
- Android-自定义meta-data扩展数据
- 记录一下Cocos2dX中内存管理的理解和试验
- js-jQuery对象与dom对象相互转换
- 第九周作业
- 4399骆海坚:如何打造页游核心竞争力