反射概述与Class类的理解
反射的概述与理解
一般编写Java语言的代码都是静态的,也就是说代码运行的结果,在运行之前,已经被确定了;但也有少部分特例,如Random产生的随机数,在运行时才能被确定,对于这种编译时未确定,使用或称之为运行时确定的性质,称之为动态性,而反射是Java动态性的关键,反射可以让Java在运行时得到并修改任何类的属性,调用任何类方法。
一般的写代码习惯,都是知道了这个类有什么属性,什么方法,再去调用,去修改;每一个类在运行时,都是先通过javac命令都会被编译生成一个自解码文件,输出在out文件夹中以.class,再通过java.exe将其加载到内存中的,通过这个加载的.class文件,再得到这个对应的class类中的属性,方法等内容。这不就是反射吗? 就像是本来是从 原因 ==> 结果 现在可以反过来通过 结果 ==> 原因
正因为有了反射,Java语言也被称为准动态语言
Class类的理解
Class可能和class长的有点像,但两者却完全不同
class我们都知道,是一个关键字,其声名的内容称之为类;每一个类在运行之后会被javac命令先编译为.class自解码文件,之后再通过java.exe命令加载到内存中,这个被加载到内存中的类,我们称之为运行时类,这个运行时类,就是一个Class类的实例。
简单的来说就是,加载进内存的类都是Class的实例,而且每一个类只会被加载一次