反射机制的理解

一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。

  尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。这个字的意思是“反射、映象、倒影”,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods1。这种“看透class”的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。

 

 

Java中有两种实例化的方式

一种是显示的new:new Object();
一种是反射机制:Class.forName(pockageName.className).newInstance();

本质上 实例化一个对象 分为两部来完成
第一部 加载**.class文件到内存中 并初始化static的部分
第二步 初始化非staitc的部分 并生成实例
第一步相当于Class.forName(pockageName.className)
第二步相当于**********************************.newInstace();

new Object()是直接把这两部都完成了

你可能感兴趣的:(java,c,python,perl,Ruby)