黑马程序员技术交流社区

标题: 反射 反射的Java类的对象的作用是什么 啊? [打印本页]

作者: 飞逸    时间: 2011-12-14 17:12
标题: 反射 反射的Java类的对象的作用是什么 啊?
刚刚接触反射 不知道他的作用和价值在以后的代码中的体现??  求解。。。
作者: 祁焱    时间: 2011-12-14 17:19
反射的一个简单应用:
是一个类的查看器,通过这个查看器可以简单地实现取得类的基本信息:
import java.lang.reflect.*;

public class SimpleClassViewer {
     public static void main(String[] args) {
        try {
            Class c = Class.forName(args[0]);
            // 取得包代表对象
            Package p = c.getPackage();
            
            System.out.printf("package %s;%n", p.getName());
            
            // 取得类型修饰,像是class、interface
            int m = c.getModifiers();
            
            System.out.print(Modifier.toString(m) + " ");
            // 如果是接口
            if(Modifier.isInterface(m)) {
                System.out.print("interface ");
            }
            else {
                System.out.print("class ");
            }
            
            System.out.println(c.getName() + " {");

            // 取得声明的域成员代表对象
            Field[] fields = c.getDeclaredFields();
            for(Field field : fields) {
                // 显示权限修饰,像是public、protected、private
                System.out.print("\t" +
                    Modifier.toString(field.getModifiers()));
                // 显示类型名称
                System.out.print(" " +
                    field.getType().getName() + " ");
                // 显示域成员名称
                System.out.println(field.getName() + ";");
            }

            // 取得声明的构造函数代表对象            
            Constructor[] constructors =
                            c.getDeclaredConstructors();
            for(Constructor constructor : constructors) {
                // 显示权限修饰,像是public、protected、private
                System.out.print("\t" +
                     Modifier.toString(
                       constructor.getModifiers()));
                // 显示构造函数名称
                System.out.println(" " +
                      constructor.getName() + "();");
            }
            // 取得声明的方法成员代表对象            
            Method[] methods = c.getDeclaredMethods();
            for(Method method : methods) {
                // 显示权限修饰,像是public、protected、private
                System.out.print("\t" +
                     Modifier.toString(
                              method.getModifiers()));
                // 显示返回值类型名称
                System.out.print(" " +
                     method.getReturnType().getName() + " ");
                // 显示方法名称
                System.out.println(method.getName() + "();");
            }
            System.out.println("}");
        }
        catch(ArrayIndexOutOfBoundsException e) {
            System.out.println("没有指定类");
        }
        catch(ClassNotFoundException e) {
            System.out.println("找不到指定类");
        }
    }
}

这段代码在五期的论坛上我曾经发过,反射还有许多其它方面的应用,张老师讲代理和spring框架的时候也有反射的应用。
作者: 马伟奇    时间: 2011-12-14 20:04
反射就是:在任意一个方法里:
1.如果我知道一个类的名称/或者它的一个实例对象, 我就能把这个类的所有方法和变量的信息找出来(方法名,变量名,方法,修饰符,类型,方法参数等等所有信息)。
2.如果我还明确知道这个类里某个变量的名称,我还能得到这个变量当前的值。
2.当然,如果我明确知道这个类里的某个方法名+参数个数类型,我还能通过传递参数来运行那个类里的那个方法。
作者: 任涛    时间: 2011-12-15 11:24
1.JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。
2.Java反射机制主要提供了以下功能:在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
作者: 黑马巩伟伟    时间: 2011-12-19 14:40
            反射是java一个关键性质,允许程序在运行时透过反射加载任何一个已知名称的class的内部信息,对于任意一个类,都能够知道这个类的所有属性和方法。包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现interfaces(例如Serializable),并可于运行时改变fields内容或调用methods。
         通俗的说,反射其实也就是程序能够自检查自身信息,就像程序会照镜子反光看自己。在程序中可以检查某个类中的方法属性等信息,并且能够动态调用。这样可以写出很灵活的程序。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2