小结Java反射

                            返回主页

反射概念

Java反射机制是在运行中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取信息以及动态调用对象的方法的功能成为Java语言反射机制。

反射作用

. 动态获取类信息,进一步实现需要的功能; . eg:Spring通过XML文件描述类的基本信息,使用反射机制动态装配对象;

Java反射相关类

. Class类型 . Constructor构造方法 . Method方法 . Field属性

(除了Class之外都位于java.lang.reflect包中)

说明

  1. 反射API将类的类型方法,属性都封装成类;
  2. 反射从Class开始。

获得Class对象的方式

  1. 对象.getClass()获取Class对象;

    String string = “string”; Class class1 = string.getClass();

  2. 任何类名加class即可返回class实例;

    Class class2 = studentTable.class;

  3. Class类静态方法forName(String name)适用于通过类型获得Class实例,尤其是当类名为变量时。JDBC编程中获得驱动就是通过这个方法,其实我们早已经接触过反射了。

    Class.forName(“com.mysql.jdbc.Driver”);

实例解释

package 反射;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Part1 {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        String string = "string";
        //对象名获取class实例
        Class class1 = string.getClass();
        //静态类名常量获取class实例
        Class class2 = studentTable.class;
        //forname获取class实例
        try {
            Class class3 = Class.forName("反射.studentTable");
            //获取class中方法
            Method[] method2 = class3.getMethods();
            for (Method m : method2) {
                System.out.println(m.getName());
            }
            //获取构造方法实例
            Constructor<studentTable> constructor = class2.getConstructor(String.class);
            studentTable studentTable = (studentTable)constructor.newInstance("hello");
            System.out.println("==================");
            System.out.println(studentTable);
            System.out.println("==================");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }   
    }
}

运行结果

getName
getId
setName
setPassword
getPassword
setId
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
==================
反射.studentTable@6d06d69c
==================

总结

反射作为Java不可或缺的一部分,使得Java具有了动态属性,对于框架的学习有着深入的指导作用。