普通开发模式下的代码是编译时已经设置好参数和属性, 反射是在运行时候动态注入参数属性

Class 类
- 在jvm 中代表 类和接口 的类
- Class 对象具体包含了某个特定类的结构信息
- 通过Class 对象可以获取到类的构造方法、方法、成员变量等
```java
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {//ClassNotFoundException 类找不到//InstantiationException 非法访问异常//IllegalAccessException 无法实例化异常// 指定的类加载到jvm中, 返回对应的class 对象Class employeeClass = Class.forName("cn.ichief.reflect.entity.Employee");// 通过默认构造方法实例对象 默认使用无参数的 newInstance 返回的是Object 需要强制转换Employee employee = (Employee) employeeClass.newInstance();
}
<a name="FANjH"></a>#### Constructor 构造方法类- ```javatry {Class EmployeeClass = Class.forName("cn.ichief.reflect.entity.Employee");// 对应构造方法的参数类型Constructor constructor = EmployeeClass.getConstructor(new Class[]{Integer.class,String.class,Float.class,String.class});Employee employee = (Employee) constructor.newInstance(new Object[]{100, "ss", 3000f, "yfb"});} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}
Method 方法类
```java
public static void main(String[] args) {try {Class EmployeeClass = Class.forName("cn.ichief.reflect.entity.Employee");// 对应构造方法的参数类型Constructor constructor = EmployeeClass.getConstructor(new Class[]{Integer.class,String.class,Float.class,String.class});Employee employee = (Employee) constructor.newInstance(new Object[]{100, "ss", 3000f, "yfb"});
Method updateSalaryMethod = EmployeeClass.getMethod("updateSalary", Float.class);Employee employee1 = (Employee) updateSalaryMethod.invoke(employee, 100f);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}
<a name="l2DTV"></a>#### Field 成员变量类- - ```javapublic static void main(String[] args) {try {Class EmployeeClass = Class.forName("cn.ichief.reflect.entity.Employee");// 对应构造方法的参数类型Constructor constructor = EmployeeClass.getConstructor(new Class[]{Integer.class,String.class,Float.class,String.class});Employee employee = (Employee) constructor.newInstance(new Object[]{100, "ss", 3000f, "yfb"});Field enameField = EmployeeClass.getField("ename");enameField.set(employee, "ssssd");String ename = enameField.get(employee).toString();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();}}
getConstructor 只能获取public private 的使用 getDeclaredConstructor

