类加载器把源代码通过class类对象封装类里面的成员变量—>,构造方法,成员方法
当调用java命令来运行某个Java程序时,该命令将会启动一个JVM进程.同一个JVM中的所有线程,变量都处于同一个进程中,共享该JVM的内存区域. 当程序主动使用到某个类时,如果该类还未被加载进内存中,则系统会通过加载,连接,初始化三个步骤来对该类进行初始化操作.
1):类的加载: 类加载时指将类的class文件(字节码文件)载入内存中,并为之创建一个java.lang.Class对象,我们称之为字节码对象. 类的加载过程由类加载器(ClassLoader)完成,类加载器通常有JVM提供,我们称之为系统类加载器,我们也可以继承ClassLoader类来提供自定义类加载器. 不同的类加载器可以实现加载本地字节码文件,jar包中的字节码,通过网络加载字节码等.
2):类的连接: 当类被加载进内存之后,系统为之生产一个对应的Class对象,接着把类的二进制数据合并到JRE中.
1>:验证:检测被加载的类是否有正确的内部结构.
2>:准备:负责为类的static变量分配内存,并设置默认值. 3>:解析:把类的二进制数据中的符号引用替换为直接引用(深入分析JVM). 3):类的初始化: 在此阶段,JVM负责对类进行初始化,主要就是对static变量进行初始化. 类的初始化一个类包含以下几个步骤: 1>:如果该类还未被加载和连接,则程序先加载并连接该类. 2>:如果该类的直接父类还未被初始化,则先初始化其父类.
3>:如果类中有初始化语句(静态代码块),则系统依次执行这些初始化语句.
符号引用:
符号引用是一个字符串,它给出了被引用的内容的名字并且可能会包含一些其他关于这个被引用项的信息——这些信息必须足以唯一的识别一个类、字段、方法。
这样,对于其他类的符号引用必须给出类的全名。
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制
在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。
反射就是把java类中的各种成分映射成一个个的Java对象,一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。