反射
来源:互联网 发布:什么软件录屏有声音 编辑:程序博客网 时间:2024/06/06 05:30
反射就是把java类中的各种成分映射成相应的java类。
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象都能调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能成为java语言的反射机制。
java反射机制的主要功能:在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
java反射的基石—Class类
java程序中的各个类属于同一类事物,描述这类事物的java类名就是Class。Class用来描述所有类的共同特性,如:类的名字,类的访问列表,类所属于的包名,字段名称的列表,方法名称的列表等。
Class类和一般类不同,它不能通过new来实例对象,它的实例对象就是类在内存中的字节码,所以Class类的实例过程就是类获取字节码的过程。类字节码的获取方式有三种:
1、类名.class 例如:System.class, String.class
2、对象.getClass() 例如:new String().getClass
3、Class.forName("类名") 例如:Class.forName("java.lang.String")
有九个预定义Class实例对象:八个基本数据类型,void
同一个类不同对像在内存中的字节码是相同的
构造方法的反射—Constructor类
Constructor类的实例对象代表一个构造方法。
得到某个类所有的构造方法:
例如: Constructor[] constructors = Class.forName("java.lang.String").getConstructors();
得到某一个构造方法:
例如:Constructor cnstructor = Class.forName("java.lang.string").getConstructor();
Constructor对象调用newInstance()创建此构造方法的声明类的新实例,并用指定的参数初始化该实例。
例如:Constructor constructor = String.class.getConstructor(StringBuffer.class);//参数决定所获得的构造方法
String str = (String)constructor.newInstance(new StringBuffer("abc"));
成员变量的反射—Field类
Field类代表某个类中的一个成员变量,而不是某个类对象中的变量,可用其调用get(对象名)获得对象的变量值
Class类提供了getField()方法返回一个Field对象,用于实例化Field类,不过getField()方法仅适用于可见的字段,为此Class类又提供了getDeclaredField()方法适用于所有声明过的字段。Field类提供的setAccessible(true)方法可将字段由不可见设置为可见,如下例:
成员方法的反射—Method类
Method类代表类中的一个成员方法
得到类中的某一个方法:
例子: Method charAt = String.class.getMethod(“charAt”,int.class);
调用方法:
例子: charAt.invoke(str, 1) //由带有指定参数的指定对象调用该Method实例对象,若上例中的str为null,则表明 该Method实例对象对应的是一个静态方法。
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- 反射
- DirectUI的初步分析
- 修改数据库名称
- 软件设计大师离你不远(给初学者的几点建议)
- Glib相关知识
- LDD3笔记(一)
- 反射
- IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
- 拟采取的方法
- 自定义8583模板,打包解包,使用j8583包有改动
- 使用反射清除所有挂在事件上的delegate
- 数据库设计
- F5 big-ip GTM DNS解析过程
- 谁有惊天王V17.5版本的破解版
- 覆写 javascript中的window.confirm 显示yes/no 按钮