Java反射机制
一、 Java反射机制
1、什么是java语言的反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2、Java反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法
生成动态代理
3、Java反射的用途
Java 语言的反射机制提供了一种非常通用的动态连接程序组件的方法。它允许你的程序创建和维护任何类的对象(服从安全限制),而不需要提前对目标类进行硬编码。这些特征使得反射在创建与对象一同工作的类库中的通用方法方面非常有用。例如,反射经常被用于那些数据库,XML,Eclipse或者其它的外部的框架中,如Struts,Spring,Hibernate。
二、类加载机制与ClassLoader
1、什么是类加载器 Classloader
与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头CodeSegment(代码段)运行,负责加载Java class的这部分就叫做Class Loader。因此Classloader也叫做类加载器。
2、Java类加载机制
类加载是动态执行的,也就是说当我们用到的时候才会去加载,如果不用的话,就不会去加载我们的类。
类加载有两种方式:第一种就是new一个对象的时候,另一种就是当一个类的静态代码被调用的时候
静态初始化语句块在加载时只执行一次,而初始化语句块在每次new出新的对象是都会执行,等同于构造方法中的语句。
java-verbose:class可以观察类的具体加载过程
以下代码可以说明类加载过程:
.;
public class TestClassLoader {
public static void main(String[] args) {
new A();
("after load A");
new B();
new C();
new C();
new D();
new D();
}
}
class A {
}
class B {
}
class C {
static {
("invoke C static block");
}
}
class D {
{
("invoke D init block");
}
}
运行结果:
[Opened E:\Program\MyEclipse \jre\lib\]
[Opened E:\Program\MyEclipse \jre\lib\]
[Opened E:\Program\MyEclipse \jre\lib\]
[Opened E:\Program\MyEclipse \jre\lib\]
. . .
[Loaded from E:\Program\MyEclipse \jre\lib\]
[Loaded from E:\Program\MyEclipse \jre\lib\]
[Loaded from E:\Program\MyEclipse \jre\lib\]
[Loaded from E:\Program\MyEclipse \jre\lib\]
[Loaded from E:\Program\MyEclipse \jre\lib\]
[Loaded from E:\Program\MyEclipse \jre\lib\]
[Loaded from E:\Program\MyEclipse \jre\lib\]
[Loa
Java反射机制 来自淘豆网m.daumloan.com转载请标明出处.