类加载器 反射
字节码文件对象: 只有一个
只要加载class文件 读入内存系统就会在堆中创建一个Class对象
初始化时机:
1.创建类的实例
2.使用类名调用静态变量,和调用静态方法时
3.初始化某个类的子类
4.直接使用java.exe命令来运行某个主类
Bootstrap ClassLoader 根类加载器:负责加载java人员写好的类比如System,String
Extension ClssLoader 扩展类加载器 :负责加载从外面导入的包类
System ClassLoader 系统类加载器:负责加载我们自己写的类
反射:(解剖)
JAVA反射机制是在运行状态中,对于任意一个类,
都能够知道这个类的所有属性和方法;对于任意一个对象,
都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
获取Class对象的三种方式
Object类,中的getObject()方法 返回值Class
1.get.Class()方法获取Class对象
2.类名.class;获取Class对象
3.forName("完整包名加类名");(常用)
通过反射获取构造方法并使用
获取的这个字节码文件对象 他把里面的成员方法,成员变量 构造方法都封装成了对象
获取构造方法对象:
getConstructor(Class<?>....parameterTypes):获取公共的构造方法对象
getDeclaredConstructor(Class<?>.....parameterTypes)获取指定参数类型的构造方法(包含私有的)
通过反射创建对象(不同过构造方法创建对象)(快速)
字节码文件对象.newInstance();空参构造 返回值Object
获取成员变量对象(Field类):
get.Field(成员变量的名字);返回值Field对象(获取)(reflect包)
set(Object obj, object value)方法给指定对象的指定成员赋值
get(指定对象名);取值
获取成员方法对象(Method类)
Method getMethod()获取公共的
Method getDeclaredMethod("方法名",方法的参数类型.class)获取任意的包含私有的方法
调用方法:
public Object invoke(那个对象,方法参数) 调用方法
通过构造方法创建对象
newInstance();返回值时Object需要强转
(注意)!私有的构造方法不能创建对象(因为private也是封装)
配置文件 File

浙公网安备 33010602011771号