Java反射的理解总结
来源:互联网 发布:中国网络零售规模 编辑:程序博客网 时间:2024/06/05 07:31
什么是反射?
根据类的信息来加载这个类,然后构造这个对象,然后再调用这个类中的属性和方法。
我个人理解就是,反射就是让你可以随便调用你没有实例化的东西,因为类在实例化之后就固定了,而反射就打破了这种固定模式,即使你的类没有被实例化加载到内存中,你一样可以在你要使用的时候找到它。
张孝祥说:“反射就是把Java类中的各种成分映射成相应的java类”,其细节方面就是你通过自己编写代码来将类加载到java虚拟机中。
也有人称“反射”为“类的自解析”,通过反射可以让程序变得更加灵活。
反射是审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等。
反射的主要作用是用来扩展系统和动态调用程序集。
所谓扩展系统就是先把系统写好,系统里面定义接口,后面开发的人去写接口的代码。此时该系统就要用反射了,系统用反射调用接口,当接口没写,系统利用反射就不会不会出错,此时就等于没实现此功能而已,当接口被人写好了,系统就会自动调用接口的功能展现在系统上。即反射实现即插即用功能。
最主要作用就是 可以通过配置文件来动态配置和加载类,以实现软件工程里所提及的类与类,模块与模块之间的解耦。
java中主要是通过四种方式来进行class的加载的:
1.classLoader //classLoader.loadClass(A);//在newInstance的时候进行初始化
2.类名.class.
3.对象名.getClass()
4.Class.forName();
Class.forName(A);//在类加载(载入class)的时候即进行初始化
Class.forName(A,false,classLoader);//在newInstance的时候进行初始化。
第一步是获得你想操作的类的 java.lang.Class 对象。下面就是获得一个 Class 对象的方法之一:Class c = Class.forName("java.lang.String"); //这条语句得到一个 String 类的类对象。还有另一种方法:Class c = int.class; 或者Class c = Integer.TYPE; //可获得基本类型的类信息。
第二步是调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。
Method m[] = c.getDeclaredMethods();
System.out.println(m[0].toString()); //以文本方式打印出 String 中定义的第一个方法的原型。
Class.forName 的作用 ? 为什么要用 ?
答: Class是运行中的class类,forName(className)是将这个名为className的类装入JVM,这样就可以动态的加载类,通过Class的反射机制可以获得此类的一些信息。Class.forName 的作用动态加载和创建Class 对象。
类加载器是用来加载.class文件,读取.class文件的字节码并加载到内存中。
java classLoader原理
Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。类装载器是用来把类 (class) 装载进 JVM 的。JVM 规范定义了两种类型的类装载器:启动内装载器 (bootstrap) 和用户自定义装载器。
bootstrap 是 JVM 自带的类装载器,用来装载核心类库,如 java.lang.* 。java.lang.Object 是由 bootstrap 装载的。Java 提供了抽象类 ClassLoader ,所有用户自定义类装载器都实例化自 ClassLoader 的子类。
System Class Loader 是一个特殊的用户自定义类装载器,由 JVM 的实现者提供,在编程者不特别指定装载器的情况下默认装载用户类。系统类装载器可以通过 ClassLoader.getSystemClassLoader() 方法得到。
参考:http://www.the5fire.net/?p=73
- Java反射的理解总结
- 反射的理解总结
- Java反射的理解
- java 反射的理解
- java反射的理解
- Java 反射的理解
- Java 反射的理解
- Java 反射的理解
- Java 反射的理解
- Java 反射的理解
- Java反射的理解
- Java反射机制的个人理解与总结
- 你需要理解的Java反射机制知识总结
- 你需要理解的 Java 反射机制知识总结
- 你需要理解的 Java 反射机制知识总结
- 你需要理解的Java反射机制知识总结
- 你需要理解的Java反射机制知识总结
- 你需要理解的Java反射机制知识总结
- android:layout_weight属性详解
- Android json 解析及简单例子
- C#将DataSet或DataTable转换成Json格式数据传递到前台JS脚本
- 代码的未来----读书笔记(1)
- initWithRootViewController、initWithStyle、initWithNibName
- Java反射的理解总结
- 堆和栈的区别
- 为Java泛型总结
- 测量包装的区别性
- 进程上下文 VS 中断上下文
- Copy Vendor-Material Info Record Data(BDC)
- python解决linux下unzip乱码问题
- div 如何始终在屏幕中间显示
- 在MAC上搭建cordova3.4.0的IOS和android开发环境