java之反射

1:类的加载
当我们第一次使用一个类,系统会做两件事情:
1:将该类的字节码文件(.class)文件加载到内存
2: 系统还会为该字节码文件创建一个对象:Class对象
a.txt hello.java D://lesson//a.txt ---->FIle类
a.class Hello.class Demo.class ---->Class类

2:一个类什么时候被加载
1. 创建类的实例
2. 类的静态变量,或者为静态变量赋值
3. 类的静态方法
4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
5. 初始化某个类的子类
6. 直接使用java.exe命令来运行某个主类


3:反射的作用
1:反射可以让我们在编译的时候使用一个不存在的或者以后才能存在类
2:反射可以访问一个类的私有成员 MD5算法
3: 通过反射,我们写一些通用代码

4:反射的步骤
1:获取类的Class对象 //一个类在内存中只有一个Class对象
2:通过Class对象获取类的成员(构造方法,成员变量,成员方法)
3:访问这些变量和方法


单词:
Class类
 Constructor 构造
 Method 方法
 Field 字段
 instance 实例
 invoke 执行


5:通过Class获取类的成员
1:获取类的构造方法
a:获取所有的构造
public Constructor<?>[] getConstructors() //只能获取public修饰的构造
public Constructor<?>[] getDeclaredConstructors() //可以获取所有的构造(包括私有)
b:获取单个的构造
public Constructor<T> getConstructor(Class<?>... parameterTypes)
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
2:获取成员方法
a:获取所有的成员方法
public Method[] getMethods()
public Method[] getDeclaredMethods()
b:获取单个的成员方法
public Method getMethod(String name, Class<?>... parameterTypes)
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)

4:获取成员变量
a:获取所有的成员变量
public Field[] getFields()
public Field[] getDeclaredFields()
b:获取单个成员变量
public Field getField(String name)
public Field getDeclaredField(String name)

posted @ 2017-10-07 19:45  齐齐木  阅读(71)  评论(0编辑  收藏  举报